From b226d451f37549a55e8267e5f892c59e8dd6e72d Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Wed, 18 Nov 2020 23:45:07 -0300 Subject: [PATCH] update dependencies (#4958) * update dependencies * revert keychain update * Update dependencies & Fastlane * set path agnostic for bash in scrips * Fix open from push notification race * patch react-native-localize --- android/app/build.gradle | 2 +- android/app/src/main/AndroidManifest.xml | 2 - .../rnbeta/CustomPushNotification.java | 16 +- android/build.gradle | 3 +- android/settings.gradle | 2 +- app/actions/views/channel.js | 2 + app/actions/views/login.js | 10 +- app/actions/views/root.js | 10 +- app/actions/views/session.js | 10 +- .../network_indicator/network_indicator.js | 2 +- app/init/global_event_handler.js | 6 +- app/init/global_event_handler.test.js | 10 +- app/init/push_notifications.js | 189 -- .../push_notifications.test.js} | 52 +- app/init/push_notifications.ts | 254 ++ app/mattermost.js | 2 - app/push_notifications/index.js | 5 - .../push_notifications.android.js | 130 - .../push_notifications.ios.js | 237 -- app/screens/channel/channel_base.js | 2 +- .../main_sidebar_drawer_button.js | 2 +- .../main_sidebar_drawer_button.test.js | 39 +- .../__snapshots__/gallery.test.js.snap | 68 - app/screens/gallery/animation_helper.ts | 2 +- app/screens/gallery/gallery.js | 2 +- ...llery.test.js => gallery.test.js.disabled} | 0 app/screens/gallery/gallery_viewer.tsx | 2 +- app/screens/index.js | 6 +- app/screens/notification/index.tsx | 19 +- .../notification_settings_mobile.android.js | 21 +- app/store/middlewares/ios_extension.js | 1 + app/types/push_notification.d.ts | 38 +- app/utils/images.js | 4 +- assets/base/i18n/en.json | 1 - detox/package-lock.json | 801 +++--- detox/package.json | 12 +- fastlane/Gemfile.lock | 12 +- ios/Mattermost/AppDelegate.h | 1 + ios/Mattermost/AppDelegate.m | 1 - ...tificationEventHandler+HandleReplyAction.m | 14 +- ios/Podfile | 2 +- ios/Podfile.lock | 108 +- package-lock.json | 2473 +++++++++-------- package.json | 76 +- packager/moduleNames.js | 4 +- packager/modules.android.js | 4 +- packager/modules.ios.js | 4 +- patches/mime-db+1.44.0.patch | 13 - ...h => react-native-device-info+7.1.0.patch} | 0 ...ch => react-native-fast-image+8.3.4.patch} | 0 patches/react-native-localize+2.0.0.patch | 41 + ... => react-native-mmkv-storage+0.4.1.patch} | 11 +- ...ch => react-native-navigation+7.3.0.patch} | 20 +- .../react-native-notifications+2.1.7.patch | 449 --- .../react-native-notifications+3.4.0.patch | 499 ++++ scripts/build.sh | 4 +- scripts/clean.sh | 2 +- scripts/postinstall.sh | 2 +- scripts/pre-commit.sh | 2 +- scripts/precommit/i18n.sh | 2 +- test/setup.js | 31 + tsconfig.json | 5 +- 62 files changed, 2848 insertions(+), 2896 deletions(-) delete mode 100644 app/init/push_notifications.js rename app/{push_notifications/push_notifications.ios.test.js => init/push_notifications.test.js} (64%) create mode 100644 app/init/push_notifications.ts delete mode 100644 app/push_notifications/index.js delete mode 100644 app/push_notifications/push_notifications.android.js delete mode 100644 app/push_notifications/push_notifications.ios.js delete mode 100644 app/screens/gallery/__snapshots__/gallery.test.js.snap rename app/screens/gallery/{gallery.test.js => gallery.test.js.disabled} (100%) delete mode 100644 patches/mime-db+1.44.0.patch rename patches/{react-native-device-info+7.0.2.patch => react-native-device-info+7.1.0.patch} (100%) rename patches/{react-native-fast-image+8.3.2.patch => react-native-fast-image+8.3.4.patch} (100%) create mode 100644 patches/react-native-localize+2.0.0.patch rename patches/{react-native-mmkv-storage+0.3.7.patch => react-native-mmkv-storage+0.4.1.patch} (87%) rename patches/{react-native-navigation+7.1.0.patch => react-native-navigation+7.3.0.patch} (74%) delete mode 100644 patches/react-native-notifications+2.1.7.patch create mode 100644 patches/react-native-notifications+3.4.0.patch diff --git a/android/app/build.gradle b/android/app/build.gradle index 275e9a079..a0eb051f9 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -250,7 +250,7 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation project(':reactnativenotifications') - implementation 'com.google.firebase:firebase-messaging:17.3.4' + implementation "com.google.firebase:firebase-messaging:$firebaseVersion" // For animated GIF support implementation 'com.facebook.fresco:fresco:2.0.0' diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 7e71f36f4..76e581e63 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -26,8 +26,6 @@ - - = 0; i--) { Bundle data = bundleList.get(i); - String message = data.getString("message"); + String message = data.getString("message", data.getString("body")); String senderId = data.getString("sender_id"); if (senderId == null) { senderId = "sender_id"; @@ -372,7 +372,7 @@ public class CustomPushNotification extends PushNotification { Bundle userInfoBundle = data.getBundle("userInfo"); String senderName = getSenderName(data); if (userInfoBundle != null) { - boolean localPushNotificationTest = userInfoBundle.getBoolean("localTest"); + boolean localPushNotificationTest = userInfoBundle.getBoolean("test"); if (localPushNotificationTest) { senderName = "Test"; } @@ -403,13 +403,15 @@ public class CustomPushNotification extends PushNotification { NotificationChannel notificationChannel = mHighImportanceChannel; - boolean localPushNotificationTest = false; + boolean testNotification = false; + boolean localNotification = false; Bundle userInfoBundle = bundle.getBundle("userInfo"); if (userInfoBundle != null) { - localPushNotificationTest = userInfoBundle.getBoolean("localTest"); + testNotification = userInfoBundle.getBoolean("test"); + localNotification = userInfoBundle.getBoolean("local"); } - if (mAppLifecycleFacade.isAppVisible() && !localPushNotificationTest) { + if (mAppLifecycleFacade.isAppVisible() && !testNotification && !localNotification) { notificationChannel = mMinImportanceChannel; } diff --git a/android/build.gradle b/android/build.gradle index e0764e7e5..dce2aa96b 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,6 +8,7 @@ buildscript { targetSdkVersion = 29 supportLibVersion = "28.0.0" kotlinVersion = "1.3.61" + firebaseVersion = "21.0.0" RNNKotlinVersion = kotlinVersion } @@ -20,7 +21,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.5.3' classpath 'com.google.gms:google-services:4.2.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/android/settings.gradle b/android/settings.gradle index 96a34c969..9369160c6 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,5 +1,5 @@ rootProject.name = 'Mattermost' include ':reactnativenotifications' -project(':reactnativenotifications').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notifications/android/app') +project(':reactnativenotifications').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notifications/lib/android/app') apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' diff --git a/app/actions/views/channel.js b/app/actions/views/channel.js index 282449d78..b34899a73 100644 --- a/app/actions/views/channel.js +++ b/app/actions/views/channel.js @@ -293,6 +293,8 @@ export function markChannelViewedAndRead(channelId, previousChannelId, markOnSer const actions = markAsViewedAndReadBatch(state, channelId, previousChannelId, markOnServer); dispatch(batchActions(actions, 'BATCH_MARK_CHANNEL_VIEWED_AND_READ')); + + return {data: true}; }; } diff --git a/app/actions/views/login.js b/app/actions/views/login.js index 780853b79..17a9d19fa 100644 --- a/app/actions/views/login.js +++ b/app/actions/views/login.js @@ -13,7 +13,7 @@ import {isTimezoneEnabled} from '@mm-redux/selectors/entities/timezone'; import {getCurrentUserId} from '@mm-redux/selectors/entities/users'; import {setAppCredentials} from 'app/init/credentials'; -import PushNotifications from 'app/push_notifications'; +import PushNotifications from '@init/push_notifications'; import {getDeviceTimezone} from 'app/utils/timezone'; import {setCSRFFromCookie} from 'app/utils/security'; import {loadConfigAndLicense} from 'app/actions/views/root'; @@ -94,11 +94,11 @@ export function scheduleExpiredNotification(intl) { }); if (expiresAt) { - PushNotifications.localNotificationSchedule({ - date: new Date(expiresAt), - message, + PushNotifications.scheduleNotification({ + fireDate: expiresAt, + body: message, userInfo: { - localNotification: true, + local: true, }, }); } diff --git a/app/actions/views/root.js b/app/actions/views/root.js index 0ad496e80..3a697249f 100644 --- a/app/actions/views/root.js +++ b/app/actions/views/root.js @@ -66,17 +66,17 @@ export function loadConfigAndLicense() { export function loadFromPushNotification(notification) { return async (dispatch, getState) => { const state = getState(); - const {data} = notification; + const {payload} = notification; const {currentTeamId, teams, myMembers: myTeamMembers} = state.entities.teams; const {channels} = state.entities.channels; let channelId = ''; let teamId = currentTeamId; - if (data) { - channelId = data.channel_id; + if (payload) { + channelId = payload.channel_id; // when the notification does not have a team id is because its from a DM or GM - teamId = data.team_id || currentTeamId; + teamId = payload.team_id || currentTeamId; } // load any missing data @@ -96,6 +96,8 @@ export function loadFromPushNotification(notification) { } dispatch(handleSelectTeamAndChannel(teamId, channelId)); + + return {data: true}; }; } diff --git a/app/actions/views/session.js b/app/actions/views/session.js index f79cd4e49..0af04c2f4 100644 --- a/app/actions/views/session.js +++ b/app/actions/views/session.js @@ -8,7 +8,7 @@ import {Client4} from '@mm-redux/client'; import {getConfig} from '@mm-redux/selectors/entities/general'; import {isMinimumServerVersion} from '@mm-redux/utils/helpers'; -import PushNotifications from 'app/push_notifications'; +import PushNotifications from '@init/push_notifications'; const sortByNewest = (a, b) => { if (a.create_at > b.create_at) { @@ -56,11 +56,11 @@ export function scheduleExpiredNotification(intl) { if (expiresAt) { // eslint-disable-next-line no-console console.log('Schedule Session Expiry Local Push Notification', expiresAt); - PushNotifications.localNotificationSchedule({ - date: new Date(expiresAt), - message, + PushNotifications.scheduleNotification({ + fireDate: expiresAt, + body: message, userInfo: { - localNotification: true, + local: true, }, }); } diff --git a/app/components/network_indicator/network_indicator.js b/app/components/network_indicator/network_indicator.js index fd301e271..909ddad1d 100644 --- a/app/components/network_indicator/network_indicator.js +++ b/app/components/network_indicator/network_indicator.js @@ -24,7 +24,7 @@ import networkConnectionListener, {checkConnection} from '@utils/network'; import {t} from '@utils/i18n'; import mattermostBucket from 'app/mattermost_bucket'; -import PushNotifications from 'app/push_notifications'; +import PushNotifications from '@init/push_notifications'; const MAX_WEBSOCKET_RETRIES = 3; const CONNECTION_RETRY_SECONDS = 5; diff --git a/app/init/global_event_handler.js b/app/init/global_event_handler.js index 9a16c4b17..9a44edf8b 100644 --- a/app/init/global_event_handler.js +++ b/app/init/global_event_handler.js @@ -17,6 +17,7 @@ import {loadMe, logout} from '@actions/views/user'; import LocalConfig from '@assets/config'; import {NavigationTypes, ViewTypes} from '@constants'; import {getTranslations, resetMomentLocale} from '@i18n'; +import PushNotifications from '@init/push_notifications'; import {setAppState, setServerVersion} from '@mm-redux/actions/general'; import {getTeams} from '@mm-redux/actions/teams'; import {autoUpdateTimezone} from '@mm-redux/actions/timezone'; @@ -38,7 +39,6 @@ import {getDeviceTimezone} from '@utils/timezone'; import mattermostBucket from 'app/mattermost_bucket'; import mattermostManaged from 'app/mattermost_managed'; -import PushNotifications from 'app/push_notifications'; import {getAppCredentials, removeAppCredentials} from './credentials'; import emmProvider from './emm_provider'; @@ -384,12 +384,12 @@ class GlobalEventHandler { } handleInAppNotification = (notification) => { - const {data} = notification; + const {payload} = notification; const {getState} = Store.redux; const state = getState(); const currentChannelId = getCurrentChannelId(state); - if (data && data.channel_id !== currentChannelId) { + if (payload?.channel_id !== currentChannelId) { const screen = 'Notification'; const passProps = { notification, diff --git a/app/init/global_event_handler.test.js b/app/init/global_event_handler.test.js index 07e0bbcb1..f0fe5f39b 100644 --- a/app/init/global_event_handler.test.js +++ b/app/init/global_event_handler.test.js @@ -8,11 +8,11 @@ import semver from 'semver/preload'; import {MinServerVersion} from '@assets/config'; import * as I18n from '@i18n'; +import PushNotification from '@init/push_notifications'; import EventEmitter from '@mm-redux/utils/event_emitter'; import Store from '@store/store'; import intitialState from '@store/initial_state'; -import PushNotification from 'app/push_notifications'; import mattermostBucket from 'app/mattermost_bucket'; import GlobalEventHandler from './global_event_handler'; @@ -29,14 +29,6 @@ jest.mock('@utils/error_handling', () => ({ }, })); -jest.mock('react-native-notifications', () => ({ - addEventListener: jest.fn(), - cancelAllLocalNotifications: jest.fn(), - setBadgesCount: jest.fn(), - NotificationAction: jest.fn(), - NotificationCategory: jest.fn(), -})); - jest.mock('react-native-status-bar-size', () => ({ addEventListener: jest.fn(), })); diff --git a/app/init/push_notifications.js b/app/init/push_notifications.js deleted file mode 100644 index e59c8451d..000000000 --- a/app/init/push_notifications.js +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import {Platform} from 'react-native'; -import DeviceInfo from 'react-native-device-info'; - -import {markChannelViewedAndRead, fetchPostActionWithRetry} from '@actions/views/channel'; -import {dismissAllModals, popToRoot} from '@actions/navigation'; -import {getPosts} from '@actions/views/post'; -import { - createPostForNotificationReply, - loadFromPushNotification, -} from '@actions/views/root'; -import {logout} from '@actions/views/user'; -import {NavigationTypes, ViewTypes} from '@constants'; -import {getLocalizedMessage} from '@i18n'; -import {getCurrentServerUrl, getAppCredentials} from '@init/credentials'; -import {setDeviceToken} from '@mm-redux/actions/general'; -import {Client4} from '@mm-redux/client'; -import {General} from '@mm-redux/constants'; -import EventEmitter from '@mm-redux/utils/event_emitter'; -import {getCurrentLocale} from '@selectors/i18n'; -import EphemeralStore from '@store/ephemeral_store'; -import Store from '@store/store'; -import {waitForHydration} from '@store/utils'; -import {t} from '@utils/i18n'; - -import PushNotifications from 'app/push_notifications'; - -const NOTIFICATION_TYPE = { - CLEAR: 'clear', - MESSAGE: 'message', - SESSION: 'session', -}; - -class PushNotificationUtils { - constructor() { - this.configured = false; - this.replyNotificationData = null; - } - - configure = async () => { - return PushNotifications.configure({ - onRegister: this.onRegisterDevice, - onNotification: this.onPushNotification, - onReply: this.onPushNotificationReply, - popInitialNotification: true, - requestPermissions: true, - }); - }; - - loadFromNotification = async (notification) => { - await Store.redux.dispatch(loadFromPushNotification(notification)); - - // if we have a componentId means that the app is already initialized - const componentId = EphemeralStore.getNavigationTopComponentId(); - if (componentId) { - EventEmitter.emit(NavigationTypes.CLOSE_MAIN_SIDEBAR); - EventEmitter.emit(NavigationTypes.CLOSE_SETTINGS_SIDEBAR); - - await dismissAllModals(); - await popToRoot(); - - PushNotifications.resetNotification(); - } - }; - - onPushNotification = async (deviceNotification) => { - const {dispatch} = Store.redux; - const {data, foreground, message, userInfo, userInteraction} = deviceNotification; - const notification = { - data, - message, - userInfo, - }; - - waitForHydration(Store.redux, () => { - switch (data.type) { - case NOTIFICATION_TYPE.CLEAR: - dispatch(markChannelViewedAndRead(data.channel_id, null, false)); - break; - case NOTIFICATION_TYPE.MESSAGE: - // get the posts for the channel as soon as possible - dispatch(fetchPostActionWithRetry(getPosts(data.channel_id))); - - if (foreground) { - EventEmitter.emit(ViewTypes.NOTIFICATION_IN_APP, notification); - } else if (userInteraction && !notification?.userInfo?.localNotification && !notification?.data?.localNotification) { - this.loadFromNotification(notification); - } - break; - case NOTIFICATION_TYPE.SESSION: - // eslint-disable-next-line no-console - console.log('Session expired notification'); - dispatch(logout()); - break; - } - }); - }; - - onPushNotificationReply = async (data, text, completion) => { - const {dispatch, getState} = Store.redux; - const state = getState(); - const credentials = await getAppCredentials(); // TODO Change to handle multiple servers - const url = await getCurrentServerUrl(); // TODO Change to handle multiple servers - const token = credentials.password; - const usernameParsed = credentials.username.split(','); - const [, currentUserId] = usernameParsed; - - if (currentUserId) { - // one thing to note is that for android it will reply to the last post in the stack - const rootId = data.root_id || data.post_id; - const post = { - user_id: currentUserId, - channel_id: data.channel_id, - root_id: rootId, - parent_id: rootId, - message: text, - }; - - if (!Client4.getUrl()) { - // Make sure the Client has the server url set - Client4.setUrl(url); - } - - if (!Client4.getToken()) { - // Make sure the Client has the server token set - Client4.setToken(token); - } - - dispatch(fetchPostActionWithRetry(getPosts(data.channel_id))); - const result = await dispatch(createPostForNotificationReply(post)); - if (result.error) { - const locale = getCurrentLocale(state); - PushNotifications.localNotification({ - message: getLocalizedMessage(locale, t('mobile.reply_post.failed')), - userInfo: { - localNotification: true, - localTest: true, - channel_id: data.channel_id, - }, - }); - completion(); - return; - } - - this.replyNotificationData = null; - - PushNotifications.getDeliveredNotifications((notifications) => { - PushNotifications.setApplicationIconBadgeNumber(notifications.length); - completion(); - }); - } else { - this.replyNotificationData = { - data, - text, - completion, - }; - } - }; - - onRegisterDevice = (data) => { - const {dispatch} = Store.redux; - - let prefix; - if (Platform.OS === 'ios') { - prefix = General.PUSH_NOTIFY_APPLE_REACT_NATIVE; - if (DeviceInfo.getBundleId().includes('rnbeta')) { - prefix = `${prefix}beta`; - } - } else { - prefix = General.PUSH_NOTIFY_ANDROID_REACT_NATIVE; - } - - EphemeralStore.deviceToken = `${prefix}:${data.token}`; - - // TODO: Remove when realm is ready - waitForHydration(Store.redux, () => { - this.configured = true; - dispatch(setDeviceToken(EphemeralStore.deviceToken)); - }); - }; - - getNotification = () => { - return PushNotifications.getNotification(); - }; -} - -export default new PushNotificationUtils(); \ No newline at end of file diff --git a/app/push_notifications/push_notifications.ios.test.js b/app/init/push_notifications.test.js similarity index 64% rename from app/push_notifications/push_notifications.ios.test.js rename to app/init/push_notifications.test.js index 60978005d..34c68b5df 100644 --- a/app/push_notifications/push_notifications.ios.test.js +++ b/app/init/push_notifications.test.js @@ -3,37 +3,12 @@ /* eslint-disable no-import-assign */ -import NotificationsIOS from 'react-native-notifications'; +import {Notifications} from 'react-native-notifications'; import * as ViewSelectors from '@selectors/views'; import Store from '@store/store'; -import PushNotification from './push_notifications.ios'; - -jest.mock('react-native-notifications', () => { - let badgesCount = 0; - let deliveredNotifications = []; - - return { - getBadgesCount: jest.fn((callback) => callback(badgesCount)), - setBadgesCount: jest.fn((count) => { - badgesCount = count; - }), - addEventListener: jest.fn(), - setDeliveredNotifications: jest.fn((notifications) => { - deliveredNotifications = notifications; - }), - getDeliveredNotifications: jest.fn(async (callback) => { - await callback(deliveredNotifications); - }), - removeDeliveredNotifications: jest.fn((ids) => { - deliveredNotifications = deliveredNotifications.filter((n) => !ids.includes(n.identifier)); - }), - cancelAllLocalNotifications: jest.fn(), - NotificationAction: jest.fn(), - NotificationCategory: jest.fn(), - }; -}); +import PushNotification from './push_notifications'; describe('PushNotification', () => { const channel1ID = 'channel-1-id'; @@ -66,18 +41,15 @@ describe('PushNotification', () => { channel_id: channel2ID, }, ]; - NotificationsIOS.setDeliveredNotifications(deliveredNotifications); + Notifications.setDeliveredNotifications(deliveredNotifications); const notificationCount = deliveredNotifications.length; expect(notificationCount).toBe(5); - NotificationsIOS.setBadgesCount(notificationCount); - NotificationsIOS.getBadgesCount((count) => expect(count).toBe(notificationCount)); - // Clear channel1 notifications await PushNotification.clearChannelNotifications(channel1ID); - await NotificationsIOS.getDeliveredNotifications(async (deliveredNotifs) => { + await Notifications.ios.getDeliveredNotifications(async (deliveredNotifs) => { expect(deliveredNotifs.length).toBe(2); const channel1DeliveredNotifications = deliveredNotifs.filter((n) => n.channel_id === channel1ID); const channel2DeliveredNotifications = deliveredNotifs.filter((n) => n.channel_id === channel2ID); @@ -92,33 +64,33 @@ describe('PushNotification', () => { PushNotification.clearNotifications(); expect(setApplicationIconBadgeNumber).toHaveBeenCalledWith(0); - expect(NotificationsIOS.setBadgesCount).toHaveBeenCalledWith(0); + expect(Notifications.ios.setBadgeCount).toHaveBeenCalledWith(0); expect(cancelAllLocalNotifications).toHaveBeenCalled(); - expect(NotificationsIOS.cancelAllLocalNotifications).toHaveBeenCalled(); + expect(Notifications.cancelAllLocalNotifications).toHaveBeenCalled(); }); - it('clearChannelNotifications should set app badge number from to delivered notification count when redux store is not set', () => { + it('clearChannelNotifications should set app badge number from to delivered notification count when redux store is not set', async () => { Store.redux = null; const setApplicationIconBadgeNumber = jest.spyOn(PushNotification, 'setApplicationIconBadgeNumber'); const deliveredNotifications = [{identifier: 1}, {identifier: 2}]; - NotificationsIOS.setDeliveredNotifications(deliveredNotifications); + Notifications.setDeliveredNotifications(deliveredNotifications); - PushNotification.clearChannelNotifications(); + await PushNotification.clearChannelNotifications(); expect(setApplicationIconBadgeNumber).toHaveBeenCalledWith(deliveredNotifications.length); }); - it('clearChannelNotifications should set app badge number from redux store when set', () => { + it('clearChannelNotifications should set app badge number from redux store when set', async () => { Store.redux = { getState: jest.fn(), }; const setApplicationIconBadgeNumber = jest.spyOn(PushNotification, 'setApplicationIconBadgeNumber'); const deliveredNotifications = [{identifier: 1}, {identifier: 2}]; - NotificationsIOS.setDeliveredNotifications(deliveredNotifications); + Notifications.setDeliveredNotifications(deliveredNotifications); const stateBadgeCount = 2 * deliveredNotifications.length; ViewSelectors.getBadgeCount = jest.fn().mockReturnValue(stateBadgeCount); - PushNotification.clearChannelNotifications(); + await PushNotification.clearChannelNotifications(); expect(setApplicationIconBadgeNumber).toHaveBeenCalledWith(stateBadgeCount); }); }); diff --git a/app/init/push_notifications.ts b/app/init/push_notifications.ts new file mode 100644 index 000000000..dc52141e5 --- /dev/null +++ b/app/init/push_notifications.ts @@ -0,0 +1,254 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {AppState, NativeModules, Platform} from 'react-native'; +import DeviceInfo from 'react-native-device-info'; +import { + Notification, + NotificationAction, + NotificationBackgroundFetchResult, + NotificationCategory, + NotificationCompletion, + Notifications, + NotificationTextInput, + Registered, +} from 'react-native-notifications'; + +import {dismissAllModals, popToRoot} from '@actions/navigation'; +import {markChannelViewedAndRead, fetchPostActionWithRetry} from '@actions/views/channel'; +import {getPosts} from '@actions/views/post'; +import {loadFromPushNotification} from '@actions/views/root'; +import {logout} from '@actions/views/user'; +import {NavigationTypes, ViewTypes} from '@constants'; +import {getLocalizedMessage} from '@i18n'; +import {setDeviceToken} from '@mm-redux/actions/general'; +import {General} from '@mm-redux/constants'; +import EventEmitter from '@mm-redux/utils/event_emitter'; +import {getCurrentLocale} from '@selectors/i18n'; +import {getBadgeCount} from '@selectors/views'; +import EphemeralStore from '@store/ephemeral_store'; +import Store from '@store/store'; +import {waitForHydration} from '@store/utils'; +import {t} from '@utils/i18n'; + +import type {DispatchFunc} from '@mm-redux/types/actions'; + +const CATEGORY = 'CAN_REPLY'; +const REPLY_ACTION = 'REPLY_ACTION'; +const AndroidNotificationPreferences = Platform.OS === 'android' ? NativeModules.NotificationPreferences : null; +const NOTIFICATION_TYPE = { + CLEAR: 'clear', + MESSAGE: 'message', + SESSION: 'session', +}; + +interface NotificationWithChannel extends Notification { + identifier: string; + channel_id: string; +} + +class PushNotifications { + configured = false; + + constructor() { + Notifications.registerRemoteNotifications(); + Notifications.events().registerNotificationOpened(this.onNotificationOpened); + Notifications.events().registerRemoteNotificationsRegistered(this.onRemoteNotificationsRegistered); + Notifications.events().registerNotificationReceivedBackground(this.onNotificationReceivedBackground); + Notifications.events().registerNotificationReceivedForeground(this.onNotificationReceivedForeground); + + this.getInitialNotification(); + } + + cancelAllLocalNotifications() { + Notifications.cancelAllLocalNotifications(); + } + + clearNotifications = () => { + this.setApplicationIconBadgeNumber(0); + + // TODO: Only cancel the local notifications that belong to this server + this.cancelAllLocalNotifications(); + }; + + clearChannelNotifications = async (channelId: string) => { + if (Platform.OS === 'android') { + const notifications = await AndroidNotificationPreferences.getDeliveredNotifications(); + const notificationForChannel = notifications.find((n: NotificationWithChannel) => n.channel_id === channelId); + if (notificationForChannel) { + AndroidNotificationPreferences.removeDeliveredNotifications(notificationForChannel.identifier, channelId); + } + } else { + const ids: string[] = []; + const notifications = await Notifications.ios.getDeliveredNotifications(); + let badgeCount = notifications.length; + + if (Store.redux) { + const totalMentions = getBadgeCount(Store.redux.getState()); + if (totalMentions > -1) { + badgeCount = totalMentions; + } + } + + for (let i = 0; i < notifications.length; i++) { + const notification = notifications[i] as NotificationWithChannel; + if (notification.channel_id === channelId) { + ids.push(notification.identifier); + } + } + + if (ids.length) { + Notifications.ios.removeDeliveredNotifications(ids); + } + + this.setApplicationIconBadgeNumber(badgeCount); + } + } + + createReplyCategory = () => { + const {getState} = Store.redux!; + const state = getState(); + const locale = getCurrentLocale(state); + + const replyTitle = getLocalizedMessage(locale, t('mobile.push_notification_reply.title')); + const replyButton = getLocalizedMessage(locale, t('mobile.push_notification_reply.button')); + const replyPlaceholder = getLocalizedMessage(locale, t('mobile.push_notification_reply.placeholder')); + const replyTextInput: NotificationTextInput = { + buttonTitle: replyButton, + placeholder: replyPlaceholder, + }; + const replyAction = new NotificationAction(REPLY_ACTION, 'background', replyTitle, true, replyTextInput); + return new NotificationCategory(CATEGORY, [replyAction]); + } + + getInitialNotification = async () => { + const notification: NotificationWithData | undefined = await Notifications.getInitialNotification(); + + if (notification) { + EphemeralStore.setStartFromNotification(true); + notification.userInteraction = true; + + // getInitialNotification may run before the store is set + // that is why we run on an interval until the store is available + // once we handle the notification the interval is cleared. + const interval = setInterval(() => { + if (Store.redux) { + clearInterval(interval); + this.handleNotification(notification); + } + }, 500); + } + } + + handleNotification = (notification: NotificationWithData) => { + const {payload, foreground, userInteraction} = notification; + + if (Store.redux && payload) { + const dispatch = Store.redux.dispatch as DispatchFunc; + + waitForHydration(Store.redux, async () => { + switch (payload.type) { + case NOTIFICATION_TYPE.CLEAR: + dispatch(markChannelViewedAndRead(payload.channel_id, null, false)); + break; + case NOTIFICATION_TYPE.MESSAGE: + // get the posts for the channel as soon as possible + dispatch(fetchPostActionWithRetry(getPosts(payload.channel_id))); + + if (foreground) { + EventEmitter.emit(ViewTypes.NOTIFICATION_IN_APP, notification); + } else if (userInteraction && !payload.userInfo?.local) { + dispatch(loadFromPushNotification(notification)); + const componentId = EphemeralStore.getNavigationTopComponentId(); + if (componentId) { + EventEmitter.emit(NavigationTypes.CLOSE_MAIN_SIDEBAR); + EventEmitter.emit(NavigationTypes.CLOSE_SETTINGS_SIDEBAR); + + await dismissAllModals(); + await popToRoot(); + } + } + break; + case NOTIFICATION_TYPE.SESSION: + // eslint-disable-next-line no-console + console.log('Session expired notification'); + dispatch(logout()); + break; + } + }); + } + } + + localNotification = (notification: Notification) => { + Notifications.postLocalNotification(notification); + } + + onNotificationOpened = (notification: NotificationWithData, completion: () => void) => { + notification.userInteraction = true; + this.handleNotification(notification); + completion(); + } + + onNotificationReceivedBackground = (notification: NotificationWithData, completion: (response: NotificationBackgroundFetchResult) => void) => { + this.handleNotification(notification); + completion(NotificationBackgroundFetchResult.NO_DATA); + }; + + onNotificationReceivedForeground = (notification: NotificationWithData, completion: (response: NotificationCompletion) => void) => { + notification.foreground = AppState.currentState === 'active'; + completion({alert: false, sound: true, badge: true}); + this.handleNotification(notification); + }; + + onRemoteNotificationsRegistered = (event: Registered) => { + if (!this.configured) { + this.configured = true; + const {deviceToken} = event; + let prefix; + + if (Platform.OS === 'ios') { + prefix = General.PUSH_NOTIFY_APPLE_REACT_NATIVE; + if (DeviceInfo.getBundleId().includes('rnbeta')) { + prefix = `${prefix}beta`; + } + } else { + prefix = General.PUSH_NOTIFY_ANDROID_REACT_NATIVE; + } + + EphemeralStore.deviceToken = `${prefix}:${deviceToken}`; + if (Store.redux) { + const dispatch = Store.redux.dispatch as DispatchFunc; + waitForHydration(Store.redux, () => { + this.requestNotificationReplyPermissions(); + dispatch(setDeviceToken(EphemeralStore.deviceToken)); + }); + } + } + }; + + requestNotificationReplyPermissions = () => { + if (Platform.OS === 'ios') { + const replyCategory = this.createReplyCategory(); + Notifications.setCategories([replyCategory]); + } + }; + + setApplicationIconBadgeNumber = (value: number) => { + if (Platform.OS === 'ios') { + const count = value < 0 ? 0 : value; + Notifications.ios.setBadgeCount(count); + } + }; + + scheduleNotification = (notification: Notification) => { + if (notification.fireDate) { + if (Platform.OS === 'ios') { + notification.fireDate = new Date(notification.fireDate).toISOString(); + } + + Notifications.postLocalNotification(notification); + } + }; +} + +export default new PushNotifications(); \ No newline at end of file diff --git a/app/mattermost.js b/app/mattermost.js index 62b679255..0bdf5c11d 100644 --- a/app/mattermost.js +++ b/app/mattermost.js @@ -17,7 +17,6 @@ import emmProvider from '@init/emm_provider'; import '@init/device'; import '@init/fetch'; import globalEventHandler from '@init/global_event_handler'; -import pushNotifications from '@init/push_notifications'; import {registerScreens} from '@screens'; import configureStore from '@store'; import EphemeralStore from '@store/ephemeral_store'; @@ -37,7 +36,6 @@ const init = async () => { const MMKVStorage = await getStorage(); const {store} = configureStore(MMKVStorage); - await pushNotifications.configure(); globalEventHandler.configure({ launchApp, }); diff --git a/app/push_notifications/index.js b/app/push_notifications/index.js deleted file mode 100644 index 18cb48205..000000000 --- a/app/push_notifications/index.js +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import PushNotifications from './push_notifications'; -export default PushNotifications; diff --git a/app/push_notifications/push_notifications.android.js b/app/push_notifications/push_notifications.android.js deleted file mode 100644 index 66e787052..000000000 --- a/app/push_notifications/push_notifications.android.js +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import {AppState, NativeModules} from 'react-native'; -import {NotificationsAndroid, PendingNotifications} from 'react-native-notifications'; - -import EphemeralStore from '@store/ephemeral_store'; - -const {NotificationPreferences} = NativeModules; - -class PushNotification { - constructor() { - this.onRegister = null; - this.onNotification = null; - this.deviceNotification = null; - this.deviceToken = null; - - NotificationsAndroid.setRegistrationTokenUpdateListener((deviceToken) => { - this.deviceToken = deviceToken; - if (this.onRegister) { - this.onRegister({token: this.deviceToken}); - } - }); - - NotificationsAndroid.setNotificationReceivedListener((notification) => { - if (notification) { - const data = notification.getData(); - this.handleNotification(data, false); - } - }); - - NotificationsAndroid.setNotificationOpenedListener((notification) => { - if (notification) { - EphemeralStore.setStartFromNotification(true); - const data = notification.getData(); - this.handleNotification(data, true); - } - }); - } - - handleNotification = (data, userInteraction) => { - const foreground = !userInteraction && AppState.currentState === 'active'; - this.deviceNotification = { - data, - foreground, - message: data.message, - userInfo: data.userInfo, - userInteraction, - }; - - if (this.onNotification && (foreground || userInteraction)) { - this.onNotification(this.deviceNotification); - } - }; - - configure(options) { - this.onRegister = options.onRegister; - this.onNotification = options.onNotification; - - if (this.onRegister && this.deviceToken) { - this.onRegister({token: this.deviceToken}); - } - - return new Promise((resolve) => { - if (!options.popInitialNotification) { - resolve(); - return; - } - - PendingNotifications.getInitialNotification(). - then((notification) => { - if (notification) { - const data = notification.getData(); - if (data) { - EphemeralStore.setStartFromNotification(true); - this.handleNotification(data, true); - } - } - }). - catch((err) => { - console.log('Android getInitialNotifiation() failed', err); //eslint-disable-line no-console - }). - finally(() => { - resolve(); - }); - }); - } - - localNotificationSchedule(notification) { - if (notification.date) { - notification.fireDate = notification.date.getTime(); - Reflect.deleteProperty(notification, 'date'); - NotificationsAndroid.scheduleLocalNotification(notification); - } - } - - localNotification(notification) { - NotificationsAndroid.localNotification(notification); - } - - cancelAllLocalNotifications() { - NotificationsAndroid.cancelAllLocalNotifications(); - } - - setApplicationIconBadgeNumber() { - // Not supported for Android - } - - getNotification() { - return this.deviceNotification; - } - - resetNotification() { - this.deviceNotification = null; - } - - async clearChannelNotifications(channelId) { - const notifications = await NotificationPreferences.getDeliveredNotifications(); - const notificationForChannel = notifications.find((n) => n.channel_id === channelId); - if (notificationForChannel) { - NotificationPreferences.removeDeliveredNotifications(notificationForChannel.identifier, channelId); - } - } - - clearNotifications = () => { - this.cancelAllLocalNotifications(); // TODO: Only cancel the local notifications that belong to this server - } -} - -export default new PushNotification(); diff --git a/app/push_notifications/push_notifications.ios.js b/app/push_notifications/push_notifications.ios.js deleted file mode 100644 index 9ef41b29c..000000000 --- a/app/push_notifications/push_notifications.ios.js +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import {AppState} from 'react-native'; -import NotificationsIOS, { - NotificationAction, - NotificationCategory, - DEVICE_REMOTE_NOTIFICATIONS_REGISTERED_EVENT, - DEVICE_NOTIFICATION_RECEIVED_FOREGROUND_EVENT, - DEVICE_NOTIFICATION_OPENED_EVENT, -} from 'react-native-notifications'; - -import {getLocalizedMessage} from '@i18n'; -import {getCurrentLocale} from '@selectors/i18n'; -import {getBadgeCount} from '@selectors/views'; -import EphemeralStore from '@store/ephemeral_store'; -import Store from '@store/store'; -import {t} from '@utils/i18n'; - -const CATEGORY = 'CAN_REPLY'; -const REPLY_ACTION = 'REPLY_ACTION'; - -class PushNotification { - constructor() { - this.deviceNotification = null; - this.onRegister = null; - this.onNotification = null; - - NotificationsIOS.addEventListener(DEVICE_REMOTE_NOTIFICATIONS_REGISTERED_EVENT, this.onRemoteNotificationsRegistered); - NotificationsIOS.addEventListener(DEVICE_NOTIFICATION_RECEIVED_FOREGROUND_EVENT, this.onNotificationReceivedForeground); - NotificationsIOS.addEventListener(DEVICE_NOTIFICATION_OPENED_EVENT, this.onNotificationOpened); - } - - handleNotification = (data, foreground, userInteraction) => { - this.deviceNotification = { - data, - foreground, - message: data.body || data.message, - userInfo: data.userInfo, - userInteraction, - }; - - if (this.onNotification) { - this.onNotification(this.deviceNotification); - } - }; - - configure(options) { - this.onRegister = options.onRegister; - this.onNotification = options.onNotification; - - this.requestNotificationReplyPermissions(); - - return new Promise((resolve) => { - if (!options.popInitialNotification) { - resolve(); - return; - } - - NotificationsIOS.getInitialNotification(). - then((notification) => { - if (notification) { - const data = notification.getData(); - if (data) { - EphemeralStore.setStartFromNotification(true); - this.handleNotification(data, false, true); - } - } - }). - catch((err) => { - console.log('iOS getInitialNotifiation() failed', err); //eslint-disable-line no-console - }). - finally(() => { - resolve(); - }); - }); - } - - requestNotificationReplyPermissions = () => { - const replyCategory = this.createReplyCategory(); - this.requestPermissions([replyCategory]); - } - - createReplyCategory = () => { - const {getState} = Store.redux; - const state = getState(); - const locale = getCurrentLocale(state); - - const replyTitle = getLocalizedMessage(locale, t('mobile.push_notification_reply.title')); - const replyButton = getLocalizedMessage(locale, t('mobile.push_notification_reply.button')); - const replyPlaceholder = getLocalizedMessage(locale, t('mobile.push_notification_reply.placeholder')); - - const replyAction = new NotificationAction({ - activationMode: 'background', - title: replyTitle, - textInput: { - buttonTitle: replyButton, - placeholder: replyPlaceholder, - }, - authenticationRequired: true, - identifier: REPLY_ACTION, - }); - - return new NotificationCategory({ - identifier: CATEGORY, - actions: [replyAction], - context: 'default', - }); - } - - requestPermissions = (permissions) => { - NotificationsIOS.requestPermissions(permissions); - }; - - localNotificationSchedule(notification) { - if (notification.date) { - const deviceNotification = { - fireDate: notification.date.toISOString(), - body: notification.message, - alertAction: '', - userInfo: notification.userInfo, - }; - - NotificationsIOS.localNotification(deviceNotification); - } - } - - localNotification(notification) { - this.deviceNotification = { - body: notification.message, - alertAction: '', - userInfo: notification.userInfo, - }; - - NotificationsIOS.localNotification(this.deviceNotification); - } - - cancelAllLocalNotifications() { - NotificationsIOS.cancelAllLocalNotifications(); - } - - onNotificationReceivedBackground = (notification) => { - const userInteraction = AppState.currentState === 'active'; - - // mark the app as started as soon as possible - if (userInteraction) { - EphemeralStore.setStartFromNotification(true); - } - - const data = notification.getData(); - const info = { - ...data, - message: data.body || notification.getMessage(), - }; - - if (!userInteraction) { - this.handleNotification(info, false, userInteraction); - } - }; - - onNotificationReceivedForeground = (notification) => { - const data = notification.getData(); - const info = { - ...data, - message: data.body || notification.getMessage(), - }; - this.handleNotification(info, true, false); - }; - - onNotificationOpened = (notification, completion) => { - const data = notification.getData(); - const info = { - ...data, - message: data.body || notification.getMessage(), - }; - this.handleNotification(info, false, true); - completion(); - }; - - onRemoteNotificationsRegistered = (deviceToken) => { - if (this.onRegister) { - this.onRegister({token: deviceToken}); - } - }; - - setApplicationIconBadgeNumber(number) { - const count = number < 0 ? 0 : number; - NotificationsIOS.setBadgesCount(count); - } - - getNotification() { - return this.deviceNotification; - } - - resetNotification() { - this.deviceNotification = null; - } - - getDeliveredNotifications(callback) { - NotificationsIOS.getDeliveredNotifications(callback); - } - - clearChannelNotifications(channelId) { - NotificationsIOS.getDeliveredNotifications((notifications) => { - const ids = []; - let badgeCount = notifications.length; - - if (Store.redux) { - const totalMentions = getBadgeCount(Store.redux.getState()); - if (totalMentions > -1) { - badgeCount = totalMentions; - } - } - - for (let i = 0; i < notifications.length; i++) { - const notification = notifications[i]; - - if (notification.channel_id === channelId) { - ids.push(notification.identifier); - } - } - - if (ids.length) { - NotificationsIOS.removeDeliveredNotifications(ids); - } - - this.setApplicationIconBadgeNumber(badgeCount); - }); - } - - clearNotifications = () => { - this.setApplicationIconBadgeNumber(0); - this.cancelAllLocalNotifications(); // TODO: Only cancel the local notifications that belong to this server - } -} - -export default new PushNotification(); diff --git a/app/screens/channel/channel_base.js b/app/screens/channel/channel_base.js index 9d40d9ea9..1efb2d4b7 100644 --- a/app/screens/channel/channel_base.js +++ b/app/screens/channel/channel_base.js @@ -19,7 +19,7 @@ import {preventDoubleTap} from '@utils/tap'; import {setNavigatorStyles} from '@utils/theme'; import tracker from '@utils/time_tracker'; -import PushNotifications from 'app/push_notifications'; +import PushNotifications from '@init/push_notifications'; import telemetry from 'app/telemetry'; export let ClientUpgradeListener; diff --git a/app/screens/channel/channel_nav_bar/main_sidebar_drawer_button/main_sidebar_drawer_button.js b/app/screens/channel/channel_nav_bar/main_sidebar_drawer_button/main_sidebar_drawer_button.js index 882ae0122..12d70000d 100644 --- a/app/screens/channel/channel_nav_bar/main_sidebar_drawer_button/main_sidebar_drawer_button.js +++ b/app/screens/channel/channel_nav_bar/main_sidebar_drawer_button/main_sidebar_drawer_button.js @@ -11,7 +11,7 @@ import {intlShape} from 'react-intl'; import Badge from '@components/badge'; import CompassIcon from '@components/compass_icon'; -import PushNotifications from 'app/push_notifications'; +import PushNotifications from '@init/push_notifications'; import {preventDoubleTap} from '@utils/tap'; import {makeStyleSheetFromTheme} from '@utils/theme'; import {t} from '@utils/i18n'; diff --git a/app/screens/channel/channel_nav_bar/main_sidebar_drawer_button/main_sidebar_drawer_button.test.js b/app/screens/channel/channel_nav_bar/main_sidebar_drawer_button/main_sidebar_drawer_button.test.js index 6555ab4a7..d4d150b98 100644 --- a/app/screens/channel/channel_nav_bar/main_sidebar_drawer_button/main_sidebar_drawer_button.test.js +++ b/app/screens/channel/channel_nav_bar/main_sidebar_drawer_button/main_sidebar_drawer_button.test.js @@ -2,41 +2,14 @@ // See LICENSE.txt for license information. import React from 'react'; -import NotificationsIOS from 'react-native-notifications'; +import Badge from '@components/badge'; import Preferences from '@mm-redux/constants/preferences'; - -import Badge from 'app/components/badge'; -import PushNotification from 'app/push_notifications/push_notifications.ios'; +import PushNotification from '@init/push_notifications'; import {shallowWithIntl} from 'test/intl-test-helper'; import MainSidebarDrawerButton from './main_sidebar_drawer_button'; -jest.mock('react-native-notifications', () => { - let badgesCount = 0; - let deliveredNotifications = {}; - - return { - getBadgesCount: jest.fn((callback) => callback(badgesCount)), - setBadgesCount: jest.fn((count) => { - badgesCount = count; - }), - addEventListener: jest.fn(), - setDeliveredNotifications: jest.fn((notifications) => { - deliveredNotifications = notifications; - }), - getDeliveredNotifications: jest.fn(async (callback) => { - await callback(deliveredNotifications); - }), - removeDeliveredNotifications: jest.fn((ids) => { - deliveredNotifications = deliveredNotifications.filter((n) => !ids.includes(n.identifier)); - }), - cancelAllLocalNotifications: jest.fn(), - NotificationAction: jest.fn(), - NotificationCategory: jest.fn(), - }; -}); - describe('MainSidebarDrawerButton', () => { const baseProps = { openSidebar: jest.fn(), @@ -45,7 +18,7 @@ describe('MainSidebarDrawerButton', () => { visible: false, }; - afterEach(() => NotificationsIOS.setBadgesCount(0)); + afterEach(() => PushNotification.setApplicationIconBadgeNumber(0)); test('should match, full snapshot', () => { const wrapper = shallowWithIntl( @@ -73,7 +46,6 @@ describe('MainSidebarDrawerButton', () => { , ); expect(setApplicationIconBadgeNumber).not.toBeCalled(); - NotificationsIOS.getBadgesCount((count) => expect(count).toBe(0)); }); test('should set app icon badge on mount', () => { @@ -87,7 +59,6 @@ describe('MainSidebarDrawerButton', () => { , ); expect(setApplicationIconBadgeNumber).toHaveBeenCalledTimes(1); - NotificationsIOS.getBadgesCount((count) => expect(count).toBe(1)); }); test('should set app icon badge update', () => { @@ -100,12 +71,10 @@ describe('MainSidebarDrawerButton', () => { const wrapper = shallowWithIntl( , ); - NotificationsIOS.getBadgesCount((count) => expect(count).toBe(0)); wrapper.setProps({badgeCount: 2}); expect(setApplicationIconBadgeNumber).toHaveBeenCalledTimes(1); expect(setApplicationIconBadgeNumber).toHaveBeenCalledWith(2); - NotificationsIOS.getBadgesCount((count) => expect(count).toBe(2)); }); test('should set remove icon badge on update', () => { @@ -120,11 +89,9 @@ describe('MainSidebarDrawerButton', () => { ); wrapper.setProps({badgeCount: 2}); expect(setApplicationIconBadgeNumber).toHaveBeenCalledWith(2); - NotificationsIOS.getBadgesCount((count) => expect(count).toBe(2)); wrapper.setProps({badgeCount: -1}); expect(setApplicationIconBadgeNumber).toHaveBeenCalledWith(-1); - NotificationsIOS.getBadgesCount((count) => expect(count).toBe(0)); }); test('Should be accessible', () => { diff --git a/app/screens/gallery/__snapshots__/gallery.test.js.snap b/app/screens/gallery/__snapshots__/gallery.test.js.snap deleted file mode 100644 index 5c9d52d05..000000000 --- a/app/screens/gallery/__snapshots__/gallery.test.js.snap +++ /dev/null @@ -1,68 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Gallery should match snapshot 1`] = ` - - - - -`; diff --git a/app/screens/gallery/animation_helper.ts b/app/screens/gallery/animation_helper.ts index ef84aa3d2..2f663e3fb 100644 --- a/app/screens/gallery/animation_helper.ts +++ b/app/screens/gallery/animation_helper.ts @@ -32,7 +32,7 @@ import { pinchGestureHandler, useValue, vec, -} from 'react-native-redash'; +} from 'react-native-redash/lib/module/v1'; import {Platform} from 'react-native'; import {State} from 'react-native-gesture-handler'; diff --git a/app/screens/gallery/gallery.js b/app/screens/gallery/gallery.js index 4b35ca844..4fe10d535 100644 --- a/app/screens/gallery/gallery.js +++ b/app/screens/gallery/gallery.js @@ -67,7 +67,7 @@ export default class Gallery extends PureComponent { sharedElementTransitions.push({ fromId: `gallery-${file.id}`, toId: `image-${file.id}`, - interpolation: 'accelerateDecelerate', + interpolation: {mode: 'accelerateDecelerate'}, }); } diff --git a/app/screens/gallery/gallery.test.js b/app/screens/gallery/gallery.test.js.disabled similarity index 100% rename from app/screens/gallery/gallery.test.js rename to app/screens/gallery/gallery.test.js.disabled diff --git a/app/screens/gallery/gallery_viewer.tsx b/app/screens/gallery/gallery_viewer.tsx index 322c40723..1ecdb8285 100644 --- a/app/screens/gallery/gallery_viewer.tsx +++ b/app/screens/gallery/gallery_viewer.tsx @@ -5,7 +5,7 @@ import React, {useEffect, useMemo, useRef, useState} from 'react'; import {Platform, StyleSheet, View} from 'react-native'; import {PanGestureHandler, PinchGestureHandler, State, TapGestureHandler, TapGestureHandlerStateChangeEvent} from 'react-native-gesture-handler'; import Animated, {abs, add, and, call, clockRunning, cond, divide, eq, floor, greaterOrEq, greaterThan, multiply, neq, not, onChange, set, sub, useCode} from 'react-native-reanimated'; -import {clamp, snapPoint, timing, useClock, usePanGestureHandler, usePinchGestureHandler, useTapGestureHandler, useValue, vec} from 'react-native-redash'; +import {clamp, snapPoint, timing, useClock, usePanGestureHandler, usePinchGestureHandler, useTapGestureHandler, useValue, vec} from 'react-native-redash/lib/module/v1'; import {isImage, isVideo} from '@utils/file'; import {calculateDimensions} from '@utils/images'; import {makeStyleSheetFromTheme} from '@utils/theme'; diff --git a/app/screens/index.js b/app/screens/index.js index 05abdbf1e..f65715067 100644 --- a/app/screens/index.js +++ b/app/screens/index.js @@ -12,9 +12,9 @@ import {gestureHandlerRootHOC} from 'react-native-gesture-handler'; import RootWrapper from '@components/root'; let store; -const withGestures = (screen) => { +const withGestures = (screen, styles) => { if (Platform.OS === 'android') { - return gestureHandlerRootHOC(screen); + return gestureHandlerRootHOC(screen, styles); } return screen; @@ -204,7 +204,7 @@ Navigation.setLazyComponentRegistrator((screenName) => { } if (screen) { - Navigation.registerComponent(screenName, () => withGestures(withReduxProvider(screen)), extraStyles, () => screen); + Navigation.registerComponent(screenName, () => withGestures(withReduxProvider(screen), extraStyles), () => screen); } }); diff --git a/app/screens/notification/index.tsx b/app/screens/notification/index.tsx index 567bba22a..1084f757f 100644 --- a/app/screens/notification/index.tsx +++ b/app/screens/notification/index.tsx @@ -19,7 +19,7 @@ import NotificationTitle from './notification_title'; interface NotificationProps { componentId: string; - notification: PushNotificationData; + notification: NotificationWithData; } interface SlideAnimation extends Animatable.CustomAnimation { @@ -78,7 +78,7 @@ const Notification = ({componentId, notification}: NotificationProps) => { EventEmitter.emit(NavigationTypes.CLOSE_SETTINGS_SIDEBAR); dismiss(); - if (!notification.userInfo?.localNotification) { + if (!notification.payload?.userInfo?.local) { dispatch(loadFromPushNotification(notification)); } }; @@ -112,10 +112,7 @@ const Notification = ({componentId, notification}: NotificationProps) => { return () => EventEmitter.off(NavigationTypes.NAVIGATION_SHOW_OVERLAY, dismiss); }, []); - let message = notification.message; - if (typeof notification.message === 'object') { - message = notification.message.body; - } + const message = notification.payload?.body || notification.payload?.message; return ( { activeOpacity={1} > - + = 2.0.2, < 5.0) atomos (0.1.3) aws-eventstream (1.1.0) - aws-partitions (1.388.0) - aws-sdk-core (3.109.1) + aws-partitions (1.393.0) + aws-sdk-core (3.109.2) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) @@ -15,7 +15,7 @@ GEM aws-sdk-kms (1.39.0) aws-sdk-core (~> 3, >= 3.109.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.83.1) + aws-sdk-s3 (1.84.1) aws-sdk-core (~> 3, >= 3.109.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) @@ -34,7 +34,7 @@ GEM domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) dotenv (2.7.6) - emoji_regex (3.2.0) + emoji_regex (3.2.1) excon (0.78.0) faraday (1.1.0) multipart-post (>= 1.2, < 3) @@ -45,7 +45,7 @@ GEM faraday_middleware (1.0.0) faraday (~> 1.0) fastimage (2.2.0) - fastlane (2.165.0) + fastlane (2.167.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.3, < 3.0.0) aws-sdk-s3 (~> 1.0) @@ -123,7 +123,7 @@ GEM json (2.3.1) jwt (2.2.2) memoist (0.16.2) - mini_magick (4.10.1) + mini_magick (4.11.0) mini_mime (1.0.2) mini_portile2 (2.4.0) multi_json (1.15.0) diff --git a/ios/Mattermost/AppDelegate.h b/ios/Mattermost/AppDelegate.h index 1d6d0c66c..cfc680740 100644 --- a/ios/Mattermost/AppDelegate.h +++ b/ios/Mattermost/AppDelegate.h @@ -1,4 +1,5 @@ #import +#import "RNNotifications.h" @interface AppDelegate : UIResponder diff --git a/ios/Mattermost/AppDelegate.m b/ios/Mattermost/AppDelegate.m index 2df30fbb0..8a1014a31 100644 --- a/ios/Mattermost/AppDelegate.m +++ b/ios/Mattermost/AppDelegate.m @@ -4,7 +4,6 @@ #import #import #import -#import "RNNotifications.h" #import #import #import "Mattermost-Swift.h" diff --git a/ios/Mattermost/RNNotificationEventHandler+HandleReplyAction.m b/ios/Mattermost/RNNotificationEventHandler+HandleReplyAction.m index e73b929cf..34aeeac09 100644 --- a/ios/Mattermost/RNNotificationEventHandler+HandleReplyAction.m +++ b/ios/Mattermost/RNNotificationEventHandler+HandleReplyAction.m @@ -54,10 +54,10 @@ NSString *const ReplyActionID = @"REPLY_ACTION"; NSString *completionKey = response.notification.request.identifier; NSDictionary *parsedResponse = [RNNotificationParser parseNotificationResponse:response]; NSString *message = [parsedResponse valueForKeyPath:@"action.text"]; - NSString *channelId = [parsedResponse valueForKeyPath:@"payload.channel_id"]; - NSString *rootId = [parsedResponse valueForKeyPath:@"payload.root_id"]; + NSString *channelId = [parsedResponse valueForKeyPath:@"notification.channel_id"]; + NSString *rootId = [parsedResponse valueForKeyPath:@"notification.root_id"]; if (rootId == nil) { - rootId = [parsedResponse valueForKeyPath:@"payload.post_id"]; + rootId = [parsedResponse valueForKeyPath:@"notification.post_id"]; } NSDictionary *post = @{ @@ -114,17 +114,17 @@ NSString *const ReplyActionID = @"REPLY_ACTION"; [self setNotificationCenter:notificationCenter]; } - NSString *id = [[NSUUID UUID] UUIDString];; + NSNumber *id = [NSNumber numberWithInteger:[NSDate timeIntervalSinceReferenceDate] * 10000]; NSDictionary *notification = @{ @"body": @"Message failed to send.", @"alertAction": @"", @"userInfo": @{ - @"localNotification": @YES, - @"localTest": @YES, + @"local": @YES, + @"test": @NO, @"channel_id": channelId } }; - [notificationCenter sendLocalNotification:notification withId:id]; + [notificationCenter postLocalNotification:notification withId:id]; dispatch_async(dispatch_get_main_queue(), ^{ completionHandler(); diff --git a/ios/Podfile b/ios/Podfile index 3d9739a38..752b787c5 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,7 +1,7 @@ require_relative '../node_modules/react-native/scripts/react_native_pods' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' -platform :ios, '10.0' +platform :ios, '11.0' target 'Mattermost' do # Pods for Mattermost diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 22e3a7664..0edf55c9b 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -32,9 +32,9 @@ PODS: - libwebp/mux (1.1.0): - libwebp/demux - libwebp/webp (1.1.0) - - MMKV (1.2.2): - - MMKVCore (~> 1.2.2) - - MMKVCore (1.2.2) + - MMKV (1.2.4): + - MMKVCore (~> 1.2.4) + - MMKVCore (1.2.4) - Permission-Camera (2.2.2): - RNPermissions - Permission-PhotoLibrary (2.2.2): @@ -212,7 +212,7 @@ PODS: - React - react-native-cookies (3.2.0): - React - - react-native-document-picker (4.0.0): + - react-native-document-picker (4.1.0): - React-Core - react-native-hw-keyboard-event (0.0.4): - React @@ -220,18 +220,18 @@ PODS: - React-Core - react-native-local-auth (1.6.0): - React - - react-native-mmkv-storage (0.3.7): - - MMKV (= 1.2.2) + - react-native-mmkv-storage (0.4.1): + - MMKV (= 1.2.4) - React - react-native-netinfo (5.9.7): - React-Core - - react-native-notifications (2.1.7): - - React + - react-native-notifications (3.4.0): + - React-Core - react-native-passcode-status (1.1.2): - React - react-native-safe-area (0.5.1): - React - - react-native-safe-area-context (3.1.8): + - react-native-safe-area-context (3.1.9): - React-Core - react-native-video (5.1.0-alpha8): - React @@ -300,31 +300,35 @@ PODS: - React-Core (= 0.63.3) - React-cxxreact (= 0.63.3) - React-jsi (= 0.63.3) - - ReactNativeExceptionHandler (2.10.8): - - React + - ReactNativeExceptionHandler (2.10.9): + - React-Core - ReactNativeKeyboardTrackingView (5.7.0): - React - - ReactNativeNavigation (7.1.0): + - ReactNativeNavigation (7.3.0): + - React-Core + - React-RCTImage + - React-RCTText + - ReactNativeNavigation/Core (= 7.3.0) + - ReactNativeNavigation/Core (7.3.0): - React-Core - React-RCTImage - React-RCTText - - ReactNativeNavigation/Core (= 7.1.0) - rn-fetch-blob (0.12.0): - React-Core - RNCAsyncStorage (1.12.1): - React-Core - - RNCClipboard (1.5.0): + - RNCClipboard (1.5.1): - React-Core - RNCMaskedView (0.1.10): - React - - RNDeviceInfo (7.0.2): + - RNDeviceInfo (7.1.0): - React-Core - RNDevMenu (4.0.2): - React-Core - React-Core/DevSupport - React-RCTNetwork - - RNFastImage (8.3.2): - - React + - RNFastImage (8.3.4): + - React-Core - SDWebImage (~> 5.8) - SDWebImageWebPCoder (~> 0.6.1) - RNFileViewer (2.1.4): @@ -333,38 +337,38 @@ PODS: - React - RNKeychain (4.0.5): - React - - RNLocalize (1.4.2): + - RNLocalize (2.0.0): - React-Core - RNPermissions (2.2.2): - React-Core - RNReactNativeHapticFeedback (1.11.0): - React-Core - - RNReanimated (1.13.1): - - React + - RNReanimated (1.13.2): + - React-Core - RNRudderSdk (1.0.0): - React - Rudder - - RNScreens (2.11.0): - - React - - RNSentry (1.9.0): + - RNScreens (2.15.0): - React-Core - - Sentry (~> 5.2.0) - - RNShare (3.8.1): + - RNSentry (2.0.0): + - React-Core + - Sentry (~> 6.0.3) + - RNShare (4.1.0): - React-Core - RNSVG (12.1.0): - React - RNVectorIcons (7.1.0): - React - - Rudder (1.0.4) - - SDWebImage (5.8.4): - - SDWebImage/Core (= 5.8.4) - - SDWebImage/Core (5.8.4) + - Rudder (1.0.9) + - SDWebImage (5.9.4): + - SDWebImage/Core (= 5.9.4) + - SDWebImage/Core (5.9.4) - SDWebImageWebPCoder (0.6.1): - libwebp (~> 1.0) - SDWebImage/Core (~> 5.7) - - Sentry (5.2.1): - - Sentry/Core (= 5.2.1) - - Sentry/Core (5.2.1) + - Sentry (6.0.7): + - Sentry/Core (= 6.0.7) + - Sentry/Core (6.0.7) - Swime (3.0.6) - XCDYouTubeKit (2.8.2) - Yoga (1.14.0) @@ -606,8 +610,8 @@ SPEC CHECKSUMS: glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3 jail-monkey: 80c9e34da2cd54023e5ad08bf7051ec75bd43d5b libwebp: 946cb3063cea9236285f7e9a8505d806d30e07f3 - MMKV: b14909757d8b70e2aa89ff1c6d56a7b239e10a29 - MMKVCore: 6225324fe5006026bc86ef8641d567e00c6582f3 + MMKV: f15696ad598023bf6cbb17eadee13efc185c5028 + MMKVCore: 9a9c10e4faf3b3068367fb2efe5419722f3d2e8a Permission-Camera: 375576c57ea625c88137d2cc52ba6dfeb21db036 Permission-PhotoLibrary: bb20a7ac8aec0f7459558e5fbe2bd0a6f2744be3 RCTRequired: 48884c74035a0b5b76dbb7a998bd93bcfc5f2047 @@ -623,16 +627,16 @@ SPEC CHECKSUMS: React-jsinspector: 8e68ffbfe23880d3ee9bafa8be2777f60b25cbe2 react-native-cameraroll: 9d2b7c1707204d2040d2812f960c6cebdbd9f670 react-native-cookies: 854d59c4135c70b92a02ca4930e68e4e2eb58150 - react-native-document-picker: b3e78a8f7fef98b5cb069f20fc35797d55e68e28 + react-native-document-picker: 37b870da56cf33b8432212842e3f374b9fe98889 react-native-hw-keyboard-event: b517cefb8d5c659a38049c582de85ff43337dc53 react-native-image-picker: 32d1ad2c0024ca36161ae0d5c2117e2d6c441f11 react-native-local-auth: 359af242caa1e5c501ac9dfe33b1e238ad8f08c6 - react-native-mmkv-storage: a452e035494ecb7f641ec192b2dccdb50021a826 + react-native-mmkv-storage: ceaec36b6967c680e60f3be5e91ba3f66d488697 react-native-netinfo: e36c1bb6df27ab84aa933679b3f5bbf9d180b18f - react-native-notifications: 24706907104a0f00c35c4bde7e0ca76a50f730e1 + react-native-notifications: 1e4912c8f11741799c823f263beaf9f7f829955b react-native-passcode-status: 88c4f6e074328bc278bd127646b6c694ad5a530a react-native-safe-area: e8230b0017d76c00de6b01e2412dcf86b127c6a3 - react-native-safe-area-context: 01158a92c300895d79dee447e980672dc3fb85a6 + react-native-safe-area-context: 86612d2c9a9e94e288319262d10b5f93f0b395f5 react-native-video: 8d97379f3c2322a569f1e27542ad1a646cad9444 react-native-webview: 0d1c2b4e7ffb0543a74fa0512f2f8dc5fb0e49e2 React-RCTActionSheet: 53ea72699698b0b47a6421cb1c8b4ab215a774aa @@ -645,38 +649,38 @@ SPEC CHECKSUMS: React-RCTText: 65a6de06a7389098ce24340d1d3556015c38f746 React-RCTVibration: 8e9fb25724a0805107fc1acc9075e26f814df454 ReactCommon: 4167844018c9ed375cc01a843e9ee564399e53c3 - ReactNativeExceptionHandler: 8025d98049c25f186835a3af732dd7c9974d6dce + ReactNativeExceptionHandler: f1638ffd507ef1b1794af25884fa0eb30dd5c551 ReactNativeKeyboardTrackingView: 02137fac3b2ebd330d74fa54ead48b14750a2306 - ReactNativeNavigation: 65025dab27b404053678593b2450ed7a022e3173 + ReactNativeNavigation: c2dcda2b86e32090c443182206c915107d03106f rn-fetch-blob: 17961aec08caae68bb8fc0e5b40f93b3acfa6932 RNCAsyncStorage: cb9a623793918c6699586281f0b51cbc38f046f9 - RNCClipboard: 8f9f12fabf3c06e976f19f87a62c89e28dfedfca + RNCClipboard: 5e299c6df8e0c98f3d7416b86ae563d3a9f768a3 RNCMaskedView: f5c7d14d6847b7b44853f7acb6284c1da30a3459 - RNDeviceInfo: a37a15a98822c31c3982cb28eba6d336ba4d0968 + RNDeviceInfo: 2c198acf2cef2dc8e5bf2b502fdde0e7e5ef3520 RNDevMenu: 9f80d65b80ba1fa84e5361d017b8c854a2f05005 - RNFastImage: e19ba191922e7dab9d932a4d59d62d76660aa222 + RNFastImage: d4870d58f5936111c56218dbd7fcfc18e65b58ff RNFileViewer: 83cc066ad795b1f986791d03b56fe0ee14b6a69f RNGestureHandler: 7a5833d0f788dbd107fbb913e09aa0c1ff333c39 RNKeychain: 840f8e6f13be0576202aefcdffd26a4f54bfe7b5 - RNLocalize: 4071198b59b461f3b74eebc5fee8c50f13e39e79 + RNLocalize: dc432c370fe76ad48cb380386232ca68d534a52a RNPermissions: 067727df624665d4a6c8e2cffcc172ba608b96ed RNReactNativeHapticFeedback: 653a8c126a0f5e88ce15ffe280b3ff37e1fbb285 - RNReanimated: dd8c286ab5dd4ba36d3a7fef8bff7e08711b5476 + RNReanimated: e03f7425cb7a38dcf1b644d680d1bfc91c3337ad RNRudderSdk: 5d99b1a5a582ab55d6213b38018d35e98818af63 - RNScreens: 0e91da98ab26d5d04c7b59a9b6bd694124caf88c - RNSentry: 1adaa43b01c6a3ab5091d4d1add66b7c58558898 - RNShare: 26eb3a3a3a83f059318cafb0b09547e099969058 + RNScreens: 2ad555d4d9fa10b91bb765ca07fe9b29d59573f0 + RNSentry: cb4ef23400fb6690f6ac8f6acef0c023a8a4f37d + RNShare: 106a76243ac90f43ddb9028dcb78ade406b8adff RNSVG: ce9d996113475209013317e48b05c21ee988d42e RNVectorIcons: bc69e6a278b14842063605de32bec61f0b251a59 - Rudder: 57a48709b714c4746a96f4d4d00f33e78a62a5ee - SDWebImage: cf6922231e95550934da2ada0f20f2becf2ceba9 + Rudder: 90ed801a09c73017184e6fc901370be1754eb182 + SDWebImage: b69257f4ab14e9b6a2ef53e910fdf914d8f757c1 SDWebImageWebPCoder: d0dac55073088d24b2ac1b191a71a8f8d0adac21 - Sentry: 7d075cae43a9a518fdd51e258b6212f0527c51cd + Sentry: e2c691627ae1dc0029acebbd1b0b4af4df12af73 Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b XCDYouTubeKit: 79baadb0560673a67c771eba45f83e353fd12c1f Yoga: 7d13633d129fd179e01b8953d38d47be90db185a YoutubePlayer-in-WKWebView: af2f5929fc78882d94bfdfeea999b661b78d9717 -PODFILE CHECKSUM: 1aabd16b6a9ed2037b4d7443027d222817790468 +PODFILE CHECKSUM: 876d4bb13b09f8d0961bb18b2338fc5936aa5e63 COCOAPODS: 1.10.0.rc.1 diff --git a/package-lock.json b/package-lock.json index 747bf3da6..d3248c164 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3438,9 +3438,9 @@ } }, "@babel/runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", - "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -3646,9 +3646,9 @@ "dev": true }, "@eslint/eslintrc": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", - "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", + "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -3691,9 +3691,9 @@ "dev": true }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -3832,34 +3832,34 @@ } }, "@jest/core": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.1.tgz", - "integrity": "sha512-p4F0pgK3rKnoS9olXXXOkbus1Bsu6fd8pcvLMPsUy4CVXZ8WSeiwQ1lK5hwkCIqJ+amZOYPd778sbPha/S8Srw==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", "dev": true, "requires": { - "@jest/console": "^26.6.1", - "@jest/reporters": "^26.6.1", - "@jest/test-result": "^26.6.1", - "@jest/transform": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.1", - "jest-config": "^26.6.1", - "jest-haste-map": "^26.6.1", - "jest-message-util": "^26.6.1", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.1", - "jest-resolve-dependencies": "^26.6.1", - "jest-runner": "^26.6.1", - "jest-runtime": "^26.6.1", - "jest-snapshot": "^26.6.1", - "jest-util": "^26.6.1", - "jest-validate": "^26.6.1", - "jest-watcher": "^26.6.1", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", "micromatch": "^4.0.2", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -3868,35 +3868,35 @@ }, "dependencies": { "@jest/console": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.1.tgz", - "integrity": "sha512-cjqcXepwC5M+VeIhwT6Xpi/tT4AiNzlIx8SMJ9IihduHnsSrnWNvTBfKIpmqOOCNOPqtbBx6w2JqfoLOJguo8g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^26.6.1", - "jest-util": "^26.6.1", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", "slash": "^3.0.0" } }, "@jest/test-result": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.1.tgz", - "integrity": "sha512-wqAgIerIN2gSdT2A8WeA5+AFh9XQBqYGf8etK143yng3qYd0mF0ie2W5PVmgnjw4VDU6ammI9NdXrKgNhreawg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, "requires": { - "@jest/console": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -3965,9 +3965,9 @@ } }, "camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", - "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, "chalk": { @@ -4011,9 +4011,9 @@ } }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", "dev": true, "optional": true }, @@ -4036,12 +4036,12 @@ "dev": true }, "jest-haste-map": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.1.tgz", - "integrity": "sha512-9kPafkv0nX6ta1PrshnkiyhhoQoFWncrU/uUBt3/AP1r78WSCU5iLceYRTwDvJl67H3RrXqSlSVDDa/AsUB7OQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -4049,34 +4049,35 @@ "fsevents": "^2.1.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.5.0", - "jest-util": "^26.6.1", - "jest-worker": "^26.6.1", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", "micromatch": "^4.0.2", "sane": "^4.0.3", "walker": "^1.0.7" } }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } }, "jest-serializer": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.5.0.tgz", - "integrity": "sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, "requires": { "@types/node": "*", @@ -4084,12 +4085,12 @@ } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -4098,23 +4099,23 @@ } }, "jest-validate": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.1.tgz", - "integrity": "sha512-BEFpGbylKocnNPZULcnk+TGaz1oFZQH/wcaXlaXABbu0zBwkOGczuWgdLucUouuQqn7VadHZZeTvo8VSFDLMOA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "camelcase": "^6.0.0", "chalk": "^4.0.0", "jest-get-type": "^26.3.0", "leven": "^3.1.0", - "pretty-format": "^26.6.1" + "pretty-format": "^26.6.2" } }, "jest-worker": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.1.tgz", - "integrity": "sha512-R5IE3qSGz+QynJx8y+ICEkdI2OJ3RJjRQVEyCcFAd3yVhQSEtquziPO29Mlzgn07LOVE8u8jhJ1FqcwegiXWOw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { "@types/node": "*", @@ -4145,12 +4146,12 @@ "dev": true }, "pretty-format": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.1.tgz", - "integrity": "sha512-MeqqsP5PYcRBbGMvwzsyBdmAJ4EFX7pWFyl7x4+dMVg5pE0ZDdBIvEH2ergvIO+Gvwv1wh64YuOY9y5LuyY/GA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^17.0.1" @@ -4222,35 +4223,35 @@ } }, "@jest/environment": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.1.tgz", - "integrity": "sha512-GNvHwkOFJtNgSwdzH9flUPzF9AYAZhUg124CBoQcwcZCM9s5TLz8Y3fMtiaWt4ffbigoetjGk5PU2Dd8nLrSEw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", "dev": true, "requires": { - "@jest/fake-timers": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", "@types/node": "*", - "jest-mock": "^26.6.1" + "jest-mock": "^26.6.2" }, "dependencies": { "@jest/fake-timers": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.1.tgz", - "integrity": "sha512-T/SkMLgOquenw/nIisBRD6XAYpFir0kNuclYLkse5BpzeDUukyBr+K31xgAo9M0hgjU9ORlekAYPSzc0DKfmKg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@sinonjs/fake-timers": "^6.0.1", "@types/node": "*", - "jest-message-util": "^26.6.1", - "jest-mock": "^26.6.1", - "jest-util": "^26.6.1" + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" } }, "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -4275,6 +4276,12 @@ "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -4346,38 +4353,39 @@ "dev": true }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } }, "jest-mock": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.1.tgz", - "integrity": "sha512-my0lPTBu1awY8iVG62sB2sx9qf8zxNDVX+5aFgoB8Vbqjb6LqIOsfyFA8P1z6H2IsqMbvOX9oCJnK67Y3yUIMA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*" } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -4395,6 +4403,24 @@ "picomatch": "^2.0.5" } }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -4461,20 +4487,20 @@ } }, "@jest/globals": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.1.tgz", - "integrity": "sha512-acxXsSguuLV/CeMYmBseefw6apO7NuXqpE+v5r3yD9ye2PY7h1nS20vY7Obk2w6S7eJO4OIAJeDnoGcLC/McEQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", "dev": true, "requires": { - "@jest/environment": "^26.6.1", - "@jest/types": "^26.6.1", - "expect": "^26.6.1" + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" }, "dependencies": { "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -4545,16 +4571,16 @@ } }, "@jest/reporters": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.1.tgz", - "integrity": "sha512-J6OlXVFY3q1SXWJhjme5i7qT/BAZSikdOK2t8Ht5OS32BDo6KfG5CzIzzIFnAVd82/WWbc9Hb7SJ/jwSvVH9YA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.1", - "@jest/test-result": "^26.6.1", - "@jest/transform": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -4565,48 +4591,48 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.1", - "jest-resolve": "^26.6.1", - "jest-util": "^26.6.1", - "jest-worker": "^26.6.1", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", "node-notifier": "^8.0.0", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^6.0.1" + "v8-to-istanbul": "^7.0.0" }, "dependencies": { "@jest/console": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.1.tgz", - "integrity": "sha512-cjqcXepwC5M+VeIhwT6Xpi/tT4AiNzlIx8SMJ9IihduHnsSrnWNvTBfKIpmqOOCNOPqtbBx6w2JqfoLOJguo8g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^26.6.1", - "jest-util": "^26.6.1", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", "slash": "^3.0.0" } }, "@jest/test-result": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.1.tgz", - "integrity": "sha512-wqAgIerIN2gSdT2A8WeA5+AFh9XQBqYGf8etK143yng3qYd0mF0ie2W5PVmgnjw4VDU6ammI9NdXrKgNhreawg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, "requires": { - "@jest/console": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -4631,6 +4657,12 @@ "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -4700,9 +4732,9 @@ } }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", "dev": true, "optional": true }, @@ -4719,12 +4751,12 @@ "dev": true }, "jest-haste-map": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.1.tgz", - "integrity": "sha512-9kPafkv0nX6ta1PrshnkiyhhoQoFWncrU/uUBt3/AP1r78WSCU5iLceYRTwDvJl67H3RrXqSlSVDDa/AsUB7OQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -4732,34 +4764,35 @@ "fsevents": "^2.1.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.5.0", - "jest-util": "^26.6.1", - "jest-worker": "^26.6.1", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", "micromatch": "^4.0.2", "sane": "^4.0.3", "walker": "^1.0.7" } }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } }, "jest-serializer": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.5.0.tgz", - "integrity": "sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, "requires": { "@types/node": "*", @@ -4767,12 +4800,12 @@ } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -4781,9 +4814,9 @@ } }, "jest-worker": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.1.tgz", - "integrity": "sha512-R5IE3qSGz+QynJx8y+ICEkdI2OJ3RJjRQVEyCcFAd3yVhQSEtquziPO29Mlzgn07LOVE8u8jhJ1FqcwegiXWOw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { "@types/node": "*", @@ -4813,6 +4846,24 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -4907,48 +4958,48 @@ } }, "@jest/test-sequencer": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.1.tgz", - "integrity": "sha512-0csqA/XApZiNeTIPYh6koIDCACSoR6hi29T61tKJMtCZdEC+tF3PoNt7MS0oK/zKC6daBgCbqXxia5ztr/NyCQ==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", "dev": true, "requires": { - "@jest/test-result": "^26.6.1", + "@jest/test-result": "^26.6.2", "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.1", - "jest-runner": "^26.6.1", - "jest-runtime": "^26.6.1" + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" }, "dependencies": { "@jest/console": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.1.tgz", - "integrity": "sha512-cjqcXepwC5M+VeIhwT6Xpi/tT4AiNzlIx8SMJ9IihduHnsSrnWNvTBfKIpmqOOCNOPqtbBx6w2JqfoLOJguo8g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^26.6.1", - "jest-util": "^26.6.1", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", "slash": "^3.0.0" } }, "@jest/test-result": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.1.tgz", - "integrity": "sha512-wqAgIerIN2gSdT2A8WeA5+AFh9XQBqYGf8etK143yng3qYd0mF0ie2W5PVmgnjw4VDU6ammI9NdXrKgNhreawg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, "requires": { - "@jest/console": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -4973,6 +5024,12 @@ "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5042,9 +5099,9 @@ } }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", "dev": true, "optional": true }, @@ -5061,12 +5118,12 @@ "dev": true }, "jest-haste-map": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.1.tgz", - "integrity": "sha512-9kPafkv0nX6ta1PrshnkiyhhoQoFWncrU/uUBt3/AP1r78WSCU5iLceYRTwDvJl67H3RrXqSlSVDDa/AsUB7OQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -5074,34 +5131,35 @@ "fsevents": "^2.1.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.5.0", - "jest-util": "^26.6.1", - "jest-worker": "^26.6.1", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", "micromatch": "^4.0.2", "sane": "^4.0.3", "walker": "^1.0.7" } }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } }, "jest-serializer": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.5.0.tgz", - "integrity": "sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, "requires": { "@types/node": "*", @@ -5109,12 +5167,12 @@ } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -5123,9 +5181,9 @@ } }, "jest-worker": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.1.tgz", - "integrity": "sha512-R5IE3qSGz+QynJx8y+ICEkdI2OJ3RJjRQVEyCcFAd3yVhQSEtquziPO29Mlzgn07LOVE8u8jhJ1FqcwegiXWOw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { "@types/node": "*", @@ -5155,6 +5213,24 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -5191,21 +5267,21 @@ } }, "@jest/transform": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.1.tgz", - "integrity": "sha512-oNFAqVtqRxZRx6vXL3I4bPKUK0BIlEeaalkwxyQGGI8oXDQBtYQBpiMe5F7qPs4QdvvFYB42gPGIMMcxXaBBxQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.1", + "jest-haste-map": "^26.6.2", "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.1", + "jest-util": "^26.6.2", "micromatch": "^4.0.2", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -5214,9 +5290,9 @@ }, "dependencies": { "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -5298,9 +5374,9 @@ } }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", "dev": true, "optional": true }, @@ -5317,12 +5393,12 @@ "dev": true }, "jest-haste-map": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.1.tgz", - "integrity": "sha512-9kPafkv0nX6ta1PrshnkiyhhoQoFWncrU/uUBt3/AP1r78WSCU5iLceYRTwDvJl67H3RrXqSlSVDDa/AsUB7OQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -5330,18 +5406,18 @@ "fsevents": "^2.1.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.5.0", - "jest-util": "^26.6.1", - "jest-worker": "^26.6.1", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", "micromatch": "^4.0.2", "sane": "^4.0.3", "walker": "^1.0.7" } }, "jest-serializer": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.5.0.tgz", - "integrity": "sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, "requires": { "@types/node": "*", @@ -5349,12 +5425,12 @@ } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -5363,9 +5439,9 @@ } }, "jest-worker": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.1.tgz", - "integrity": "sha512-R5IE3qSGz+QynJx8y+ICEkdI2OJ3RJjRQVEyCcFAd3yVhQSEtquziPO29Mlzgn07LOVE8u8jhJ1FqcwegiXWOw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { "@types/node": "*", @@ -5918,9 +5994,9 @@ "integrity": "sha512-ael2f1onoPF3vF7YqHGWy7NnafzGu+yp88BbFbP0ydoCP2xGSUzmZVw0zakPTC040Id+JQ9WeFczujMkDy6jYQ==" }, "@react-native-community/clipboard": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@react-native-community/clipboard/-/clipboard-1.5.0.tgz", - "integrity": "sha512-XoujTQuXhPgQLVLn7HPt7615jBEGzJm1Nhos0COdreBIz3qWIi5noYZth8jBFctf8FG5tpe24XTZNDz5udgqQQ==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@react-native-community/clipboard/-/clipboard-1.5.1.tgz", + "integrity": "sha512-AHAmrkLEH5UtPaDiRqoULERHh3oNv7Dgs0bTC0hO5Z2GdNokAMPT5w8ci8aMcRemcwbtdHjxChgtjbeA38GBdA==" }, "@react-native-community/eslint-config": { "version": "2.0.0", @@ -5995,42 +6071,62 @@ "integrity": "sha512-NAkkT68oF+M9o6El2xeUqZK7magPjG/tAcEbvCbqyhlh3yElKWnI1e1vpbVvFXzTefy67FwYFWOJqBN6U7Mnkg==" }, "@react-navigation/core": { - "version": "5.12.5", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.12.5.tgz", - "integrity": "sha512-+QdQDtC75K1sBfACwCUNFlrCOYf36GYGr9YURHugm3LDEHUwAj7HPJA8FFLw1Rmp5N/P5q9Uct2B/XxJhYzKqA==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.14.3.tgz", + "integrity": "sha512-l4zCfIfPC4DYuDcluiisaWKg7GO5yAjBrIL0pzEw8bIBj+R6vnZnyG9AWgnwo5fl241DX+1sfgzGEUQgpIJNew==", "requires": { - "@react-navigation/routers": "^5.4.12", + "@react-navigation/routers": "^5.6.2", "escape-string-regexp": "^4.0.0", - "nanoid": "^3.1.12", - "query-string": "^6.13.5", - "react-is": "^16.13.0", - "use-subscription": "^1.4.0" + "nanoid": "^3.1.15", + "query-string": "^6.13.6", + "react-is": "^16.13.0" } }, "@react-navigation/native": { - "version": "5.7.6", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.7.6.tgz", - "integrity": "sha512-u+o9Ifs4//Ah6UczXiaAV+hiWPL0NyTbErj5WayeQUd6K5IIbA1UwumRVWs2Xp8q/4Q9h6FpPHUcKOyiTxhaqA==", + "version": "5.8.9", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.8.9.tgz", + "integrity": "sha512-d1oihLxp9UDVsZyvHNcwJfj+LKsEo0m8vEBBV6jhLJAXs1d2DEBzBXGeP907uG+877TK7luh2h79Or4w7/+p+g==", "requires": { - "@react-navigation/core": "^5.12.5", - "nanoid": "^3.1.12" + "@react-navigation/core": "^5.14.3", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.15" } }, "@react-navigation/routers": { - "version": "5.4.12", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.4.12.tgz", - "integrity": "sha512-IwMmxeb5e6LboljhakmhtrHBXLYFrFDr2c1GjAG538e4MjT4QGi/ZYckAxCh/NqKI0knnzqKppPl2NsOMv/NoQ==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.6.2.tgz", + "integrity": "sha512-XBcDKXS5s4MaHFufN44LtbXqFDH/nUHfHjbwG85fP3k772oRyPRgbnUb2mbw5MFGqORla9T7uymR6Gh6uwIwVw==", "requires": { - "nanoid": "^3.1.12" + "nanoid": "^3.1.15" } }, "@react-navigation/stack": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.9.3.tgz", - "integrity": "sha512-/CJ5Rsrc9bMI20dD8oC/QSZHARMFuUv8DeoiYE7R2N0M44cFupF1CrzaZBBC/S4Zi1ahZ0A+Hj/gAzAEQrNTvA==", + "version": "5.12.6", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.12.6.tgz", + "integrity": "sha512-pf9AigAIVtCQuCpZAZqBux4kNqQwj98ngvd6JEryFrqTQ1CYsUH6jfpQE7SKyHggVRFSQVMf24aCgwtRixBvjw==", "requires": { - "color": "^3.1.2", - "react-native-iphone-x-helper": "^1.2.1" + "color": "^3.1.3", + "react-native-iphone-x-helper": "^1.3.0" + }, + "dependencies": { + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "color-string": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + } } }, "@rudderstack/rudder-sdk-react-native": { @@ -6053,20 +6149,20 @@ } }, "@sentry/browser": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.27.0.tgz", - "integrity": "sha512-AByUVSy5YctTxWGA6HaeTkZXDCmHbeurqLkR6U9h4HzEHZq3laxrYQ1HiWcaW1IgFDqZcEmD14kDOVY4GhF3QQ==", + "version": "5.27.3", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.27.3.tgz", + "integrity": "sha512-vczS+XTW4Nk2A7TIpAw8IVFHpp+NK6mV9euBG2I61Bs2QbQY9yKLfbjiln/yH2Q8X4THX6MKa0GuiPoCEeq3uw==", "requires": { - "@sentry/core": "5.27.0", - "@sentry/types": "5.27.0", - "@sentry/utils": "5.27.0", + "@sentry/core": "5.27.3", + "@sentry/types": "5.27.3", + "@sentry/utils": "5.27.3", "tslib": "^1.9.3" } }, "@sentry/cli": { - "version": "1.58.0", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.58.0.tgz", - "integrity": "sha512-bUBKBYyKVzjNhQpAfPJ3XAvAyNNvrD2Rtpo6B0MR3Okw3prdLFgv9Ta8TN19IXT7u9w13B2EdMnNA6dQDtrD4g==", + "version": "1.59.0", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.59.0.tgz", + "integrity": "sha512-9nK4uVHW7HIbOwFZNvHRWFJcD+bqjW3kMWK2UUMqQWse0Lf3xM+2o+REGGkk0S69+E4elSiukVjUPTI5aijNlA==", "requires": { "https-proxy-agent": "^5.0.0", "mkdirp": "^0.5.5", @@ -6076,57 +6172,57 @@ } }, "@sentry/core": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.27.0.tgz", - "integrity": "sha512-ddvAxVszsHzFzGedii1NxfKU3GxAEGJV5eXNlA2hqS0/OKl+IOjuI6aJjg55LMTEEejqr9djXqDMk6y5av6UKg==", + "version": "5.27.3", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.27.3.tgz", + "integrity": "sha512-yqepQO88jSt5hy0awpk61AxI4oHB09LjVbUEk4nJDg+1YXuND23cuZvH+Sp2jCZX2vrsw2tefwflToYfA8/U2w==", "requires": { - "@sentry/hub": "5.27.0", - "@sentry/minimal": "5.27.0", - "@sentry/types": "5.27.0", - "@sentry/utils": "5.27.0", + "@sentry/hub": "5.27.3", + "@sentry/minimal": "5.27.3", + "@sentry/types": "5.27.3", + "@sentry/utils": "5.27.3", "tslib": "^1.9.3" } }, "@sentry/hub": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.27.0.tgz", - "integrity": "sha512-Qe4nndgDEY8n3kKEWJTw5M201dgsoB9ZQ10483cVpGCtOfZZuzXEr4EaLG3BefH8YFvlgUP3YlxD7XFoJioRjg==", + "version": "5.27.3", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.27.3.tgz", + "integrity": "sha512-icEH3hr6NVQkpowXZcPOs9IgJZP5lMKtvud4mVioSpkd+NxtRdKrGEX4eF2TCviOJc9Md0mV4K+aL5Au7hxggQ==", "requires": { - "@sentry/types": "5.27.0", - "@sentry/utils": "5.27.0", + "@sentry/types": "5.27.3", + "@sentry/utils": "5.27.3", "tslib": "^1.9.3" } }, "@sentry/integrations": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-5.27.0.tgz", - "integrity": "sha512-iIphS8b/wz4RXzYd09eGnf5FuJzqAYo55NDPBpH2bN0hnIgshVFvRJe1rbo2sA+r8u+ODLvc3b6jvXB4gBupzA==", + "version": "5.27.3", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-5.27.3.tgz", + "integrity": "sha512-lmkYH3g1ZW9I8g3SXQNYIfNc9gaNoqJUxgTI9d0AQph+mSB8Y3lx50NYMAfK74XgiC3VJ9j8kWstdQCMbgfXpQ==", "requires": { - "@sentry/types": "5.27.0", - "@sentry/utils": "5.27.0", + "@sentry/types": "5.27.3", + "@sentry/utils": "5.27.3", "localforage": "1.8.1", "tslib": "^1.9.3" } }, "@sentry/minimal": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.27.0.tgz", - "integrity": "sha512-KidWjo2jNd8IwPhEIDC0YddjwuIdVxTEsmpRkZ6afuiR5rMQsiqA0EwsndWiAjs67qxQRj/VD/1Xghxe0nHzXQ==", + "version": "5.27.3", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.27.3.tgz", + "integrity": "sha512-ng01cM0rsE1RMjqVTpPLN0ZVkTo0I675usM1krkpQe8ddW6tfQ6EJWpt02/BrpQZRQzTtfWp6/RyB1KFXg6icg==", "requires": { - "@sentry/hub": "5.27.0", - "@sentry/types": "5.27.0", + "@sentry/hub": "5.27.3", + "@sentry/types": "5.27.3", "tslib": "^1.9.3" } }, "@sentry/react": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-5.27.0.tgz", - "integrity": "sha512-7dYKhQ6tgDgAed1neXjID9mEviX9IzL/OkG+hU8zffUqcUtMziVHtvozf3ePz75ReRR/Bumc6fGnSMlnEcwbKg==", + "version": "5.27.3", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-5.27.3.tgz", + "integrity": "sha512-p7E+djSUVKz02HoRVDX+zamjV8+RL4bqoPnS9JQESweB0sRTYlpvi+CqWLYWNWnamWQWOl97hOw/lLDpo4kUSA==", "requires": { - "@sentry/browser": "5.27.0", - "@sentry/minimal": "5.27.0", - "@sentry/types": "5.27.0", - "@sentry/utils": "5.27.0", + "@sentry/browser": "5.27.3", + "@sentry/minimal": "5.27.3", + "@sentry/types": "5.27.3", + "@sentry/utils": "5.27.3", "hoist-non-react-statics": "^3.3.2", "tslib": "^1.9.3" }, @@ -6142,31 +6238,31 @@ } }, "@sentry/react-native": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@sentry/react-native/-/react-native-1.9.0.tgz", - "integrity": "sha512-R17UcmuWWK3M1uWI0kMf3n08lq1a8aUAa5NYvjNLwi568gb6HUBye+lMQVCtH3DUHOUENwCrFqloXFaCKlsaWA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sentry/react-native/-/react-native-2.0.0.tgz", + "integrity": "sha512-Hw7OukaBljJRY72tGtshQGaxqg+P2WbftqC+JD1xXO7Qecrms1fg0wdY9/Q6gNIYFDCtSX0narx2R7pCQ5RK/A==", "requires": { - "@sentry/browser": "^5.25.0", - "@sentry/core": "^5.25.0", - "@sentry/hub": "^5.25.0", - "@sentry/integrations": "^5.25.0", - "@sentry/react": "^5.25.0", - "@sentry/types": "^5.25.0", - "@sentry/utils": "^5.25.0", + "@sentry/browser": "^5.27.1", + "@sentry/core": "^5.27.1", + "@sentry/hub": "^5.27.1", + "@sentry/integrations": "^5.27.1", + "@sentry/react": "^5.27.1", + "@sentry/types": "^5.27.1", + "@sentry/utils": "^5.27.1", "@sentry/wizard": "^1.1.4" } }, "@sentry/types": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.27.0.tgz", - "integrity": "sha512-coB2bMDxmzTwIWcXbzbnE2JtEqDkvmK9+KyZZNI/Mk3wwabFYqL7hOnqXB45/+hx+6l9/siWmB1l5um3tzqdOw==" + "version": "5.27.3", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.27.3.tgz", + "integrity": "sha512-PkWhMArFMxBb1g3HtMEL8Ea9PYae2MU0z9CMIWiqzerFy2ZpKG98IU3pt8ic4JkmKQdwB8hDiZpRPMHhW0WYwQ==" }, "@sentry/utils": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.27.0.tgz", - "integrity": "sha512-XrdoxOsjqF9AVmeCefNgY0r3lvZBj34bzsG3TI8Z1bjQKB3iF/2yAI/bdo+sUqAiJiiPSk5p6SiPkyeTsSdBhg==", + "version": "5.27.3", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.27.3.tgz", + "integrity": "sha512-R9WvFrRBALZvCzu/9BsuXBCfkNxz4MwdBNSXaBsJo4afQw1ljkjIc9DpHzlL9S9goIwXo81Buwmr5gGDO6aH+Q==", "requires": { - "@sentry/types": "5.27.0", + "@sentry/types": "5.27.3", "tslib": "^1.9.3" } }, @@ -6206,18 +6302,18 @@ } }, "@storybook/addon-knobs": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-6.0.26.tgz", - "integrity": "sha512-a25hOepctnsqX1nym80HLKrn8fvXFqsbcL3ZkAZWAIXZhf+zPYTJFrw25FxvbyhktmjQv6l89jteAfGfC0g8DA==", + "version": "6.0.28", + "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-6.0.28.tgz", + "integrity": "sha512-5vmr/kiOSO6Uvpx9DHQqAPDWbc6SXbLid7XYBMKBBZVHiu76iPgsLjx4KV3GFLSHaJZ4DPhwEN0hlIyf5Qlvvw==", "dev": true, "requires": { - "@storybook/addons": "6.0.26", - "@storybook/api": "6.0.26", - "@storybook/channels": "6.0.26", - "@storybook/client-api": "6.0.26", - "@storybook/components": "6.0.26", - "@storybook/core-events": "6.0.26", - "@storybook/theming": "6.0.26", + "@storybook/addons": "6.0.28", + "@storybook/api": "6.0.28", + "@storybook/channels": "6.0.28", + "@storybook/client-api": "6.0.28", + "@storybook/components": "6.0.28", + "@storybook/core-events": "6.0.28", + "@storybook/theming": "6.0.28", "copy-to-clipboard": "^3.0.8", "core-js": "^3.0.1", "escape-html": "^1.0.3", @@ -6433,36 +6529,36 @@ } }, "@storybook/addons": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.0.26.tgz", - "integrity": "sha512-OhAApFKgsj9an7FLYfHI4cJQuZ4Zm6yoGOpaxhOvKQMw7dXUPsLvbCyw/6dZOLvaFhjJjQiXtbxtZG+UjR8nvA==", + "version": "6.0.28", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.0.28.tgz", + "integrity": "sha512-3Brf9w/u2sw0huarcO1iLFBmGt7KtApRxX4bFcsRiPPFxliDrmb1sAsd37UbKp8qBSw1U6FByjuTJQ7xn/TDhg==", "dev": true, "requires": { - "@storybook/api": "6.0.26", - "@storybook/channels": "6.0.26", - "@storybook/client-logger": "6.0.26", - "@storybook/core-events": "6.0.26", - "@storybook/router": "6.0.26", - "@storybook/theming": "6.0.26", + "@storybook/api": "6.0.28", + "@storybook/channels": "6.0.28", + "@storybook/client-logger": "6.0.28", + "@storybook/core-events": "6.0.28", + "@storybook/router": "6.0.28", + "@storybook/theming": "6.0.28", "core-js": "^3.0.1", "global": "^4.3.2", "regenerator-runtime": "^0.13.3" } }, "@storybook/api": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.0.26.tgz", - "integrity": "sha512-aszDoz1c6T+eRtTUwWvySoyd3gRXmQxsingD084NnEp4VfFLA5H7VS/0sre0ZvU5GWh8d9COxY0DS2Ry/QSKvw==", + "version": "6.0.28", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.0.28.tgz", + "integrity": "sha512-6dWjz5HSM3v8c+J0Z/lGYGujs4ZKSt1lJUWaH/MPvuoeDiVm+1jKLwWTAMlMnOP9o8xgNTuQtEbQkNG2D66oQA==", "dev": true, "requires": { "@reach/router": "^1.3.3", - "@storybook/channels": "6.0.26", - "@storybook/client-logger": "6.0.26", - "@storybook/core-events": "6.0.26", + "@storybook/channels": "6.0.28", + "@storybook/client-logger": "6.0.28", + "@storybook/core-events": "6.0.28", "@storybook/csf": "0.0.1", - "@storybook/router": "6.0.26", + "@storybook/router": "6.0.28", "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.0.26", + "@storybook/theming": "6.0.28", "@types/reach__router": "^1.3.5", "core-js": "^3.0.1", "fast-deep-equal": "^3.1.1", @@ -6524,14 +6620,14 @@ } }, "@storybook/channel-postmessage": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.0.26.tgz", - "integrity": "sha512-FT6lC8M5JlNBxPT0rYfmF1yl9mBv04nfYs82TZpp1CzpLxf7wxdCBZ8SSRmvWIVBoNwGZPDhIk5+6JWyDEISBg==", + "version": "6.0.28", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.0.28.tgz", + "integrity": "sha512-HnLKXPIwZo+JvuG1aYfGX+BoDVpmYbZBlFDSSKroBdCWZRxJJ7OQIOjBWfnf9RxOJqtwEZfVylgtmIUr9ult3Q==", "dev": true, "requires": { - "@storybook/channels": "6.0.26", - "@storybook/client-logger": "6.0.26", - "@storybook/core-events": "6.0.26", + "@storybook/channels": "6.0.28", + "@storybook/client-logger": "6.0.28", + "@storybook/core-events": "6.0.28", "core-js": "^3.0.1", "global": "^4.3.2", "qs": "^6.6.0", @@ -6592,9 +6688,9 @@ } }, "@storybook/channels": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.0.26.tgz", - "integrity": "sha512-H0iUorayYqS+zfhbjd+cYRzAdRLGLWUeWFu2Aa+oJ4/zeAQNL+DafWboHc567RQ4Vb5KqE5QZoCFskWUUYqJYA==", + "version": "6.0.28", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.0.28.tgz", + "integrity": "sha512-Ow1fR0GGdlfAQlagOrXHs7QQlCQ0xTKoznQgUFv1KxKw/bMwMtTJcpCYGSAuDzCzypCIR4EHtIHZxJsd/A2ieg==", "dev": true, "requires": { "core-js": "^3.0.1", @@ -6603,16 +6699,16 @@ } }, "@storybook/client-api": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.0.26.tgz", - "integrity": "sha512-Qd5wR5b5lio/EchuJMhAmmJAE1pfvnEyu+JnyFGwMZLV9mN9NSspz+YsqbSCCDZsYcP5ewvPEnumIWqmj/wagQ==", + "version": "6.0.28", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.0.28.tgz", + "integrity": "sha512-KZ6cw6MU8exXyahHrpNAG5gmSioCXw6I5k0IOH/xzkJpN/9IMbYSbACvxbSKHeCIZorhcWNVWJjth8Kc6dD4Hg==", "dev": true, "requires": { - "@storybook/addons": "6.0.26", - "@storybook/channel-postmessage": "6.0.26", - "@storybook/channels": "6.0.26", - "@storybook/client-logger": "6.0.26", - "@storybook/core-events": "6.0.26", + "@storybook/addons": "6.0.28", + "@storybook/channel-postmessage": "6.0.28", + "@storybook/channels": "6.0.28", + "@storybook/client-logger": "6.0.28", + "@storybook/core-events": "6.0.28", "@storybook/csf": "0.0.1", "@types/qs": "^6.9.0", "@types/webpack-env": "^1.15.2", @@ -6636,9 +6732,9 @@ } }, "@storybook/client-logger": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.0.26.tgz", - "integrity": "sha512-VNoL6/oehVhn3hZi9vrTNT+C/3oAZKV+smfZFnPtsCR/Fq7CKbmsBd0pGPL57f81RU8e8WygwrIlAGJTDSNIjw==", + "version": "6.0.28", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.0.28.tgz", + "integrity": "sha512-FOgeRQknrlm5PTgfY0THPrcrDyxu4ImuFOn+VWQW60mf9ShJQl45BEgm4bm9hbblYYnVHtnskWUOJfxqhHvgjg==", "dev": true, "requires": { "core-js": "^3.0.1", @@ -6646,14 +6742,14 @@ } }, "@storybook/components": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.0.26.tgz", - "integrity": "sha512-8wigI1pDFJO1m1IQWPguOK+nOsaAVRWkVdu+2te/rDcIR9QNvMzzou0+Lhfp3zKSVT4E6mEoGB/TWXXF5Iq0sQ==", + "version": "6.0.28", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.0.28.tgz", + "integrity": "sha512-rp18w+xC5/ATQThnUR6Rv2cg/DAokbV88uZLPCGHX8HsPY2jFPLyCsWnNiIHBF/SfUCjIlljChlX3bzGk+SQUA==", "dev": true, "requires": { - "@storybook/client-logger": "6.0.26", + "@storybook/client-logger": "6.0.28", "@storybook/csf": "0.0.1", - "@storybook/theming": "6.0.26", + "@storybook/theming": "6.0.28", "@types/overlayscrollbars": "^1.9.0", "@types/react-color": "^3.0.1", "@types/react-syntax-highlighter": "11.0.4", @@ -6676,9 +6772,9 @@ } }, "@storybook/core-events": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.0.26.tgz", - "integrity": "sha512-nWjS/+kMiw31OPgeJQaiFsJk9ZJJo3/d4c+kc6GOl2iC1H3Q4/5cm3NvJBn/7bUtKHmSFwfbDouj+XjUk5rZbQ==", + "version": "6.0.28", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.0.28.tgz", + "integrity": "sha512-YT691sQEyoTabXZGCeCXulIO31aXfiWpvE7vW7t3F/uo/Xv6aiNcY/Fzy1vRNcbgCAf3EWsBtzb1eh0FCJkyuA==", "dev": true, "requires": { "core-js": "^3.0.1" @@ -8713,9 +8809,9 @@ } }, "@storybook/router": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.0.26.tgz", - "integrity": "sha512-kQ1LF/2gX3IkjS1wX7CsoeBc9ptHQzOsyax16rUyJa769DT5vMNtFtQxjNXMqSiSapPg2yrXJFKQNaoWvKgQEQ==", + "version": "6.0.28", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.0.28.tgz", + "integrity": "sha512-omp2LRq3LYc7A89PM0WpJnioedzCme3jJbJXRR7tFva4N+aP6JGaFTJZZdk2NHXHxerGfWG0Cs9G6HNAw9nN1A==", "dev": true, "requires": { "@reach/router": "^1.3.3", @@ -8735,15 +8831,15 @@ } }, "@storybook/theming": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.0.26.tgz", - "integrity": "sha512-9yon2ofb9a+RT1pdvn8Njydy7XRw0qXcIsMqGsJRKoZecmRRozqB6DxH9Gbdf1vRSbM9gYUUDjbiMDFz7+4RiQ==", + "version": "6.0.28", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.0.28.tgz", + "integrity": "sha512-dcZXDkO1LYcnWUejAzvjl3OPBnAB1m2+fzmRx0dBrgm2O+fcNXTadQ6SXZYKaSz37lS+aGtYG7I9nurwhXMMXA==", "dev": true, "requires": { "@emotion/core": "^10.0.20", "@emotion/is-prop-valid": "^0.8.6", "@emotion/styled": "^10.0.17", - "@storybook/client-logger": "6.0.26", + "@storybook/client-logger": "6.0.28", "core-js": "^3.0.1", "deep-object-diff": "^1.1.0", "emotion-theming": "^10.0.19", @@ -8875,9 +8971,9 @@ "dev": true }, "@types/babel__core": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.9.tgz", - "integrity": "sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==", + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", + "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -8888,18 +8984,18 @@ } }, "@types/babel__generator": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", - "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.3.tgz", + "integrity": "sha512-uCoznIPDmnickEi6D0v11SBpW0OuVqHJCa7syXqQHy5uktSCreIlt0iglsCnmvz8yCb38hGcWeseA8cWJSwv5Q==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -8907,18 +9003,18 @@ } }, "@types/babel__traverse": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.13.tgz", - "integrity": "sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", + "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, "@types/cheerio": { - "version": "0.22.18", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.18.tgz", - "integrity": "sha512-Fq7R3fINAPSdUEhOyjG4iVxgHrOnqDJbY0/BUuiN0pvD/rfmZWekVZnv+vcs8TtpA2XF50uv50LaE4EnpEL/Hw==", + "version": "0.22.22", + "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.22.tgz", + "integrity": "sha512-05DYX4zU96IBfZFY+t3Mh88nlwSMtmmzSYaQkKN48T495VV1dkHSah6qYyDTN5ngaS0i0VonH37m+RuzSM0YiA==", "dev": true, "requires": { "@types/node": "*" @@ -8931,9 +9027,9 @@ "dev": true }, "@types/enzyme": { - "version": "3.10.7", - "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.7.tgz", - "integrity": "sha512-J+0wduPGAkzOvW7sr6hshGv1gBI3WXLRTczkRKzVPxLP3xAkYxZmvvagSBPw8Z452fZ8TGUxCmAXcb44yLQksw==", + "version": "3.10.8", + "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.8.tgz", + "integrity": "sha512-vlOuzqsTHxog6PV79+tvOHFb6hq4QZKMq1lLD9MaWD1oec2lHTKndn76XOpSwCA0oFTaIbKVPrgM3k78Jjd16g==", "dev": true, "requires": { "@types/cheerio": "*", @@ -9204,18 +9300,18 @@ } }, "@types/react": { - "version": "16.9.53", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.53.tgz", - "integrity": "sha512-4nW60Sd4L7+WMXH1D6jCdVftuW7j4Za6zdp6tJ33Rqv0nk1ZAmQKML9ZLD4H0dehA3FZxXR/GM8gXplf82oNGw==", + "version": "16.9.56", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.56.tgz", + "integrity": "sha512-gIkl4J44G/qxbuC6r2Xh+D3CGZpJ+NdWTItAPmZbR5mUS+JQ8Zvzpl0ea5qT/ZT3ZNTUcDKUVqV3xBE8wv/DyQ==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" }, "dependencies": { "csstype": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", - "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.4.tgz", + "integrity": "sha512-xc8DUsCLmjvCfoD7LTGE0ou2MIWLx0K9RCZwSHMOdynqRsP4MtUcLeqh1HcQ2dInwDTqn+3CE0/FZh1et+p4jA==" } } }, @@ -9230,9 +9326,9 @@ } }, "@types/react-native": { - "version": "0.63.30", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.63.30.tgz", - "integrity": "sha512-8/PrOjuUaPTCfMeW12ubseZPUGdbRhxYDa/aT+0D0KWVTe60b4H/gJrcfJmBXC6EcCFcimuTzQCv8/S03slYqA==", + "version": "0.63.35", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.63.35.tgz", + "integrity": "sha512-2uyPZoHtoUVsVO55HdrRCpgwwG2zVHLttTaR9f/BThoBAQngNWuZQ0eMGmfgRHBKXmi3TmtWjbWPxohkITLlkw==", "requires": { "@types/react": "*" } @@ -9267,9 +9363,9 @@ } }, "@types/react-redux": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.9.tgz", - "integrity": "sha512-mpC0jqxhP4mhmOl3P4ipRsgTgbNofMRXJb08Ms6gekViLj61v1hOZEKWDCyWsdONr6EjEA6ZHXC446wdywDe0w==", + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.11.tgz", + "integrity": "sha512-OjaFlmqy0CRbYKBoaWF84dub3impqnLJUrz4u8PRjDzaa4n1A2cVmjMV81shwXyAD5x767efhA8STFGJz/r1Zg==", "dev": true, "requires": { "@types/hoist-non-react-statics": "^3.3.0", @@ -9478,28 +9574,28 @@ } }, "@typescript-eslint/scope-manager": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.5.0.tgz", - "integrity": "sha512-C0cEO0cTMPJ/w4RA/KVe4LFFkkSh9VHoFzKmyaaDWAnPYIEzVCtJ+Un8GZoJhcvq+mPFXEsXa01lcZDHDG6Www==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.8.1.tgz", + "integrity": "sha512-r0iUOc41KFFbZdPAdCS4K1mXivnSZqXS5D9oW+iykQsRlTbQRfuFRSW20xKDdYiaCoH+SkSLeIF484g3kWzwOQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.5.0", - "@typescript-eslint/visitor-keys": "4.5.0" + "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/visitor-keys": "4.8.1" }, "dependencies": { "@typescript-eslint/types": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.5.0.tgz", - "integrity": "sha512-n2uQoXnyWNk0Les9MtF0gCK3JiWd987JQi97dMSxBOzVoLZXCNtxFckVqt1h8xuI1ix01t+iMY4h4rFMj/303g==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.8.1.tgz", + "integrity": "sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA==", "dev": true }, "@typescript-eslint/visitor-keys": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.5.0.tgz", - "integrity": "sha512-UHq4FSa55NDZqscRU//O5ROFhHa9Hqn9KWTEvJGTArtTQp5GKv9Zqf6d/Q3YXXcFv4woyBml7fJQlQ+OuqRcHA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz", + "integrity": "sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.5.0", + "@typescript-eslint/types": "4.8.1", "eslint-visitor-keys": "^2.0.0" } }, @@ -9803,9 +9899,9 @@ "dev": true }, "agent-base": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "requires": { "debug": "4" } @@ -10450,25 +10546,25 @@ "dev": true }, "babel-jest": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.1.tgz", - "integrity": "sha512-duMWEOKrSBYRVTTNpL2SipNIWnZOjP77auOBMPQ3zXAdnDbyZQWU8r/RxNWpUf9N6cgPFecQYelYLytTVXVDtA==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", "dev": true, "requires": { - "@jest/transform": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", "@types/babel__core": "^7.1.7", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.5.0", + "babel-preset-jest": "^26.6.2", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" }, "dependencies": { "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -10545,14 +10641,14 @@ } }, "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz", + "integrity": "sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==", "dev": true, "requires": { "find-cache-dir": "^2.1.0", "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", + "make-dir": "^2.1.0", "pify": "^4.0.1", "schema-utils": "^2.6.5" } @@ -10611,9 +10707,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.5.0.tgz", - "integrity": "sha512-ck17uZFD3CDfuwCLATWZxkkuGGFhMij8quP8CNhwj8ek1mqFgbFzRJ30xwC04LLscj/aKsVFfRST+b5PT7rSuw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -10878,9 +10974,9 @@ "dev": true }, "babel-preset-current-node-syntax": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", - "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", + "integrity": "sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==", "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -10893,7 +10989,8 @@ "@babel/plugin-syntax-numeric-separator": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" } }, "babel-preset-fbjs": { @@ -10931,13 +11028,13 @@ } }, "babel-preset-jest": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.5.0.tgz", - "integrity": "sha512-F2vTluljhqkiGSJGBg/jOruA8vIIIL11YrxRcO7nviNTMbbofPSHwnm8mgP7d/wS7wRSexRoI6X1A6T74d4LQA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^26.5.0", - "babel-preset-current-node-syntax": "^0.1.3" + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" } }, "babel-preset-minify": { @@ -11947,9 +12044,9 @@ "dev": true }, "cjs-module-lexer": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.4.3.tgz", - "integrity": "sha512-5RLK0Qfs0PNDpEyBXIr3bIT1Muw3ojSlvpw6dAmkUcO0+uTrsBn7GuEIgx40u+OzbCBLDta7nvmud85P4EmTsQ==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", "dev": true }, "class-utils": { @@ -12359,9 +12456,9 @@ } }, "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.7.0.tgz", + "integrity": "sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA==" }, "core-js-compat": { "version": "3.6.5", @@ -12994,9 +13091,9 @@ } }, "detox": { - "version": "17.10.3", - "resolved": "https://registry.npmjs.org/detox/-/detox-17.10.3.tgz", - "integrity": "sha512-wVEBou/rx3Ctg0pM/ghGQVG7HePnMl9cE+S/OJcrQTxXCNHcSg/uexehOeBNqJtLF4DN0Lcp/Lut8EYhqpzzjA==", + "version": "17.12.0", + "resolved": "https://registry.npmjs.org/detox/-/detox-17.12.0.tgz", + "integrity": "sha512-cCabg0kamWIWf3qCFWfuJT+rjF6FBngGqPHfWURmiY5Z7xi63mX9GYg1xVCYjb6KqZz5ZA4PCxR2zHXUo9XToA==", "dev": true, "requires": { "bunyan": "^1.8.12", @@ -13040,9 +13137,9 @@ } }, "cliui": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.3.tgz", - "integrity": "sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", @@ -13206,15 +13303,15 @@ } }, "y18n": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.4.tgz", - "integrity": "sha512-deLOfD+RvFgrpAmSZgfGdWYE+OKyHcVHaRQ7NphG/63scpRvTHHeQMAxGGvaLVGJ+HYVcCXlzcTK0ZehFf+eHQ==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", "dev": true }, "yargs": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz", - "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==", + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", + "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -13222,14 +13319,14 @@ "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", - "y18n": "^5.0.2", + "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "20.2.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.3.tgz", - "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==", + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } } @@ -13303,9 +13400,9 @@ }, "dependencies": { "csstype": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", - "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.4.tgz", + "integrity": "sha512-xc8DUsCLmjvCfoD7LTGE0ou2MIWLx0K9RCZwSHMOdynqRsP4MtUcLeqh1HcQ2dInwDTqn+3CE0/FZh1et+p4jA==", "dev": true } } @@ -13929,13 +14026,13 @@ } }, "eslint": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", - "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.1.3", + "@eslint/eslintrc": "^0.2.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -14070,9 +14167,9 @@ "dev": true }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -14190,42 +14287,42 @@ "dev": true }, "eslint-plugin-jest": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.1.0.tgz", - "integrity": "sha512-827YJ+E8B9PvXu/0eiVSNFfxxndbKv+qE/3GSMhdorCaeaOehtqHGX2YDW9B85TEOre9n/zscledkFW/KbnyGg==", + "version": "24.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.1.3.tgz", + "integrity": "sha512-dNGGjzuEzCE3d5EPZQ/QGtmlMotqnYWD/QpCZ1UuZlrMAdhG5rldh0N0haCvhGnUkSeuORS5VNROwF9Hrgn3Lg==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "^4.0.1" }, "dependencies": { "@typescript-eslint/experimental-utils": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.5.0.tgz", - "integrity": "sha512-bW9IpSAKYvkqDGRZzayBXIgPsj2xmmVHLJ+flGSoN0fF98pGoKFhbunIol0VF2Crka7z984EEhFi623Rl7e6gg==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.1.tgz", + "integrity": "sha512-WigyLn144R3+lGATXW4nNcDJ9JlTkG8YdBWHkDlN0lC3gUGtDi7Pe3h5GPvFKMcRz8KbZpm9FJV9NTW8CpRHpg==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.5.0", - "@typescript-eslint/types": "4.5.0", - "@typescript-eslint/typescript-estree": "4.5.0", + "@typescript-eslint/scope-manager": "4.8.1", + "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/typescript-estree": "4.8.1", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" } }, "@typescript-eslint/types": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.5.0.tgz", - "integrity": "sha512-n2uQoXnyWNk0Les9MtF0gCK3JiWd987JQi97dMSxBOzVoLZXCNtxFckVqt1h8xuI1ix01t+iMY4h4rFMj/303g==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.8.1.tgz", + "integrity": "sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.5.0.tgz", - "integrity": "sha512-gN1mffq3zwRAjlYWzb5DanarOPdajQwx5MEWkWCk0XvqC8JpafDTeioDoow2L4CA/RkYZu7xEsGZRhqrTsAG8w==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.1.tgz", + "integrity": "sha512-bJ6Fn/6tW2g7WIkCWh3QRlaSU7CdUUK52shx36/J7T5oTQzANvi6raoTsbwGM11+7eBbeem8hCCKbyvAc0X3sQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.5.0", - "@typescript-eslint/visitor-keys": "4.5.0", + "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/visitor-keys": "4.8.1", "debug": "^4.1.1", "globby": "^11.0.1", "is-glob": "^4.0.1", @@ -14235,12 +14332,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.5.0.tgz", - "integrity": "sha512-UHq4FSa55NDZqscRU//O5ROFhHa9Hqn9KWTEvJGTArtTQp5GKv9Zqf6d/Q3YXXcFv4woyBml7fJQlQ+OuqRcHA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz", + "integrity": "sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.5.0", + "@typescript-eslint/types": "4.8.1", "eslint-visitor-keys": "^2.0.0" } }, @@ -14540,23 +14637,23 @@ } }, "expect": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.1.tgz", - "integrity": "sha512-BRfxIBHagghMmr1D2MRY0Qv5d3Nc8HCqgbDwNXw/9izmM5eBb42a2YjLKSbsqle76ozGkAEPELQX4IdNHAKRNA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "ansi-styles": "^4.0.0", "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.1", - "jest-message-util": "^26.6.1", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", "jest-regex-util": "^26.0.0" }, "dependencies": { "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -14581,6 +14678,12 @@ "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -14658,17 +14761,18 @@ "dev": true }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } @@ -14683,6 +14787,24 @@ "picomatch": "^2.0.5" } }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -14983,9 +15105,9 @@ "dev": true }, "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", + "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -15596,9 +15718,9 @@ "dev": true }, "fuse.js": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.4.2.tgz", - "integrity": "sha512-jyy+zOtV96ylMqOGpVjAWQfvEkfTtuJRjsOC6pjReeju8SoDZ2vgFF6eur0a8fxsVwwcpdt3ieaQQeLdkqXH1Q==" + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.4.3.tgz", + "integrity": "sha512-JNgngolukIrqwayWnvy6NLH63hmwKPhm63o0uyBg51jPD0j09IvAzlV1rTXfAsgxpghI7khAo6Mv+EmvjDWXig==" }, "gauge": { "version": "2.7.4", @@ -17329,31 +17451,31 @@ "integrity": "sha512-c2mP3qESC4YKLnEA01enB8w01FLJ7EDjp9xTCajCuUDyJu8mrAmol63RdD8E5oJ2l0SI27Sn9HmrymFAnOcm9w==" }, "jest": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.1.tgz", - "integrity": "sha512-f+ahfqw3Ffy+9vA7sWFGpTmhtKEMsNAZiWBVXDkrpIO73zIz22iimjirnV78kh/eWlylmvLh/0WxHN6fZraZdA==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", "dev": true, "requires": { - "@jest/core": "^26.6.1", + "@jest/core": "^26.6.3", "import-local": "^3.0.2", - "jest-cli": "^26.6.1" + "jest-cli": "^26.6.3" } }, "jest-changed-files": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.1.tgz", - "integrity": "sha512-NhSdZ5F6b/rIN5V46x1l31vrmukD/bJUXgYAY8VtP1SknYdJwjYDRxuLt7Z8QryIdqCjMIn2C0Cd98EZ4umo8Q==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "execa": "^4.0.0", "throat": "^5.0.0" }, "dependencies": { "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -17418,9 +17540,9 @@ } }, "execa": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", - "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -17533,56 +17655,56 @@ } }, "jest-cli": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.1.tgz", - "integrity": "sha512-aPLoEjlwFrCWhiPpW5NUxQA1X1kWsAnQcQ0SO/fHsCvczL3W75iVAcH9kP6NN+BNqZcHNEvkhxT5cDmBfEAh+w==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", "dev": true, "requires": { - "@jest/core": "^26.6.1", - "@jest/test-result": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", "is-ci": "^2.0.0", - "jest-config": "^26.6.1", - "jest-util": "^26.6.1", - "jest-validate": "^26.6.1", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", "prompts": "^2.0.1", "yargs": "^15.4.1" }, "dependencies": { "@jest/console": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.1.tgz", - "integrity": "sha512-cjqcXepwC5M+VeIhwT6Xpi/tT4AiNzlIx8SMJ9IihduHnsSrnWNvTBfKIpmqOOCNOPqtbBx6w2JqfoLOJguo8g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^26.6.1", - "jest-util": "^26.6.1", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", "slash": "^3.0.0" } }, "@jest/test-result": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.1.tgz", - "integrity": "sha512-wqAgIerIN2gSdT2A8WeA5+AFh9XQBqYGf8etK143yng3qYd0mF0ie2W5PVmgnjw4VDU6ammI9NdXrKgNhreawg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, "requires": { - "@jest/console": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -17632,9 +17754,9 @@ } }, "camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", - "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, "chalk": { @@ -17735,28 +17857,29 @@ "dev": true }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -17765,17 +17888,17 @@ } }, "jest-validate": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.1.tgz", - "integrity": "sha512-BEFpGbylKocnNPZULcnk+TGaz1oFZQH/wcaXlaXABbu0zBwkOGczuWgdLucUouuQqn7VadHZZeTvo8VSFDLMOA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "camelcase": "^6.0.0", "chalk": "^4.0.0", "jest-get-type": "^26.3.0", "leven": "^3.1.0", - "pretty-format": "^26.6.1" + "pretty-format": "^26.6.2" } }, "locate-path": { @@ -17813,12 +17936,12 @@ "dev": true }, "pretty-format": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.1.tgz", - "integrity": "sha512-MeqqsP5PYcRBbGMvwzsyBdmAJ4EFX7pWFyl7x4+dMVg5pE0ZDdBIvEH2ergvIO+Gvwv1wh64YuOY9y5LuyY/GA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^17.0.1" @@ -17940,35 +18063,35 @@ } }, "jest-config": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.1.tgz", - "integrity": "sha512-mtJzIynIwW1d1nMlKCNCQiSgWaqFn8cH/fOSNY97xG7Y9tBCZbCSuW2GTX0RPmceSJGO7l27JgwC18LEg0Vg+g==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.1", - "@jest/types": "^26.6.1", - "babel-jest": "^26.6.1", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.1", - "jest-environment-node": "^26.6.1", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.1", + "jest-jasmine2": "^26.6.3", "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.1", - "jest-util": "^26.6.1", - "jest-validate": "^26.6.1", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", "micromatch": "^4.0.2", - "pretty-format": "^26.6.1" + "pretty-format": "^26.6.2" }, "dependencies": { "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -18012,9 +18135,9 @@ } }, "camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", - "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, "chalk": { @@ -18070,12 +18193,12 @@ "dev": true }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -18084,17 +18207,17 @@ } }, "jest-validate": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.1.tgz", - "integrity": "sha512-BEFpGbylKocnNPZULcnk+TGaz1oFZQH/wcaXlaXABbu0zBwkOGczuWgdLucUouuQqn7VadHZZeTvo8VSFDLMOA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "camelcase": "^6.0.0", "chalk": "^4.0.0", "jest-get-type": "^26.3.0", "leven": "^3.1.0", - "pretty-format": "^26.6.1" + "pretty-format": "^26.6.2" } }, "micromatch": { @@ -18108,12 +18231,12 @@ } }, "pretty-format": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.1.tgz", - "integrity": "sha512-MeqqsP5PYcRBbGMvwzsyBdmAJ4EFX7pWFyl7x4+dMVg5pE0ZDdBIvEH2ergvIO+Gvwv1wh64YuOY9y5LuyY/GA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^17.0.1" @@ -18264,22 +18387,22 @@ } }, "jest-each": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.1.tgz", - "integrity": "sha512-gSn8eB3buchuq45SU7pLB7qmCGax1ZSxfaWuEFblCyNMtyokYaKFh9dRhYPujK6xYL57dLIPhLKatjmB5XWzGA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "chalk": "^4.0.0", "jest-get-type": "^26.3.0", - "jest-util": "^26.6.1", - "pretty-format": "^26.6.1" + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" }, "dependencies": { "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -18375,12 +18498,12 @@ "dev": true }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -18399,12 +18522,12 @@ } }, "pretty-format": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.1.tgz", - "integrity": "sha512-MeqqsP5PYcRBbGMvwzsyBdmAJ4EFX7pWFyl7x4+dMVg5pE0ZDdBIvEH2ergvIO+Gvwv1wh64YuOY9y5LuyY/GA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^17.0.1" @@ -18806,38 +18929,38 @@ } }, "jest-environment-jsdom": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.1.tgz", - "integrity": "sha512-A17RiXuHYNVlkM+3QNcQ6n5EZyAc6eld8ra9TW26luounGWpku4tj03uqRgHJCI1d4uHr5rJiuCH5JFRtdmrcA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", "dev": true, "requires": { - "@jest/environment": "^26.6.1", - "@jest/fake-timers": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", "@types/node": "*", - "jest-mock": "^26.6.1", - "jest-util": "^26.6.1", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", "jsdom": "^16.4.0" }, "dependencies": { "@jest/fake-timers": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.1.tgz", - "integrity": "sha512-T/SkMLgOquenw/nIisBRD6XAYpFir0kNuclYLkse5BpzeDUukyBr+K31xgAo9M0hgjU9ORlekAYPSzc0DKfmKg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@sinonjs/fake-timers": "^6.0.1", "@types/node": "*", - "jest-message-util": "^26.6.1", - "jest-mock": "^26.6.1", - "jest-util": "^26.6.1" + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" } }, "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -18862,6 +18985,12 @@ "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -18933,38 +19062,39 @@ "dev": true }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } }, "jest-mock": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.1.tgz", - "integrity": "sha512-my0lPTBu1awY8iVG62sB2sx9qf8zxNDVX+5aFgoB8Vbqjb6LqIOsfyFA8P1z6H2IsqMbvOX9oCJnK67Y3yUIMA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*" } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -18982,6 +19112,24 @@ "picomatch": "^2.0.5" } }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -19018,37 +19166,37 @@ } }, "jest-environment-node": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.1.tgz", - "integrity": "sha512-YffaCp6h0j1kbcf1NVZ7umC6CPgD67YS+G1BeornfuSkx5s3xdhuwG0DCxSiHPXyT81FfJzA1L7nXvhq50OWIg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", "dev": true, "requires": { - "@jest/environment": "^26.6.1", - "@jest/fake-timers": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", "@types/node": "*", - "jest-mock": "^26.6.1", - "jest-util": "^26.6.1" + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" }, "dependencies": { "@jest/fake-timers": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.1.tgz", - "integrity": "sha512-T/SkMLgOquenw/nIisBRD6XAYpFir0kNuclYLkse5BpzeDUukyBr+K31xgAo9M0hgjU9ORlekAYPSzc0DKfmKg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@sinonjs/fake-timers": "^6.0.1", "@types/node": "*", - "jest-message-util": "^26.6.1", - "jest-mock": "^26.6.1", - "jest-util": "^26.6.1" + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" } }, "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -19073,6 +19221,12 @@ "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -19144,38 +19298,39 @@ "dev": true }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } }, "jest-mock": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.1.tgz", - "integrity": "sha512-my0lPTBu1awY8iVG62sB2sx9qf8zxNDVX+5aFgoB8Vbqjb6LqIOsfyFA8P1z6H2IsqMbvOX9oCJnK67Y3yUIMA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*" } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -19193,6 +19348,24 @@ "picomatch": "^2.0.5" } }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -19284,49 +19457,49 @@ } }, "jest-jasmine2": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.1.tgz", - "integrity": "sha512-2uYdT32o/ZzSxYAPduAgokO8OlAL1YdG/9oxcEY138EDNpIK5XRRJDaGzTZdIBWSxk0aR8XxN44FvfXtHB+Fiw==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.1", - "@jest/source-map": "^26.5.0", - "@jest/test-result": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^26.6.1", + "expect": "^26.6.2", "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.1", - "jest-matcher-utils": "^26.6.1", - "jest-message-util": "^26.6.1", - "jest-runtime": "^26.6.1", - "jest-snapshot": "^26.6.1", - "jest-util": "^26.6.1", - "pretty-format": "^26.6.1", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", "throat": "^5.0.0" }, "dependencies": { "@jest/console": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.1.tgz", - "integrity": "sha512-cjqcXepwC5M+VeIhwT6Xpi/tT4AiNzlIx8SMJ9IihduHnsSrnWNvTBfKIpmqOOCNOPqtbBx6w2JqfoLOJguo8g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^26.6.1", - "jest-util": "^26.6.1", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", "slash": "^3.0.0" } }, "@jest/source-map": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.5.0.tgz", - "integrity": "sha512-jWAw9ZwYHJMe9eZq/WrsHlwF8E3hM9gynlcDpOyCb9bR8wEd9ZNBZCi7/jZyzHxC7t3thZ10gO2IDhu0bPKS5g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", "dev": true, "requires": { "callsites": "^3.0.0", @@ -19335,21 +19508,21 @@ } }, "@jest/test-result": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.1.tgz", - "integrity": "sha512-wqAgIerIN2gSdT2A8WeA5+AFh9XQBqYGf8etK143yng3qYd0mF0ie2W5PVmgnjw4VDU6ammI9NdXrKgNhreawg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, "requires": { - "@jest/console": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -19457,28 +19630,29 @@ "dev": true }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -19497,12 +19671,12 @@ } }, "pretty-format": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.1.tgz", - "integrity": "sha512-MeqqsP5PYcRBbGMvwzsyBdmAJ4EFX7pWFyl7x4+dMVg5pE0ZDdBIvEH2ergvIO+Gvwv1wh64YuOY9y5LuyY/GA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^17.0.1" @@ -19562,19 +19736,19 @@ } }, "jest-leak-detector": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.1.tgz", - "integrity": "sha512-j9ZOtJSJKlHjrs4aIxWjiQUjyrffPdiAQn2Iw0916w7qZE5Lk0T2KhIH6E9vfhzP6sw0Q0jtnLLb4vQ71o1HlA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", "dev": true, "requires": { "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.1" + "pretty-format": "^26.6.2" }, "dependencies": { "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -19646,12 +19820,12 @@ "dev": true }, "pretty-format": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.1.tgz", - "integrity": "sha512-MeqqsP5PYcRBbGMvwzsyBdmAJ4EFX7pWFyl7x4+dMVg5pE0ZDdBIvEH2ergvIO+Gvwv1wh64YuOY9y5LuyY/GA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^17.0.1" @@ -19675,21 +19849,21 @@ } }, "jest-matcher-utils": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.1.tgz", - "integrity": "sha512-9iu3zrsYlUnl8pByhREF9rr5eYoiEb1F7ymNKg6lJr/0qD37LWS5FSW/JcoDl8UdMX2+zAzabDs7sTO+QFKjCg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^26.6.1", + "jest-diff": "^26.6.2", "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.1" + "pretty-format": "^26.6.2" }, "dependencies": { "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -19748,6 +19922,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -19755,15 +19935,15 @@ "dev": true }, "jest-diff": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.1.tgz", - "integrity": "sha512-BBNy/zin2m4kG5In126O8chOBxLLS/XMTuuM2+YhgyHk87ewPzKTuTJcqj3lOWOi03NNgrl+DkMeV/exdvG9gg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^26.5.0", + "diff-sequences": "^26.6.2", "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.1" + "pretty-format": "^26.6.2" } }, "jest-get-type": { @@ -19773,12 +19953,12 @@ "dev": true }, "pretty-format": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.1.tgz", - "integrity": "sha512-MeqqsP5PYcRBbGMvwzsyBdmAJ4EFX7pWFyl7x4+dMVg5pE0ZDdBIvEH2ergvIO+Gvwv1wh64YuOY9y5LuyY/GA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^17.0.1" @@ -19877,25 +20057,25 @@ "dev": true }, "jest-resolve": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.1.tgz", - "integrity": "sha512-hiHfQH6rrcpAmw9xCQ0vD66SDuU+7ZulOuKwc4jpbmFFsz0bQG/Ib92K+9/489u5rVw0btr/ZhiHqBpmkbCvuQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.1", + "jest-util": "^26.6.2", "read-pkg-up": "^7.0.1", "resolve": "^1.18.1", "slash": "^3.0.0" }, "dependencies": { "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -19979,12 +20159,12 @@ "dev": true }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -20039,20 +20219,20 @@ } }, "jest-resolve-dependencies": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.1.tgz", - "integrity": "sha512-MN6lufbZJ3RBfTnJesZtHu3hUCBqPdHRe2+FhIt0yiqJ3fMgzWRqMRQyN/d/QwOE7KXwAG2ekZutbPhuD7s51A==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.1" + "jest-snapshot": "^26.6.2" }, "dependencies": { "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -20123,63 +20303,63 @@ } }, "jest-runner": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.1.tgz", - "integrity": "sha512-DmpNGdgsbl5s0FGkmsInmqnmqCtliCSnjWA2TFAJS1m1mL5atwfPsf+uoZ8uYQ2X0uDj4NM+nPcDnUpbNTRMBA==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", "dev": true, "requires": { - "@jest/console": "^26.6.1", - "@jest/environment": "^26.6.1", - "@jest/test-result": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.7.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-config": "^26.6.1", + "jest-config": "^26.6.3", "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.1", - "jest-leak-detector": "^26.6.1", - "jest-message-util": "^26.6.1", - "jest-resolve": "^26.6.1", - "jest-runtime": "^26.6.1", - "jest-util": "^26.6.1", - "jest-worker": "^26.6.1", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", "source-map-support": "^0.5.6", "throat": "^5.0.0" }, "dependencies": { "@jest/console": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.1.tgz", - "integrity": "sha512-cjqcXepwC5M+VeIhwT6Xpi/tT4AiNzlIx8SMJ9IihduHnsSrnWNvTBfKIpmqOOCNOPqtbBx6w2JqfoLOJguo8g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^26.6.1", - "jest-util": "^26.6.1", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", "slash": "^3.0.0" } }, "@jest/test-result": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.1.tgz", - "integrity": "sha512-wqAgIerIN2gSdT2A8WeA5+AFh9XQBqYGf8etK143yng3qYd0mF0ie2W5PVmgnjw4VDU6ammI9NdXrKgNhreawg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, "requires": { - "@jest/console": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -20204,6 +20384,12 @@ "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -20273,9 +20459,9 @@ } }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", "dev": true, "optional": true }, @@ -20292,12 +20478,12 @@ "dev": true }, "jest-haste-map": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.1.tgz", - "integrity": "sha512-9kPafkv0nX6ta1PrshnkiyhhoQoFWncrU/uUBt3/AP1r78WSCU5iLceYRTwDvJl67H3RrXqSlSVDDa/AsUB7OQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -20305,34 +20491,35 @@ "fsevents": "^2.1.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.5.0", - "jest-util": "^26.6.1", - "jest-worker": "^26.6.1", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", "micromatch": "^4.0.2", "sane": "^4.0.3", "walker": "^1.0.7" } }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } }, "jest-serializer": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.5.0.tgz", - "integrity": "sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, "requires": { "@types/node": "*", @@ -20340,12 +20527,12 @@ } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -20354,9 +20541,9 @@ } }, "jest-worker": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.1.tgz", - "integrity": "sha512-R5IE3qSGz+QynJx8y+ICEkdI2OJ3RJjRQVEyCcFAd3yVhQSEtquziPO29Mlzgn07LOVE8u8jhJ1FqcwegiXWOw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { "@types/node": "*", @@ -20386,6 +20573,24 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -20428,72 +20633,72 @@ } }, "jest-runtime": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.1.tgz", - "integrity": "sha512-7uOCNeezXDWgjEyzYbRN2ViY7xNZzusNVGAMmU0UHRUNXuY4j4GBHKGMqPo/cBPZA9bSYp+lwK2DRRBU5Dv6YQ==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", "dev": true, "requires": { - "@jest/console": "^26.6.1", - "@jest/environment": "^26.6.1", - "@jest/fake-timers": "^26.6.1", - "@jest/globals": "^26.6.1", - "@jest/source-map": "^26.5.0", - "@jest/test-result": "^26.6.1", - "@jest/transform": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", "@types/yargs": "^15.0.0", "chalk": "^4.0.0", - "cjs-module-lexer": "^0.4.2", + "cjs-module-lexer": "^0.6.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-config": "^26.6.1", - "jest-haste-map": "^26.6.1", - "jest-message-util": "^26.6.1", - "jest-mock": "^26.6.1", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.1", - "jest-snapshot": "^26.6.1", - "jest-util": "^26.6.1", - "jest-validate": "^26.6.1", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^15.4.1" }, "dependencies": { "@jest/console": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.1.tgz", - "integrity": "sha512-cjqcXepwC5M+VeIhwT6Xpi/tT4AiNzlIx8SMJ9IihduHnsSrnWNvTBfKIpmqOOCNOPqtbBx6w2JqfoLOJguo8g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^26.6.1", - "jest-util": "^26.6.1", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", "slash": "^3.0.0" } }, "@jest/fake-timers": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.1.tgz", - "integrity": "sha512-T/SkMLgOquenw/nIisBRD6XAYpFir0kNuclYLkse5BpzeDUukyBr+K31xgAo9M0hgjU9ORlekAYPSzc0DKfmKg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@sinonjs/fake-timers": "^6.0.1", "@types/node": "*", - "jest-message-util": "^26.6.1", - "jest-mock": "^26.6.1", - "jest-util": "^26.6.1" + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" } }, "@jest/source-map": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.5.0.tgz", - "integrity": "sha512-jWAw9ZwYHJMe9eZq/WrsHlwF8E3hM9gynlcDpOyCb9bR8wEd9ZNBZCi7/jZyzHxC7t3thZ10gO2IDhu0bPKS5g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", "dev": true, "requires": { "callsites": "^3.0.0", @@ -20502,21 +20707,21 @@ } }, "@jest/test-result": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.1.tgz", - "integrity": "sha512-wqAgIerIN2gSdT2A8WeA5+AFh9XQBqYGf8etK143yng3qYd0mF0ie2W5PVmgnjw4VDU6ammI9NdXrKgNhreawg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, "requires": { - "@jest/console": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -20582,9 +20787,9 @@ "dev": true }, "camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", - "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, "chalk": { @@ -20655,9 +20860,9 @@ } }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", "dev": true, "optional": true }, @@ -20692,12 +20897,12 @@ "dev": true }, "jest-haste-map": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.1.tgz", - "integrity": "sha512-9kPafkv0nX6ta1PrshnkiyhhoQoFWncrU/uUBt3/AP1r78WSCU5iLceYRTwDvJl67H3RrXqSlSVDDa/AsUB7OQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -20705,44 +20910,45 @@ "fsevents": "^2.1.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.5.0", - "jest-util": "^26.6.1", - "jest-worker": "^26.6.1", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", "micromatch": "^4.0.2", "sane": "^4.0.3", "walker": "^1.0.7" } }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } }, "jest-mock": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.1.tgz", - "integrity": "sha512-my0lPTBu1awY8iVG62sB2sx9qf8zxNDVX+5aFgoB8Vbqjb6LqIOsfyFA8P1z6H2IsqMbvOX9oCJnK67Y3yUIMA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*" } }, "jest-serializer": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.5.0.tgz", - "integrity": "sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, "requires": { "@types/node": "*", @@ -20750,12 +20956,12 @@ } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -20764,23 +20970,23 @@ } }, "jest-validate": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.1.tgz", - "integrity": "sha512-BEFpGbylKocnNPZULcnk+TGaz1oFZQH/wcaXlaXABbu0zBwkOGczuWgdLucUouuQqn7VadHZZeTvo8VSFDLMOA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "camelcase": "^6.0.0", "chalk": "^4.0.0", "jest-get-type": "^26.3.0", "leven": "^3.1.0", - "pretty-format": "^26.6.1" + "pretty-format": "^26.6.2" } }, "jest-worker": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.1.tgz", - "integrity": "sha512-R5IE3qSGz+QynJx8y+ICEkdI2OJ3RJjRQVEyCcFAd3yVhQSEtquziPO29Mlzgn07LOVE8u8jhJ1FqcwegiXWOw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { "@types/node": "*", @@ -20835,12 +21041,12 @@ "dev": true }, "pretty-format": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.1.tgz", - "integrity": "sha512-MeqqsP5PYcRBbGMvwzsyBdmAJ4EFX7pWFyl7x4+dMVg5pE0ZDdBIvEH2ergvIO+Gvwv1wh64YuOY9y5LuyY/GA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^17.0.1" @@ -20973,33 +21179,33 @@ "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" }, "jest-snapshot": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.1.tgz", - "integrity": "sha512-JA7bZp7HRTIJYAi85pJ/OZ2eur2dqmwIToA5/6d7Mn90isGEfeF9FvuhDLLEczgKP1ihreBzrJ6Vr7zteP5JNA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", "dev": true, "requires": { "@babel/types": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.0.0", "chalk": "^4.0.0", - "expect": "^26.6.1", + "expect": "^26.6.2", "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.1", + "jest-diff": "^26.6.2", "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.1", - "jest-matcher-utils": "^26.6.1", - "jest-message-util": "^26.6.1", - "jest-resolve": "^26.6.1", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", "natural-compare": "^1.4.0", - "pretty-format": "^26.6.1", + "pretty-format": "^26.6.2", "semver": "^7.3.2" }, "dependencies": { "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -21083,6 +21289,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true + }, "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -21099,9 +21311,9 @@ } }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", "dev": true, "optional": true }, @@ -21118,15 +21330,15 @@ "dev": true }, "jest-diff": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.1.tgz", - "integrity": "sha512-BBNy/zin2m4kG5In126O8chOBxLLS/XMTuuM2+YhgyHk87ewPzKTuTJcqj3lOWOi03NNgrl+DkMeV/exdvG9gg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^26.5.0", + "diff-sequences": "^26.6.2", "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.1" + "pretty-format": "^26.6.2" } }, "jest-get-type": { @@ -21136,12 +21348,12 @@ "dev": true }, "jest-haste-map": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.1.tgz", - "integrity": "sha512-9kPafkv0nX6ta1PrshnkiyhhoQoFWncrU/uUBt3/AP1r78WSCU5iLceYRTwDvJl67H3RrXqSlSVDDa/AsUB7OQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -21149,34 +21361,35 @@ "fsevents": "^2.1.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.5.0", - "jest-util": "^26.6.1", - "jest-worker": "^26.6.1", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", "micromatch": "^4.0.2", "sane": "^4.0.3", "walker": "^1.0.7" } }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } }, "jest-serializer": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.5.0.tgz", - "integrity": "sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, "requires": { "@types/node": "*", @@ -21184,12 +21397,12 @@ } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -21198,9 +21411,9 @@ } }, "jest-worker": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.1.tgz", - "integrity": "sha512-R5IE3qSGz+QynJx8y+ICEkdI2OJ3RJjRQVEyCcFAd3yVhQSEtquziPO29Mlzgn07LOVE8u8jhJ1FqcwegiXWOw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { "@types/node": "*", @@ -21231,12 +21444,12 @@ "dev": true }, "pretty-format": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.1.tgz", - "integrity": "sha512-MeqqsP5PYcRBbGMvwzsyBdmAJ4EFX7pWFyl7x4+dMVg5pE0ZDdBIvEH2ergvIO+Gvwv1wh64YuOY9y5LuyY/GA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^17.0.1" @@ -21371,50 +21584,50 @@ } }, "jest-watcher": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.1.tgz", - "integrity": "sha512-0LBIPPncNi9CaLKK15bnxyd2E8OMl4kJg0PTiNOI+MXztXw1zVdtX/x9Pr6pXaQYps+eS/ts43O4+HByZ7yJSw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", "dev": true, "requires": { - "@jest/test-result": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^26.6.1", + "jest-util": "^26.6.2", "string-length": "^4.0.1" }, "dependencies": { "@jest/console": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.1.tgz", - "integrity": "sha512-cjqcXepwC5M+VeIhwT6Xpi/tT4AiNzlIx8SMJ9IihduHnsSrnWNvTBfKIpmqOOCNOPqtbBx6w2JqfoLOJguo8g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^26.6.1", - "jest-util": "^26.6.1", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", "slash": "^3.0.0" } }, "@jest/test-result": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.1.tgz", - "integrity": "sha512-wqAgIerIN2gSdT2A8WeA5+AFh9XQBqYGf8etK143yng3qYd0mF0ie2W5PVmgnjw4VDU6ammI9NdXrKgNhreawg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, "requires": { - "@jest/console": "^26.6.1", - "@jest/types": "^26.6.1", + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/types": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.1.tgz", - "integrity": "sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -21448,6 +21661,12 @@ "type-fest": "^0.11.0" } }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -21519,28 +21738,29 @@ "dev": true }, "jest-message-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.1.tgz", - "integrity": "sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.2" } }, "jest-util": { - "version": "26.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.1.tgz", - "integrity": "sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.1", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -21558,6 +21778,24 @@ "picomatch": "^2.0.5" } }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -21694,9 +21932,9 @@ "dev": true }, "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", + "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", "dev": true } } @@ -22026,6 +22264,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, + "lodash-es": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", + "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==", + "dev": true + }, "lodash._baseisequal": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz", @@ -23092,9 +23336,9 @@ } }, "metro-react-native-babel-preset": { - "version": "0.63.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.63.0.tgz", - "integrity": "sha512-iTM6V/hzqTd2dg0LHtD4f/TU+d4A7MFiMPUmIYDb0OZmCq6avfcxHQTXk/ZNbAr+eRoN/owx9OIkjt/CvG4vUA==", + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", + "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", "dev": true, "requires": { "@babel/core": "^7.0.0", @@ -23517,9 +23761,9 @@ "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" }, "moment-timezone": { - "version": "0.5.31", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.31.tgz", - "integrity": "sha512-+GgHNg8xRhMXfEbv81iDtrVeTcWt0kWmTEY1XQK14dICTXnWJnT0dxdlPspwqF3keKMVPXwayEsk1DI0AA/jdA==", + "version": "0.5.32", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.32.tgz", + "integrity": "sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA==", "requires": { "moment": ">= 2.9.0" } @@ -23599,9 +23843,9 @@ "optional": true }, "nanoid": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.13.tgz", - "integrity": "sha512-oYL7jWZUdScASxYOrcwE8EvISFGzO3/1g+t56vCyR0s2nrpmBcOc7hTAFJaVf6HMyEPJrnNelnjRnMN6KZnCPA==" + "version": "3.1.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.16.tgz", + "integrity": "sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w==" }, "nanomatch": { "version": "1.2.13", @@ -23682,9 +23926,9 @@ } }, "nock": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.0.4.tgz", - "integrity": "sha512-alqTV8Qt7TUbc74x1pKRLSENzfjp4nywovcJgi/1aXDiUxXdt7TkruSTF5MDWPP7UoPVgea4F9ghVdmX0xxnSA==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.0.5.tgz", + "integrity": "sha512-1ILZl0zfFm2G4TIeJFW0iHknxr2NyA+aGCMTjDVUsBY4CkMRispF1pfIYkTRdAR/3Bg+UzdEuK0B6HczMQZcCg==", "dev": true, "requires": { "debug": "^4.1.0", @@ -25140,13 +25384,13 @@ } }, "prompts": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", - "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", "dev": true, "requires": { "kleur": "^3.0.3", - "sisteransi": "^1.0.4" + "sisteransi": "^1.0.5" } }, "prop-types": { @@ -25296,9 +25540,9 @@ "dev": true }, "query-string": { - "version": "6.13.6", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.13.6.tgz", - "integrity": "sha512-/WWZ7d9na6s2wMEGdVCVgKWE9Rt7nYyNIf7k8xmHXcesPMlEzicWo3lbYwHyA4wBktI2KrXxxZeACLbE84hvSQ==", + "version": "6.13.7", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.13.7.tgz", + "integrity": "sha512-CsGs8ZYb39zu0WLkeOhe0NMePqgYdAuCqxOYKDR5LVCytDZYMGx3Bb+xypvQvPHVPijRXB0HZNFllCzHRe4gEA==", "requires": { "decode-uri-component": "^0.2.0", "split-on-first": "^1.0.0", @@ -25446,13 +25690,14 @@ } }, "react-color": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.18.1.tgz", - "integrity": "sha512-X5XpyJS6ncplZs74ak0JJoqPi+33Nzpv5RYWWxn17bslih+X7OlgmfpmGC1fNvdkK7/SGWYf1JJdn7D2n5gSuQ==", + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", + "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", "dev": true, "requires": { "@icons/material": "^0.2.4", - "lodash": "^4.17.11", + "lodash": "^4.17.15", + "lodash-es": "^4.17.15", "material-colors": "^1.2.1", "prop-types": "^15.5.10", "reactcss": "^1.2.0", @@ -25985,14 +26230,14 @@ "dev": true }, "react-native-device-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-7.0.2.tgz", - "integrity": "sha512-3jzEzzX0Zo5rm+fClPFp3OGUnRPjK0w4X6RCNZtuaNbwMG+Vm3BLcU69dv+UfkYMrCo5JSKV6lA2fG25qq2tuA==" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-7.1.0.tgz", + "integrity": "sha512-H0fQ9fi6DNq85SUmJK8Opo8twHKXKp86FI4jL1Abg2tH6CjVbQ871QibD12ZMjKLMy4kKHL7BRxNEPUcI79JNg==" }, "react-native-document-picker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/react-native-document-picker/-/react-native-document-picker-4.0.0.tgz", - "integrity": "sha512-tjIOBBcyjv4j5E1MDL2OvEKNpXxQybLNkjjfpTyDUzek7grZ5eOvSlp6i/Y3EfuIGLByeaw++9R1SZtOij6R7w==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/react-native-document-picker/-/react-native-document-picker-4.1.0.tgz", + "integrity": "sha512-tHYNng9GrnVrOoLk9K2j+T1xa8gAfC2Mk2dbJq32QBYD3zkHGMkFYGd2FZt0nuYxCBnd768tOQWuEZXwXM1tsg==" }, "react-native-dotenv": { "version": "2.4.2", @@ -26038,14 +26283,14 @@ } }, "react-native-exception-handler": { - "version": "2.10.8", - "resolved": "https://registry.npmjs.org/react-native-exception-handler/-/react-native-exception-handler-2.10.8.tgz", - "integrity": "sha512-ZN+jwpADRkCUNdad/50k0mZdMoICGrGdtaxgvRU+pNcWRRBAXJhuo4+jY0eQaoVpx1ghycGE6tBu9ka8gL2NOQ==" + "version": "2.10.9", + "resolved": "https://registry.npmjs.org/react-native-exception-handler/-/react-native-exception-handler-2.10.9.tgz", + "integrity": "sha512-V1SJWHzhGUnFWTQKK5dk9yz+Ybkl1wSFWgY6saPkZomYiB9120FdeejJ5NdAio1sH75+op9RpC1w9KbHg+1zFA==" }, "react-native-fast-image": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.3.2.tgz", - "integrity": "sha512-AJ0b4BEswRwa0bh4SibYUtXszEiaO88Lf4CZ1ib+t5ZfkAgsMk9Liv3L0LYnDblMJmSeGTr1+2ViIM8F2vamjg==" + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.3.4.tgz", + "integrity": "sha512-LpzAdjUphihUpVEBn5fEv5AILe55rHav0YiZroPZ1rumKDhAl4u2cG01ku2Pb7l8sayjTsNu7FuURAlXUUDsow==" }, "react-native-file-viewer": { "version": "2.1.4", @@ -26089,9 +26334,9 @@ "integrity": "sha512-4UHu+zOyDT570r5mIbjH6h1iMrKIq/qfsKiAVUEZwncVegh0usJiEYNyJw4CEVwNeehmye/ia5sLDsa+kzIE4g==" }, "react-native-iphone-x-helper": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.0.tgz", - "integrity": "sha512-+/bcZWFeZt0xSS/+3CHM5K7qPL4vDO/3ARLIowzFpUPGZiPsv9+NET+XNqqseRYwFJwYMmtX+Q4TZKxAVy09ew==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz", + "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==" }, "react-native-keyboard-aware-scrollview": { "version": "2.1.0", @@ -26119,14 +26364,14 @@ "integrity": "sha512-36cYGZGCG82pMiVJbQa5WMA93khP4v5JqLutFkMyB/eRpCULHmojNIBlbUPIY9SCeN4sg5VBRFTVGCtTg2r2kA==" }, "react-native-localize": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-1.4.2.tgz", - "integrity": "sha512-LAUFsgcVHHJkU6AYjEDi9e6fJfahrep4IBXPNREKzG9uvHhjXno0Lv8TKNRMzrx6wGntpM/1bxs5pSTstpKllg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-2.0.0.tgz", + "integrity": "sha512-D2S4JZ+aQle7qpSG3pg3kpqETwbr2Ikz9LL7VcmACMm+dQd+TTKGU5+zQjqR88UQcxJTUssuCF7IgoZC2KgwFw==" }, "react-native-mmkv-storage": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/react-native-mmkv-storage/-/react-native-mmkv-storage-0.3.7.tgz", - "integrity": "sha512-XD26iejqNhwScrV/cm4eqTKz51k9fHmR95e7xrTPVGRMzoffscu4LIitLcx1h4ed1uEr3IXs6rPd/p2ikJI7MA==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/react-native-mmkv-storage/-/react-native-mmkv-storage-0.4.1.tgz", + "integrity": "sha512-GtmozkwYFWbYbYzng6I0MNY1raWfTUJatO5UcLTu6kTlJ1qF2mSWbJ4ua9GeI+muebFyuyt5hVfqbXCEYfy9vA==" }, "react-native-modal": { "version": "11.5.6", @@ -26158,9 +26403,9 @@ } }, "react-native-navigation": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/react-native-navigation/-/react-native-navigation-7.1.0.tgz", - "integrity": "sha512-Ub5eegREee2kyI8OXAzPXAe9dJgVBpj8k3Ni4HfzA2D3+xVGwvskCmKkIJm2xU/i1GcM9TdzoloB1JHsAZl6Qw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/react-native-navigation/-/react-native-navigation-7.3.0.tgz", + "integrity": "sha512-dfC2r/9u7L6rDDV/KTFj0io+4IJEC4Ec/4TPLqhR1DUGx0b3R7yFbnNFWTUs3azRwFua9kYFVsrzCP9aFoqBng==", "requires": { "hoist-non-react-statics": "3.x.x", "lodash": "4.17.x", @@ -26185,25 +26430,9 @@ } }, "react-native-notifications": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/react-native-notifications/-/react-native-notifications-2.1.7.tgz", - "integrity": "sha512-m9jfpobP1BpqG2w6pN2kKzKJt2bqrLIRS3QAuH0MU0dpRwib/4ehaAUKOiFj+xVCtuKHALpceb97FHuA0i4dkw==", - "requires": { - "core-js": "^1.0.0", - "uuid": "^2.0.3" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" - } - } + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/react-native-notifications/-/react-native-notifications-3.4.0.tgz", + "integrity": "sha512-6eDwwfuw8jdHVUOd+gEbbvM4rlLGwNhPR0N80k+3Vd/ywAZhR915H9oRveq8yUS+28jCJvzGiDwaT2Dt9pvzcw==" }, "react-native-passcode-status": { "version": "1.1.2", @@ -26225,17 +26454,17 @@ } }, "react-native-reanimated": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-1.13.1.tgz", - "integrity": "sha512-3sF46jts9MbktgIasf0sTM8uhOYO5a5Q3YyQ4X1jjSE82n/fY2nW3XTFsLGfLEpK2ir4XSDhQWVgFHazaXZTww==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-1.13.2.tgz", + "integrity": "sha512-O+WhgxSjOIzcVdAAvx+h2DY331Ek1knKlaq+jsNLpC1fhRy9XTdOObovgob/aF2ve9uJfPEawCx8381g/tUJZQ==", "requires": { "fbjs": "^1.0.0" } }, "react-native-redash": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/react-native-redash/-/react-native-redash-14.2.4.tgz", - "integrity": "sha512-/1R9UxXv3ffKcrbxolqa2B247Cgd3ikyEm2q1VlBng77Es6PAD4LAOXQ83pBavvwNfOsbhF3ebkbMpJcLaVt3Q==", + "version": "15.11.1", + "resolved": "https://registry.npmjs.org/react-native-redash/-/react-native-redash-15.11.1.tgz", + "integrity": "sha512-chQkd9t4gecqEz5Gr7D+bl3q5eG2hhHyadO7QT5l893abLFkRHDGY9YtEGwkR/j050TQl5A1KdxuCJEzxhogQw==", "requires": { "abs-svg-path": "^0.1.1", "normalize-svg-path": "^1.0.1", @@ -26262,14 +26491,14 @@ } }, "react-native-safe-area-context": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.1.8.tgz", - "integrity": "sha512-9gUlsDZ96QwT9AKzA6aVWM/NX5rlJgauZ9HgCDVzKbe29UQYT1740QJnnaI2GExmkFGp6o7ZLNhCXZW95eYVFA==" + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.1.9.tgz", + "integrity": "sha512-wmcGbdyE/vBSL5IjDPReoJUEqxkZsywZw5gPwsVUV1NBpw5eTIdnL6Y0uNKHE25Z661moxPHQz6kwAkYQyorxA==" }, "react-native-screens": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-2.11.0.tgz", - "integrity": "sha512-vJzJE3zI1XUtqthrX3Dh2TBQWB+xFyaGhF52KBq9FjJUN5ws4xpLZJxBWa1KbGV3DilmcSZ4jmZR5LGordwE7w==" + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-2.15.0.tgz", + "integrity": "sha512-qTSQPy0WKHtlb8xt5gY0Gt6sdvfQUQAnFSqgsggW9UEvySbkHzpqOrOYNA79Ca8oXO0dCFwp6X8buIiDefa7+Q==" }, "react-native-section-list-get-item-layout": { "version": "2.2.3", @@ -26277,9 +26506,9 @@ "integrity": "sha512-fzCW5SiYP6qCZyDHebaElHonIFr8NFrZK9JDkxFLnpxMJih4d+HQ4rHyOs0Z4Gb/FjyCVbRH7RtEnjeQ0XffMg==" }, "react-native-share": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/react-native-share/-/react-native-share-3.8.1.tgz", - "integrity": "sha512-LYTiwpdB2OksgfGM2xFwpk6mUUD2vyU4AOh3D29vHESHIedfRU+8CBBdZaqYWY04NM9GrM4W6S3u3iaHSKO59g==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/react-native-share/-/react-native-share-4.1.0.tgz", + "integrity": "sha512-ytkgi9UsjQviKgWKuniApomB3opjydxPKnrApBF+SPMnQFVVDlH5EyHR6rK+qxMtIAcspb7ylNPj3KzgO+YCrg==" }, "react-native-slider": { "version": "0.11.0", @@ -26721,15 +26950,15 @@ } }, "react-redux": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.1.tgz", - "integrity": "sha512-T+VfD/bvgGTUA74iW9d2i5THrDQWbweXP0AVNI8tNd1Rk5ch1rnMiJkDD67ejw7YBKM4+REvcvqRuWJb7BLuEg==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.2.tgz", + "integrity": "sha512-8+CQ1EvIVFkYL/vu6Olo7JFLWop1qRUeb46sGtIMDCSpgwPQq8fPLpirIB0iTqFe9XYEFPHssdX8/UwN6pAkEA==", "requires": { - "@babel/runtime": "^7.5.5", - "hoist-non-react-statics": "^3.3.0", + "@babel/runtime": "^7.12.1", + "hoist-non-react-statics": "^3.3.2", "loose-envify": "^1.4.0", "prop-types": "^15.7.2", - "react-is": "^16.9.0" + "react-is": "^16.13.1" }, "dependencies": { "hoist-non-react-statics": { @@ -26801,9 +27030,9 @@ } }, "react-textarea-autosize": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.2.0.tgz", - "integrity": "sha512-grajUlVbkx6VdtSxCgzloUIphIZF5bKr21OYMceWPKkniy7H0mRAT/AXPrRtObAe+zUePnNlBwUc4ivVjUGIjw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.0.tgz", + "integrity": "sha512-3GLWFAan2pbwBeoeNDoqGmSbrShORtgWfaWX0RJDivsUrpShh01saRM5RU/i4Zmf+whpBVEY5cA90Eq8Ub1N3w==", "dev": true, "requires": { "@babel/runtime": "^7.10.2", @@ -27513,9 +27742,9 @@ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", "dev": true }, "run-queue": { @@ -29027,9 +29256,9 @@ "dev": true }, "ts-jest": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.1.tgz", - "integrity": "sha512-F4aFq01aS6mnAAa0DljNmKr/Kk9y4HVZ1m6/rtJ0ED56cuxINGq3Q9eVAh+z5vcYKe5qnTMvv90vE8vUMFxomg==", + "version": "26.4.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.4.tgz", + "integrity": "sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg==", "dev": true, "requires": { "@types/jest": "26.x", @@ -29046,9 +29275,9 @@ }, "dependencies": { "@jest/types": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.0.tgz", - "integrity": "sha512-8pDeq/JVyAYw7jBGU83v8RMYAkdrRxLG3BGnAJuqaQAUd6GWBmND2uyl+awI88+hit48suLoLjNFtR+ZXxWaYg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -29132,12 +29361,12 @@ "dev": true }, "jest-util": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.0.tgz", - "integrity": "sha512-/cUGqcnKeZMjvTQLfJo65nBOEZ/k0RB/8usv2JpfYya05u0XvBmKkIH5o5c4nCh9DD61B1YQjMGGqh1Ha0aXdg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/types": "^26.6.0", + "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -29180,9 +29409,9 @@ } }, "yargs-parser": { - "version": "20.2.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.3.tgz", - "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==", + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } } @@ -29283,9 +29512,9 @@ } }, "typescript": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", - "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", + "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", "dev": true }, "ua-parser-js": { @@ -29515,24 +29744,24 @@ "dev": true }, "use-composed-ref": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.0.0.tgz", - "integrity": "sha512-RVqY3NFNjZa0xrmK3bIMWNmQ01QjKPDc7DeWR3xa/N8aliVppuutOE5bZzPkQfvL+5NRWMMp0DJ99Trd974FIw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz", + "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==", "dev": true, "requires": { "ts-essentials": "^2.0.3" } }, "use-isomorphic-layout-effect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.0.0.tgz", - "integrity": "sha512-JMwJ7Vd86NwAt1jH7q+OIozZSIxA4ND0fx6AsOe2q1H8ooBUp5aN6DvVCqZiIaYU6JaMRJGyR0FO7EBCIsb/Rg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.0.tgz", + "integrity": "sha512-kady5Z1O1qx5RitodCCKbpJSVEtECXYcnBnb5Q48Bz5V6gBmTu85ZcGdVwVFs8+DaOurNb/L5VdGHoQRMknghw==", "dev": true }, "use-latest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.1.0.tgz", - "integrity": "sha512-gF04d0ZMV3AMB8Q7HtfkAWe+oq1tFXP6dZKwBHQF5nVXtGsh2oAYeeqma5ZzxtlpOcW8Ro/tLcfmEodjDeqtuw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", + "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", "dev": true, "requires": { "use-isomorphic-layout-effect": "^1.0.0" @@ -29616,9 +29845,9 @@ "dev": true }, "v8-to-istanbul": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-6.0.1.tgz", - "integrity": "sha512-PzM1WlqquhBvsV+Gco6WSFeg1AGdD53ccMRkFeyHRE/KRZaVacPOmQYP3EeVgDBtKD2BJ8kgynBQ5OtKiHCH+w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", + "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -30676,9 +30905,9 @@ }, "dependencies": { "camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", - "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, "decamelize": { diff --git a/package.json b/package.json index f810cad98..a173a4818 100644 --- a/package.json +++ b/package.json @@ -7,29 +7,29 @@ "license": "Apache 2.0", "private": true, "dependencies": { - "@babel/runtime": "7.12.1", + "@babel/runtime": "7.12.5", "@react-native-community/async-storage": "1.12.1", "@react-native-community/cameraroll": "4.0.1", - "@react-native-community/clipboard": "1.5.0", + "@react-native-community/clipboard": "1.5.1", "@react-native-community/masked-view": "0.1.10", "@react-native-community/netinfo": "5.9.7", - "@react-navigation/native": "5.7.6", - "@react-navigation/stack": "5.9.3", + "@react-navigation/native": "5.8.9", + "@react-navigation/stack": "5.12.6", "@rudderstack/rudder-sdk-react-native": "1.0.3", - "@sentry/react-native": "1.9.0", + "@sentry/react-native": "2.0.0", "analytics-react-native": "1.2.0", "commonmark": "github:mattermost/commonmark.js#f6ab98dede6ce4b4e7adea140ac77249bfb2d6ce", "commonmark-react-renderer": "github:mattermost/commonmark-react-renderer#3a2ac19cab725ad28b170fdc1d397dddedcf87eb", - "core-js": "3.6.5", + "core-js": "3.7.0", "deep-equal": "2.0.4", "deepmerge": "4.2.2", "emoji-regex": "9.2.0", "form-data": "3.0.0", - "fuse.js": "6.4.2", + "fuse.js": "6.4.3", "intl": "1.2.5", "jail-monkey": "2.3.3", "mime-db": "1.45.0", - "moment-timezone": "0.5.31", + "moment-timezone": "0.5.32", "prop-types": "15.7.2", "react": "16.13.1", "react-intl": "2.8.0", @@ -39,11 +39,11 @@ "react-native-button": "3.0.1", "react-native-calendars": "1.403.0", "react-native-cookies": "github:mattermost/react-native-cookies#b35bafc388ae09c83bd875e887daf6a0755e0b40", - "react-native-device-info": "7.0.2", - "react-native-document-picker": "4.0.0", + "react-native-device-info": "7.1.0", + "react-native-document-picker": "4.1.0", "react-native-elements": "2.3.2", - "react-native-exception-handler": "2.10.8", - "react-native-fast-image": "8.3.2", + "react-native-exception-handler": "2.10.9", + "react-native-fast-image": "8.3.4", "react-native-file-viewer": "2.1.4", "react-native-gesture-handler": "1.8.0", "react-native-haptic-feedback": "1.11.0", @@ -54,19 +54,19 @@ "react-native-keychain": "4.0.5", "react-native-linear-gradient": "2.5.6", "react-native-local-auth": "1.6.0", - "react-native-localize": "1.4.2", - "react-native-mmkv-storage": "0.3.7", - "react-native-navigation": "7.1.0", - "react-native-notifications": "2.1.7", + "react-native-localize": "2.0.0", + "react-native-mmkv-storage": "0.4.1", + "react-native-navigation": "7.3.0", + "react-native-notifications": "3.4.0", "react-native-passcode-status": "1.1.2", "react-native-permissions": "2.2.2", - "react-native-reanimated": "1.13.1", - "react-native-redash": "14.2.4", + "react-native-reanimated": "1.13.2", + "react-native-redash": "15.11.1", "react-native-safe-area": "0.5.1", - "react-native-safe-area-context": "3.1.8", - "react-native-screens": "2.11.0", + "react-native-safe-area-context": "3.1.9", + "react-native-screens": "2.15.0", "react-native-section-list-get-item-layout": "2.2.3", - "react-native-share": "3.8.1", + "react-native-share": "4.1.0", "react-native-slider": "0.11.0", "react-native-status-bar-size": "0.3.3", "react-native-svg": "12.1.0", @@ -74,7 +74,7 @@ "react-native-video": "5.1.0-alpha8", "react-native-webview": "github:mattermost/react-native-webview#b5e22940a613869d3999feac9451ee65352f4fbe", "react-native-youtube": "2.0.1", - "react-redux": "7.2.1", + "react-redux": "7.2.2", "redux": "4.0.5", "redux-action-buffer": "1.2.0", "redux-batched-actions": "0.5.0", @@ -97,20 +97,20 @@ "@babel/preset-env": "7.12.1", "@babel/register": "7.12.1", "@react-native-community/eslint-config": "2.0.0", - "@storybook/addon-knobs": "6.0.26", + "@storybook/addon-knobs": "6.0.28", "@storybook/addon-ondevice-knobs": "5.3.23", "@storybook/react-native": "5.3.23", "@storybook/react-native-server": "5.3.23", "@testing-library/react-native": "7.1.0", - "@types/enzyme": "3.10.7", + "@types/enzyme": "3.10.8", "@types/enzyme-adapter-react-16": "1.0.6", "@types/jest": "26.0.15", "@types/moment-timezone": "0.5.30", - "@types/react": "16.9.53", - "@types/react-native": "0.63.30", + "@types/react": "16.9.56", + "@types/react-native": "0.63.35", "@types/react-native-share": "3.3.0", "@types/react-native-video": "5.0.3", - "@types/react-redux": "7.1.9", + "@types/react-redux": "7.1.11", "@types/react-test-renderer": "16.9.3", "@types/shallow-equals": "1.0.0", "@types/tinycolor2": "1.4.2", @@ -118,33 +118,33 @@ "@typescript-eslint/eslint-plugin": "3.10.1", "@typescript-eslint/parser": "3.10.1", "babel-eslint": "10.1.0", - "babel-jest": "26.6.1", - "babel-loader": "8.1.0", + "babel-jest": "26.6.3", + "babel-loader": "8.2.1", "babel-plugin-module-resolver": "4.0.0", "babel-plugin-transform-remove-console": "6.9.4", "deep-freeze": "0.0.1", - "detox": "17.10.3", + "detox": "17.12.0", "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.5", "enzyme-to-json": "3.6.1", - "eslint": "7.11.0", + "eslint": "7.13.0", "eslint-plugin-header": "3.1.0", - "eslint-plugin-jest": "24.1.0", + "eslint-plugin-jest": "24.1.3", "eslint-plugin-mattermost": "github:mattermost/eslint-plugin-mattermost#070ce792d105482ffb2b27cfc0b7e78b3d20acee", "eslint-plugin-react": "7.21.5", "harmony-reflect": "1.6.1", "husky": "4.3.0", "isomorphic-fetch": "3.0.0", - "jest": "26.6.1", - "jest-cli": "26.6.1", + "jest": "26.6.3", + "jest-cli": "26.6.3", "jest-enzyme": "7.1.2", "jetifier": "1.6.6", "jsdom-global": "3.0.2", - "metro-react-native-babel-preset": "0.63.0", + "metro-react-native-babel-preset": "0.64.0", "mmjstool": "github:mattermost/mattermost-utilities#519b99a4e51e6c67a0dbd46a6efdff27dc835aaa", "mock-async-storage": "2.2.0", "mock-socket": "9.0.3", - "nock": "13.0.4", + "nock": "13.0.5", "nyc": "15.1.0", "patch-package": "6.2.2", "react-dom": "16.13.1", @@ -154,8 +154,8 @@ "redux-mock-store": "1.5.4", "redux-persist-node-storage": "2.0.0", "socketcluster": "16.0.1", - "ts-jest": "26.4.1", - "typescript": "4.0.3", + "ts-jest": "26.4.4", + "typescript": "4.0.5", "underscore": "1.11.0", "util": "0.12.3" }, diff --git a/packager/moduleNames.js b/packager/moduleNames.js index c2c628a23..067d918ba 100644 --- a/packager/moduleNames.js +++ b/packager/moduleNames.js @@ -18,12 +18,10 @@ module.exports = [ 'app/init/emm_provider.js', 'app/init/fetch.js', 'app/init/global_event_handler.js', - 'app/init/push_notifications.js', + 'app/init/push_notifications.ts', 'app/mattermost.js', 'app/mattermost_managed/index.js', 'app/mattermost_managed/mattermost-managed.android.js', - 'app/push_notifications/index.js', - 'app/push_notifications/push_notifications.android.js', 'app/screens/index.js', 'app/store/ephemeral_store.js', 'app/store/helpers.ts', diff --git a/packager/modules.android.js b/packager/modules.android.js index 505f8f5b2..797a92da1 100644 --- a/packager/modules.android.js +++ b/packager/modules.android.js @@ -18,12 +18,10 @@ module.exports = [ './node_modules/app/init/emm_provider.js', './node_modules/app/init/fetch.js', './node_modules/app/init/global_event_handler.js', - './node_modules/app/init/push_notifications.js', + './node_modules/app/init/push_notifications.ts', './node_modules/app/mattermost.js', './node_modules/app/mattermost_managed/index.js', './node_modules/app/mattermost_managed/mattermost-managed.android.js', - './node_modules/app/push_notifications/index.js', - './node_modules/app/push_notifications/push_notifications.android.js', './node_modules/app/screens/index.js', './node_modules/app/store/ephemeral_store.js', './node_modules/app/store/helpers.ts', diff --git a/packager/modules.ios.js b/packager/modules.ios.js index 6f0686515..aeed1bf80 100644 --- a/packager/modules.ios.js +++ b/packager/modules.ios.js @@ -18,12 +18,10 @@ module.exports = [ './node_modules/app/init/emm_provider.js', './node_modules/app/init/fetch.js', './node_modules/app/init/global_event_handler.js', - './node_modules/app/init/push_notifications.js', + './node_modules/app/init/push_notifications.ts', './node_modules/app/mattermost.js', './node_modules/app/mattermost_managed/index.js', './node_modules/app/mattermost_managed/mattermost-managed.ios.js', - './node_modules/app/push_notifications/index.js', - './node_modules/app/push_notifications/push_notifications.ios.js', './node_modules/app/screens/index.js', './node_modules/app/store/ephemeral_store.js', './node_modules/app/store/helpers.ts', diff --git a/patches/mime-db+1.44.0.patch b/patches/mime-db+1.44.0.patch deleted file mode 100644 index 5d98f2e80..000000000 --- a/patches/mime-db+1.44.0.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/node_modules/mime-db/db.json b/node_modules/mime-db/db.json -index e69f352..b21d9da 100644 ---- a/node_modules/mime-db/db.json -+++ b/node_modules/mime-db/db.json -@@ -2004,7 +2004,7 @@ - }, - "application/vnd.apple.keynote": { - "source": "iana", -- "extensions": ["keynote"] -+ "extensions": ["key"] - }, - "application/vnd.apple.mpegurl": { - "source": "iana", diff --git a/patches/react-native-device-info+7.0.2.patch b/patches/react-native-device-info+7.1.0.patch similarity index 100% rename from patches/react-native-device-info+7.0.2.patch rename to patches/react-native-device-info+7.1.0.patch diff --git a/patches/react-native-fast-image+8.3.2.patch b/patches/react-native-fast-image+8.3.4.patch similarity index 100% rename from patches/react-native-fast-image+8.3.2.patch rename to patches/react-native-fast-image+8.3.4.patch diff --git a/patches/react-native-localize+2.0.0.patch b/patches/react-native-localize+2.0.0.patch new file mode 100644 index 000000000..4af33790c --- /dev/null +++ b/patches/react-native-localize+2.0.0.patch @@ -0,0 +1,41 @@ +diff --git a/node_modules/react-native-localize/android/src/main/java/com/zoontek/rnlocalize/RNLocalizeModule.java b/node_modules/react-native-localize/android/src/main/java/com/zoontek/rnlocalize/RNLocalizeModule.java +index 73fcd14..8c9e447 100644 +--- a/node_modules/react-native-localize/android/src/main/java/com/zoontek/rnlocalize/RNLocalizeModule.java ++++ b/node_modules/react-native-localize/android/src/main/java/com/zoontek/rnlocalize/RNLocalizeModule.java +@@ -48,7 +48,6 @@ public class RNLocalizeModule extends ReactContextBaseJavaModule implements Life + private final List USES_RTL_LAYOUT = + Arrays.asList("ar", "ckb", "fa", "he", "ks", "lrc", "mzn", "ps", "ug", "ur", "yi"); + +- private @Nullable final BroadcastReceiver mBroadcastReceiver; + private boolean mMainActivityVisible = true; + private boolean mEmitChangeOnResume = false; + +@@ -62,7 +61,7 @@ public class RNLocalizeModule extends ReactContextBaseJavaModule implements Life + filter.addAction(Intent.ACTION_TIME_CHANGED); + filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); + +- mBroadcastReceiver = new BroadcastReceiver() { ++ BroadcastReceiver receiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction() != null) { +@@ -72,7 +71,7 @@ public class RNLocalizeModule extends ReactContextBaseJavaModule implements Life + }; + + reactContext.addLifecycleEventListener(this); +- reactContext.registerReceiver(mBroadcastReceiver, filter); ++ reactContext.registerReceiver(receiver, filter); + } + + @Override +@@ -112,9 +111,7 @@ public class RNLocalizeModule extends ReactContextBaseJavaModule implements Life + } + + @Override +- public void onHostDestroy() { +- getReactApplicationContext().unregisterReceiver(mBroadcastReceiver); +- } ++ public void onHostDestroy() {} + + private void emitLocalizationDidChange() { + if (getReactApplicationContext().hasActiveCatalystInstance()) { diff --git a/patches/react-native-mmkv-storage+0.3.7.patch b/patches/react-native-mmkv-storage+0.4.1.patch similarity index 87% rename from patches/react-native-mmkv-storage+0.3.7.patch rename to patches/react-native-mmkv-storage+0.4.1.patch index 6f72f2fde..eae9c2fbd 100644 --- a/patches/react-native-mmkv-storage+0.3.7.patch +++ b/patches/react-native-mmkv-storage+0.4.1.patch @@ -1,19 +1,22 @@ diff --git a/node_modules/react-native-mmkv-storage/ios/MMKVStorage.m b/node_modules/react-native-mmkv-storage/ios/MMKVStorage.m -index fe0ee2b..5bdde1d 100644 +index 2875bda..8235771 100644 --- a/node_modules/react-native-mmkv-storage/ios/MMKVStorage.m +++ b/node_modules/react-native-mmkv-storage/ios/MMKVStorage.m -@@ -45,7 +45,10 @@ - (id)init +@@ -45,10 +45,10 @@ - (id)init { self = [super init]; if (self) { -- [MMKV initialize]; +- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); +- NSString *libraryPath = (NSString *) [paths firstObject]; +- NSString *rootDir = [libraryPath stringByAppendingPathComponent:@"mmkv"]; +- [MMKV initializeMMKV:rootDir]; + NSBundle *bundle = [NSBundle mainBundle]; + NSString *APP_GROUP_ID = [bundle objectForInfoDictionaryKey:@"AppGroupIdentifier"]; + NSString *groupDir = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:APP_GROUP_ID].path; + [MMKV initializeMMKV:nil groupDir:groupDir logLevel:MMKVLogInfo]; + secureStorage = [[SecureStorage alloc]init]; IdStore = [[IDStore alloc] initWithMMKV:[MMKV mmkvWithID:@"mmkvIdStore"]]; - mmkvMap = [NSMutableDictionary dictionary]; diff --git a/node_modules/react-native-mmkv-storage/ios/SecureStorage.m b/node_modules/react-native-mmkv-storage/ios/SecureStorage.m index 70f3a01..07e1af0 100644 --- a/node_modules/react-native-mmkv-storage/ios/SecureStorage.m diff --git a/patches/react-native-navigation+7.1.0.patch b/patches/react-native-navigation+7.3.0.patch similarity index 74% rename from patches/react-native-navigation+7.1.0.patch rename to patches/react-native-navigation+7.3.0.patch index dc129deb9..1ffae3dac 100644 --- a/patches/react-native-navigation+7.1.0.patch +++ b/patches/react-native-navigation+7.3.0.patch @@ -44,27 +44,11 @@ index 3bfbc0b..cdb0d05 100644 } }); } -diff --git a/node_modules/react-native-navigation/lib/ios/RNNCommandsHandler.m b/node_modules/react-native-navigation/lib/ios/RNNCommandsHandler.m -index f7aba70..f8d3f38 100644 ---- a/node_modules/react-native-navigation/lib/ios/RNNCommandsHandler.m -+++ b/node_modules/react-native-navigation/lib/ios/RNNCommandsHandler.m -@@ -312,10 +312,9 @@ - (void)dismissAllModals:(NSDictionary *)mergeOptions commandId:(NSString*)comma - [CATransaction begin]; - [CATransaction setCompletionBlock:^{ - [self->_eventEmitter sendOnNavigationCommandCompletion:dismissAllModals commandId:commandId]; -- completion(); - }]; - RNNNavigationOptions* options = [[RNNNavigationOptions alloc] initWithDict:mergeOptions]; -- [_modalManager dismissAllModalsAnimated:[options.animations.dismissModal.enable getWithDefaultValue:YES] completion:nil]; -+ [_modalManager dismissAllModalsAnimated:[options.animations.dismissModal.enable getWithDefaultValue:YES] completion:completion]; - - [CATransaction commit]; - } diff --git a/node_modules/react-native-navigation/lib/ios/RNNViewLocation.m b/node_modules/react-native-navigation/lib/ios/RNNViewLocation.m -index f98f7a1..26ecb83 100644 +index f5187d9..d97e766 100644 --- a/node_modules/react-native-navigation/lib/ios/RNNViewLocation.m +++ b/node_modules/react-native-navigation/lib/ios/RNNViewLocation.m -@@ -31,11 +31,7 @@ - (CGFloat)getCornerRadius:(UIView *)view { +@@ -32,11 +32,7 @@ - (CGFloat)getClippedCornerRadius:(UIView *)view { - (CATransform3D)getTransform:(UIView *)view { if (view) { diff --git a/patches/react-native-notifications+2.1.7.patch b/patches/react-native-notifications+2.1.7.patch deleted file mode 100644 index 417e02ed8..000000000 --- a/patches/react-native-notifications+2.1.7.patch +++ /dev/null @@ -1,449 +0,0 @@ -diff --git a/node_modules/react-native-notifications/RNNotifications/RNNotificationsStore.m b/node_modules/react-native-notifications/RNNotifications/RNNotificationsStore.m -index d5e953a..08d4d46 100644 ---- a/node_modules/react-native-notifications/RNNotifications/RNNotificationsStore.m -+++ b/node_modules/react-native-notifications/RNNotifications/RNNotificationsStore.m -@@ -40,7 +40,9 @@ - (void)setPresentationCompletionHandler:(void (^)(UNNotificationPresentationOpt - - (void)completeAction:(NSString *)completionKey { - void (^completionHandler)() = (void (^)())[_actionCompletionHandlers valueForKey:completionKey]; - if (completionHandler) { -- completionHandler(); -+ dispatch_async(dispatch_get_main_queue(), ^{ -+ completionHandler(); -+ }); - [_actionCompletionHandlers removeObjectForKey:completionKey]; - } - } -diff --git a/node_modules/react-native-notifications/android/app/src/main/AndroidManifest.xml b/node_modules/react-native-notifications/android/app/src/main/AndroidManifest.xml -index 7053040..ad63eff 100644 ---- a/node_modules/react-native-notifications/android/app/src/main/AndroidManifest.xml -+++ b/node_modules/react-native-notifications/android/app/src/main/AndroidManifest.xml -@@ -11,6 +11,7 @@ - android:protectionLevel="signature" /> - - -+ - - - -@@ -29,7 +30,11 @@ - - -+ - - - -diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java -index 7b47aed..200cca8 100644 ---- a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java -+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java -@@ -99,12 +99,26 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements - pushNotification.onPostRequest(notificationId); - } - -+ @ReactMethod -+ public void scheduleLocalNotification(ReadableMap notificationPropsMap, int notificationId) { -+ Log.d(LOGTAG, "Native method invocation: scheduleLocalNotification"); -+ final Bundle notificationProps = Arguments.toBundle(notificationPropsMap); -+ final IPushNotification pushNotification = PushNotification.get(getReactApplicationContext().getApplicationContext(), notificationProps); -+ pushNotification.onScheduleRequest(notificationId); -+ } -+ - @ReactMethod - public void cancelLocalNotification(int notificationId) { - IPushNotificationsDrawer notificationsDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext()); - notificationsDrawer.onNotificationClearRequest(notificationId); - } - -+ @ReactMethod -+ public void cancelAllLocalNotifications() { -+ IPushNotificationsDrawer notificationDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext()); -+ notificationDrawer.onCancelAllLocalNotifications(); -+ } -+ - @ReactMethod - public void cancelDeliveredNotification(String tag, int notificationId) { - IPushNotificationsDrawer notificationsDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext()); -@@ -126,6 +140,6 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements - final Context appContext = getReactApplicationContext().getApplicationContext(); - final Intent tokenFetchIntent = new Intent(appContext, FcmInstanceIdRefreshHandlerService.class); - tokenFetchIntent.putExtra(extraFlag, true); -- appContext.startService(tokenFetchIntent); -+ FcmInstanceIdRefreshHandlerService.enqueueWork(appContext, tokenFetchIntent); - } - } -diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/helpers/ScheduleNotificationHelper.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/helpers/ScheduleNotificationHelper.java -new file mode 100644 -index 0000000..c35076d ---- /dev/null -+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/helpers/ScheduleNotificationHelper.java -@@ -0,0 +1,90 @@ -+package com.wix.reactnativenotifications.core.helpers; -+ -+import android.app.AlarmManager; -+import android.os.Build; -+import android.os.Bundle; -+import android.content.Context; -+import android.content.Intent; -+import android.app.PendingIntent; -+import android.content.SharedPreferences; -+import android.util.Log; -+ -+import com.wix.reactnativenotifications.core.notification.PushNotificationProps; -+import com.wix.reactnativenotifications.core.notification.PushNotificationPublisher; -+ -+import static com.wix.reactnativenotifications.Defs.LOGTAG; -+ -+public class ScheduleNotificationHelper { -+ public static ScheduleNotificationHelper sInstance; -+ public static final String PREFERENCES_KEY = "rn_push_notification"; -+ static final String NOTIFICATION_ID = "notificationId"; -+ -+ private final SharedPreferences scheduledNotificationsPersistence; -+ protected final Context mContext; -+ -+ private ScheduleNotificationHelper(Context context) { -+ this.mContext = context; -+ this.scheduledNotificationsPersistence = context.getSharedPreferences(ScheduleNotificationHelper.PREFERENCES_KEY, Context.MODE_PRIVATE); -+ } -+ -+ public static ScheduleNotificationHelper getInstance(Context context) { -+ if (sInstance == null) { -+ sInstance = new ScheduleNotificationHelper(context); -+ } -+ return sInstance; -+ } -+ -+ public PendingIntent createPendingNotificationIntent(Bundle bundle) { -+ Integer notificationId = Integer.valueOf(bundle.getString("id")); -+ Intent notificationIntent = new Intent(mContext, PushNotificationPublisher.class); -+ notificationIntent.putExtra(ScheduleNotificationHelper.NOTIFICATION_ID, notificationId); -+ notificationIntent.putExtras(bundle); -+ return PendingIntent.getBroadcast(mContext, notificationId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); -+ } -+ -+ public void schedulePendingNotificationIntent(PendingIntent intent, long fireDate) { -+ AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); -+ -+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { -+ alarmManager.setExact(AlarmManager.RTC_WAKEUP, fireDate, intent); -+ } else { -+ alarmManager.set(AlarmManager.RTC_WAKEUP, fireDate, intent); -+ } -+ } -+ -+ public void cancelScheduledNotificationIntent(PendingIntent intent) { -+ AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); -+ alarmManager.cancel(intent); -+ } -+ -+ public boolean savePreferences(String notificationId, PushNotificationProps notificationProps) { -+ SharedPreferences.Editor editor = scheduledNotificationsPersistence.edit(); -+ editor.putString(notificationId, notificationProps.toString()); -+ commit(editor); -+ -+ return scheduledNotificationsPersistence.contains(notificationId); -+ } -+ -+ public void removePreference(String notificationId) { -+ if (scheduledNotificationsPersistence.contains(notificationId)) { -+ // remove it from local storage -+ SharedPreferences.Editor editor = scheduledNotificationsPersistence.edit(); -+ editor.remove(notificationId); -+ commit(editor); -+ } else { -+ Log.w(LOGTAG, "Unable to find notification " + notificationId); -+ } -+ } -+ -+ public java.util.Set getPreferencesKeys() { -+ return scheduledNotificationsPersistence.getAll().keySet(); -+ } -+ -+ private static void commit(SharedPreferences.Editor editor) { -+ if (Build.VERSION.SDK_INT < 9) { -+ editor.commit(); -+ } else { -+ editor.apply(); -+ } -+ } -+} -\ No newline at end of file -diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/IPushNotification.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/IPushNotification.java -index 0d70024..47b962e 100644 ---- a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/IPushNotification.java -+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/IPushNotification.java -@@ -26,5 +26,20 @@ public interface IPushNotification { - */ - int onPostRequest(Integer notificationId); - -+ /** -+ * Handle a request to schedule this notification. -+ * -+ * @param notificationId The specific ID to associated with the notification. -+ */ -+ void onScheduleRequest(Integer notificationId); -+ -+ /** -+ * Handle a request to post this scheduled notification. -+ * -+ * @param notificationId The specific ID to associated with the notification. -+ * @return The ID assigned to the notification. -+ */ -+ int onPostScheduledRequest(Integer notificationId); -+ - PushNotificationProps asProps(); - } -diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java -index 524ff07..a9f28e0 100644 ---- a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java -+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java -@@ -1,5 +1,6 @@ - package com.wix.reactnativenotifications.core.notification; - -+import android.app.AlarmManager; - import android.app.Notification; - import android.app.NotificationChannel; - import android.app.NotificationManager; -@@ -20,7 +21,9 @@ import com.wix.reactnativenotifications.core.InitialNotificationHolder; - import com.wix.reactnativenotifications.core.JsIOHelper; - import com.wix.reactnativenotifications.core.NotificationIntentAdapter; - import com.wix.reactnativenotifications.core.ProxyService; -+import com.wix.reactnativenotifications.core.helpers.ScheduleNotificationHelper; - -+import static com.wix.reactnativenotifications.Defs.LOGTAG; - import static com.wix.reactnativenotifications.Defs.NOTIFICATION_OPENED_EVENT_NAME; - import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_EVENT_NAME; - import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_FOREGROUND_EVENT_NAME; -@@ -31,7 +34,7 @@ public class PushNotification implements IPushNotification { - final protected AppLifecycleFacade mAppLifecycleFacade; - final protected AppLaunchHelper mAppLaunchHelper; - final protected JsIOHelper mJsIOHelper; -- final protected PushNotificationProps mNotificationProps; -+ protected PushNotificationProps mNotificationProps; - final protected AppVisibilityListener mAppVisibilityListener = new AppVisibilityListener() { - @Override - public void onAppVisible() { -@@ -80,6 +83,41 @@ public class PushNotification implements IPushNotification { - return postNotification(notificationId); - } - -+ @Override -+ public void onScheduleRequest(Integer notificationId) { -+ Bundle bundle = mNotificationProps.asBundle(); -+ -+ if (bundle.getString("message") == null) { -+ Log.e(LOGTAG, "No message specified for the scheduled notification"); -+ return; -+ } -+ -+ double date = bundle.getDouble("fireDate"); -+ if (date == 0) { -+ Log.e(LOGTAG, "No date specified for the scheduled notification"); -+ return; -+ } -+ -+ ScheduleNotificationHelper helper = ScheduleNotificationHelper.getInstance(mContext); -+ String notificationIdStr = Integer.toString(notificationId); -+ boolean isSaved = helper.savePreferences(notificationIdStr, mNotificationProps); -+ if (!isSaved) { -+ Log.e(LOGTAG, "Failed to save preference for notificationId " + notificationIdStr); -+ } -+ -+ PendingIntent pendingIntent = helper.createPendingNotificationIntent(bundle); -+ long fireDate = (long) date; -+ helper.schedulePendingNotificationIntent(pendingIntent, fireDate); -+ } -+ -+ @Override -+ public int onPostScheduledRequest(Integer notificationId) { -+ ScheduleNotificationHelper helper = ScheduleNotificationHelper.getInstance(mContext); -+ helper.removePreference(String.valueOf(notificationId)); -+ -+ return postNotification(notificationId); -+ } -+ - @Override - public PushNotificationProps asProps() { - return mNotificationProps.copy(); -@@ -140,7 +178,9 @@ public class PushNotification implements IPushNotification { - } - - protected Notification buildNotification(PendingIntent intent) { -- return getNotificationBuilder(intent).build(); -+ Notification.Builder builder = getNotificationBuilder(intent); -+ Notification notification = builder.build(); -+ return notification; - } - - protected Notification.Builder getNotificationBuilder(PendingIntent intent) { -diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationPublisher.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationPublisher.java -new file mode 100644 -index 0000000..58ff887 ---- /dev/null -+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationPublisher.java -@@ -0,0 +1,27 @@ -+package com.wix.reactnativenotifications.core.notification; -+ -+import android.app.Application; -+import android.content.BroadcastReceiver; -+import android.content.Context; -+import android.content.Intent; -+import android.util.Log; -+ -+import static com.wix.reactnativenotifications.Defs.LOGTAG; -+ -+public class PushNotificationPublisher extends BroadcastReceiver { -+ final static String NOTIFICATION_ID = "notificationId"; -+ -+ @Override -+ public void onReceive(Context context, Intent intent) { -+ Log.d(LOGTAG, "Received scheduled notification intent"); -+ int notificationId = intent.getIntExtra(NOTIFICATION_ID, 0); -+ long currentTime = System.currentTimeMillis(); -+ -+ Application applicationContext = (Application) context.getApplicationContext(); -+ final IPushNotification pushNotification = PushNotification.get(applicationContext, intent.getExtras()); -+ -+ Log.i(LOGTAG, "PushNotificationPublisher: Prepare To Publish: " + notificationId + ", Now Time: " + currentTime); -+ -+ pushNotification.onPostScheduledRequest(notificationId); -+ } -+} -diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/IPushNotificationsDrawer.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/IPushNotificationsDrawer.java -index e22cd62..48aa1cd 100644 ---- a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/IPushNotificationsDrawer.java -+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/IPushNotificationsDrawer.java -@@ -11,4 +11,5 @@ public interface IPushNotificationsDrawer { - void onNotificationClearRequest(int id); - void onNotificationClearRequest(String tag, int id); - void onAllNotificationsClearRequest(); -+ void onCancelAllLocalNotifications(); - } -diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java -index dea6958..2c0f1c7 100644 ---- a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java -+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java -@@ -2,10 +2,16 @@ package com.wix.reactnativenotifications.core.notificationdrawer; - - import android.app.Activity; - import android.app.NotificationManager; -+import android.app.PendingIntent; - import android.content.Context; -+import android.os.Bundle; -+import android.util.Log; - - import com.wix.reactnativenotifications.core.AppLaunchHelper; - import com.wix.reactnativenotifications.core.InitialNotificationHolder; -+import com.wix.reactnativenotifications.core.helpers.ScheduleNotificationHelper; -+ -+import static com.wix.reactnativenotifications.Defs.LOGTAG; - - public class PushNotificationsDrawer implements IPushNotificationsDrawer { - -@@ -72,8 +78,41 @@ public class PushNotificationsDrawer implements IPushNotificationsDrawer { - notificationManager.cancelAll(); - } - -+ @Override -+ public void onCancelAllLocalNotifications() { -+ clearAll(); -+ cancelAllScheduledNotifications(); -+ } -+ - protected void clearAll() { - final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancelAll(); - } -+ -+ protected void cancelAllScheduledNotifications() { -+ Log.i(LOGTAG, "Cancelling all scheduled notifications"); -+ ScheduleNotificationHelper helper = ScheduleNotificationHelper.getInstance(mContext); -+ -+ for (String notificationId : helper.getPreferencesKeys()) { -+ cancelScheduledNotification(notificationId); -+ } -+ } -+ -+ protected void cancelScheduledNotification(String notificationId) { -+ Log.i(LOGTAG, "Cancelling scheduled notification: " + notificationId); -+ -+ ScheduleNotificationHelper helper = ScheduleNotificationHelper.getInstance(mContext); -+ -+ // Remove it from the alarm manger schedule -+ Bundle bundle = new Bundle(); -+ bundle.putString("id", notificationId); -+ PendingIntent pendingIntent = helper.createPendingNotificationIntent(bundle); -+ helper.cancelScheduledNotificationIntent(pendingIntent); -+ -+ helper.removePreference(notificationId); -+ -+ // Remove it from the notification center -+ final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); -+ notificationManager.cancel(Integer.parseInt(notificationId)); -+ } - } -diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/fcm/FcmInstanceIdRefreshHandlerService.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/fcm/FcmInstanceIdRefreshHandlerService.java -index dd2cc9a..f1ef15a 100644 ---- a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/fcm/FcmInstanceIdRefreshHandlerService.java -+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/fcm/FcmInstanceIdRefreshHandlerService.java -@@ -1,19 +1,22 @@ - package com.wix.reactnativenotifications.fcm; - --import android.app.IntentService; -+import android.support.annotation.NonNull; -+import android.support.v4.app.JobIntentService; -+import android.content.Context; - import android.content.Intent; - --public class FcmInstanceIdRefreshHandlerService extends IntentService { -+public class FcmInstanceIdRefreshHandlerService extends JobIntentService { - - public static String EXTRA_IS_APP_INIT = "isAppInit"; - public static String EXTRA_MANUAL_REFRESH = "doManualRefresh"; -+ static final int JOB_ID = 1000; - -- public FcmInstanceIdRefreshHandlerService() { -- super(FcmInstanceIdRefreshHandlerService.class.getSimpleName()); -+ public static void enqueueWork(Context context, Intent work) { -+ enqueueWork(context, FcmInstanceIdRefreshHandlerService.class, JOB_ID, work); - } - - @Override -- protected void onHandleIntent(Intent intent) { -+ protected void onHandleWork(@NonNull Intent intent) { - IFcmToken fcmToken = FcmToken.get(this); - if (fcmToken == null) { - return; -diff --git a/node_modules/react-native-notifications/lib/src/index.android.js b/node_modules/react-native-notifications/lib/src/index.android.js -index ac2fe5c..18bee18 100644 ---- a/node_modules/react-native-notifications/lib/src/index.android.js -+++ b/node_modules/react-native-notifications/lib/src/index.android.js -@@ -67,10 +67,23 @@ export class NotificationsAndroid { - return id; - } - -+ static scheduleLocalNotification(notification: Object) { -+ const id = Math.random() * 100000000 | 0; // Bitwise-OR forces value onto a 32bit limit -+ if (!notification.hasOwnProperty('id')) { -+ notification.id = id.toString(); -+ } -+ RNNotifications.scheduleLocalNotification(notification, id); -+ return id; -+ } -+ - static cancelLocalNotification(id) { - RNNotifications.cancelLocalNotification(id); - } - -+ static cancelAllLocalNotifications() { -+ RNNotifications.cancelAllLocalNotifications(); -+ } -+ - static cancelDeliveredNotification(tag, id) { - RNNotifications.cancelDeliveredNotification(tag, id); - } diff --git a/patches/react-native-notifications+3.4.0.patch b/patches/react-native-notifications+3.4.0.patch new file mode 100644 index 000000000..bc002f88e --- /dev/null +++ b/patches/react-native-notifications+3.4.0.patch @@ -0,0 +1,499 @@ +diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml b/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml +index abd988a..4ac4725 100644 +--- a/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml ++++ b/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml +@@ -3,6 +3,7 @@ + xmlns:android="http://schemas.android.com/apk/res/android" + package="com.wix.reactnativenotifications"> + ++ + + +