diff --git a/android/app/src/main/java/com/mattermost/rnbeta/MainApplication.java b/android/app/src/main/java/com/mattermost/rnbeta/MainApplication.java index 762834e93..a10249305 100644 --- a/android/app/src/main/java/com/mattermost/rnbeta/MainApplication.java +++ b/android/app/src/main/java/com/mattermost/rnbeta/MainApplication.java @@ -33,8 +33,6 @@ import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactMarker; -import com.facebook.react.bridge.ReactMarkerConstants; import com.facebook.react.bridge.WritableMap; import com.facebook.react.module.model.ReactModuleInfo; import com.facebook.react.module.model.ReactModuleInfoProvider; @@ -132,9 +130,6 @@ private final ReactNativeHost mReactNativeHost = SoLoader.init(this, /* native exopackage */ false); initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); - - // Uncomment to listen to react markers for build that has telemetry enabled - // addReactMarkerListener(); } @Override @@ -195,38 +190,6 @@ private final ReactNativeHost mReactNativeHost = return null; } - private void addReactMarkerListener() { - ReactMarker.addListener(new ReactMarker.MarkerListener() { - @Override - public void logMarker(ReactMarkerConstants name, @Nullable String tag, int instanceKey) { - if (name.toString() == ReactMarkerConstants.RELOAD.toString()) { - APP_START_TIME = System.currentTimeMillis(); - RELOAD = System.currentTimeMillis(); - } else if (name.toString() == ReactMarkerConstants.PROCESS_PACKAGES_START.toString()) { - PROCESS_PACKAGES_START = System.currentTimeMillis(); - } else if (name.toString() == ReactMarkerConstants.PROCESS_PACKAGES_END.toString()) { - PROCESS_PACKAGES_END = System.currentTimeMillis(); - } else if (name.toString() == ReactMarkerConstants.CONTENT_APPEARED.toString()) { - CONTENT_APPEARED = System.currentTimeMillis(); - ReactContext ctx = getRunningReactContext(); - - if (ctx != null) { - WritableMap map = Arguments.createMap(); - - map.putDouble("appReload", RELOAD); - map.putDouble("appContentAppeared", CONTENT_APPEARED); - - map.putDouble("processPackagesStart", PROCESS_PACKAGES_START); - map.putDouble("processPackagesEnd", PROCESS_PACKAGES_END); - - ctx.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class). - emit("nativeMetrics", map); - } - } - } - }); - } - /** * Loads Flipper in React Native templates. Call this in the onCreate method with something like * initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); diff --git a/android/build.gradle b/android/build.gradle index a5d59ddaa..d03d7d37a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -29,19 +29,6 @@ buildscript { } } -subprojects { - afterEvaluate { - android { - compileSdkVersion rootProject.ext.compileSdkVersion - buildToolsVersion rootProject.ext.buildToolsVersion - defaultConfig { - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - } - } - } -} - allprojects { repositories { google() diff --git a/app/actions/device/index.js b/app/actions/device/index.js index e72f2641b..2fe2b0114 100644 --- a/app/actions/device/index.js +++ b/app/actions/device/index.js @@ -15,13 +15,6 @@ export function connection(isOnline) { }; } -export function setStatusBarHeight(height = 20) { - return { - type: DeviceTypes.STATUSBAR_HEIGHT_CHANGED, - data: height, - }; -} - export function setDeviceDimensions(height, width) { return { type: DeviceTypes.DEVICE_DIMENSIONS_CHANGED, @@ -51,5 +44,4 @@ export default { setDeviceDimensions, setDeviceOrientation, setDeviceAsTablet, - setStatusBarHeight, }; diff --git a/app/actions/views/channel.js b/app/actions/views/channel.js index 19f1081d4..87ff97b13 100644 --- a/app/actions/views/channel.js +++ b/app/actions/views/channel.js @@ -36,7 +36,7 @@ import {lastChannelIdForTeam, loadSidebarDirectMessagesProfiles} from '@actions/ import {getPosts, getPostsBefore, getPostsSince, loadUnreadChannelPosts} from '@actions/views/post'; import {INSERT_TO_COMMENT, INSERT_TO_DRAFT} from '@constants/post_draft'; import {getChannelReachable} from '@selectors/channel'; -import telemetry from '@telemetry'; +import telemetry, {PERF_MARKERS} from '@telemetry'; import {isDirectChannelVisible, isGroupChannelVisible, getChannelSinceValue, privateChannelJoinPrompt} from '@utils/channels'; import {isPendingPost} from '@utils/general'; import {fetchAppBindings} from '@mm-redux/actions/apps'; @@ -194,6 +194,14 @@ export function handleSelectChannel(channelId) { const member = myMembers[channelId]; if (channel) { + let markerExtra; + if (channel.display_name) { + markerExtra = `Channel: ${channel.display_name}`; + } else { + markerExtra = `Channel: ${channel.type === General.DM_CHANNEL ? 'Direct Channel' : channel.name}`; + } + + telemetry.start([PERF_MARKERS.CHANNEL_RENDER], Date.now(), [markerExtra]); dispatch(loadPostsIfNecessaryWithRetry(channelId)); let previousChannelId = null; @@ -531,12 +539,6 @@ export function leaveChannel(channel, reset = false) { } export function setChannelLoading(loading = true) { - if (loading) { - telemetry.start(['channel:loading']); - } else { - telemetry.end(['channel:loading']); - } - return { type: ViewTypes.SET_CHANNEL_LOADER, loading, @@ -585,9 +587,6 @@ export function increasePostVisibility(channelId, postId) { return true; } - telemetry.reset(); - telemetry.start(['posts:loading']); - dispatch({ type: ViewTypes.LOADING_POSTS, data: true, @@ -618,8 +617,6 @@ export function increasePostVisibility(channelId, postId) { } dispatch(batchActions(actions, 'BATCH_LOAD_MORE_POSTS')); - telemetry.end(['posts:loading']); - telemetry.save(); return hasMorePost; }; diff --git a/app/actions/views/client_upgrade.js b/app/actions/views/client_upgrade.js deleted file mode 100644 index ab6a46843..000000000 --- a/app/actions/views/client_upgrade.js +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import {ViewTypes} from 'app/constants'; - -export function setLastUpgradeCheck() { - return { - type: ViewTypes.SET_LAST_UPGRADE_CHECK, - }; -} diff --git a/app/actions/views/root.js b/app/actions/views/root.js index 5130338a2..c84487292 100644 --- a/app/actions/views/root.js +++ b/app/actions/views/root.js @@ -4,7 +4,6 @@ import {batchActions} from 'redux-batched-actions'; import {NavigationTypes, ViewTypes} from '@constants'; -import {analytics} from '@init/analytics.ts'; import {ChannelTypes, GeneralTypes, TeamTypes} from '@mm-redux/action_types'; import {fetchMyChannelsAndMembers, getChannelAndMyMember} from '@mm-redux/actions/channels'; import {getDataRetentionPolicy} from '@mm-redux/actions/general'; @@ -180,14 +179,6 @@ export function createPostForNotificationReply(post) { }; } -export function recordLoadTime(screenName, category) { - return async (dispatch, getState) => { - const {currentUserId} = getState().entities.users; - - analytics.recordTime(screenName, category, currentUserId); - }; -} - export function setDeepLinkURL(url) { return { type: ViewTypes.SET_DEEP_LINK_URL, diff --git a/app/components/channel_intro/channel_intro.js b/app/components/channel_intro/channel_intro.js index b28e638fb..2615fe459 100644 --- a/app/components/channel_intro/channel_intro.js +++ b/app/components/channel_intro/channel_intro.js @@ -17,6 +17,7 @@ import CompassIcon from '@components/compass_icon'; import ProfilePicture from '@components/profile_picture'; import {BotTag, GuestTag} from '@components/tag'; import TouchableWithFeedback from '@components/touchable_with_feedback'; +import telemetry, {PERF_MARKERS} from '@telemetry'; import {preventDoubleTap} from '@utils/tap'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; import {t} from '@utils/i18n'; @@ -27,6 +28,7 @@ class ChannelIntro extends PureComponent { creator: PropTypes.object, currentChannel: PropTypes.object.isRequired, currentChannelMembers: PropTypes.array.isRequired, + emptyChannel: PropTypes.bool, intl: intlShape.isRequired, theme: PropTypes.object.isRequired, teammateNameDisplay: PropTypes.string.isRequired, @@ -36,6 +38,12 @@ class ChannelIntro extends PureComponent { currentChannelMembers: [], }; + componentDidMount() { + if (this.props.emptyChannel) { + telemetry.end([PERF_MARKERS.CHANNEL_RENDER]); + } + } + goToUserProfile = async (userId) => { const {intl, theme} = this.props; const screen = 'UserProfile'; diff --git a/app/components/client_upgrade_listener/client_upgrade_listener.js b/app/components/client_upgrade_listener/client_upgrade_listener.js deleted file mode 100644 index 3b8812456..000000000 --- a/app/components/client_upgrade_listener/client_upgrade_listener.js +++ /dev/null @@ -1,265 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import React, {PureComponent} from 'react'; -import PropTypes from 'prop-types'; -import { - Alert, - Animated, - TouchableOpacity, - View, -} from 'react-native'; -import {intlShape} from 'react-intl'; - -import CompassIcon from '@components/compass_icon'; -import FormattedText from '@components/formatted_text'; -import {DeviceTypes} from '@constants'; -import {checkUpgradeType, isUpgradeAvailable} from '@utils/client_upgrade'; -import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; -import {tryOpenURL} from '@utils/url'; -import {showModal, dismissModal} from '@actions/navigation'; - -const {View: AnimatedView} = Animated; - -const UPDATE_TIMEOUT = 60000; - -export default class ClientUpgradeListener extends PureComponent { - static propTypes = { - actions: PropTypes.shape({ - logError: PropTypes.func.isRequired, - setLastUpgradeCheck: PropTypes.func.isRequired, - }).isRequired, - currentVersion: PropTypes.string, - downloadLink: PropTypes.string, - forceUpgrade: PropTypes.bool, - isLandscape: PropTypes.bool, - lastUpgradeCheck: PropTypes.number, - latestVersion: PropTypes.string, - minVersion: PropTypes.string, - theme: PropTypes.object.isRequired, - }; - - static contextTypes = { - intl: intlShape, - }; - - constructor(props) { - super(props); - - CompassIcon.getImageSource('close', 24, this.props.theme.sidebarHeaderTextColor).then((source) => { - this.closeButton = source; - }); - - this.state = { - top: new Animated.Value(-100), - }; - } - - componentDidMount() { - const {forceUpgrade, isLandscape, lastUpgradeCheck, latestVersion, minVersion} = this.props; - if (forceUpgrade || Date.now() - lastUpgradeCheck > UPDATE_TIMEOUT) { - this.checkUpgrade(minVersion, latestVersion, isLandscape); - } - } - - setTop(top) { - this.setState({top}); - } - - componentDidUpdate(prevProps) { - const {forceUpgrade, latestVersion, minVersion} = prevProps; - const {latestVersion: nextLatestVersion, minVersion: nextMinVersion, lastUpgradeCheck} = this.props; - - const versionMismatch = latestVersion !== nextLatestVersion || minVersion !== nextMinVersion; - if (versionMismatch && (forceUpgrade || Date.now() - lastUpgradeCheck > UPDATE_TIMEOUT)) { - this.checkUpgrade(minVersion, latestVersion, this.props.isLandscape); - } else if (prevProps.isLandscape !== this.props.isLandscape && - isUpgradeAvailable(this.state.upgradeType) && DeviceTypes.IS_IPHONE_WITH_INSETS) { - const newTop = this.props.isLandscape ? 45 : 100; - this.setTop(new Animated.Value(newTop)); - } - } - - checkUpgrade = (minVersion, latestVersion, isLandscape) => { - const {actions, currentVersion} = this.props; - - const upgradeType = checkUpgradeType(currentVersion, minVersion, latestVersion, actions.logError); - - this.setState({upgradeType}); - - if (!isUpgradeAvailable(upgradeType)) { - return; - } - - setTimeout(() => { - this.toggleUpgradeMessage(true, isLandscape); - }, 500); - - actions.setLastUpgradeCheck(); - }; - - toggleUpgradeMessage = (show = true, isLandscape) => { - let toValue = -100; - if (show) { - if (DeviceTypes.IS_IPHONE_WITH_INSETS && isLandscape) { - toValue = 45; - } else { - toValue = DeviceTypes.IS_IPHONE_WITH_INSETS ? 100 : 75; - } - } - Animated.timing(this.state.top, { - toValue, - duration: 300, - }).start(); - }; - - handleDismiss = () => { - this.toggleUpgradeMessage(false); - }; - - handleDownload = () => { - const {downloadLink} = this.props; - const {intl} = this.context; - - const onError = () => { - Alert.alert( - intl.formatMessage({ - id: 'mobile.client_upgrade.download_error.title', - defaultMessage: 'Upgrade Error', - }), - intl.formatMessage({ - id: 'mobile.client_upgrade.download_error.message', - defaultMessage: 'An error occurred while trying to open the download link.', - }), - ); - }; - tryOpenURL(downloadLink, onError); - - this.toggleUpgradeMessage(false); - }; - - handleLearnMore = () => { - const {intl} = this.context; - - dismissModal(); - - const screen = 'ClientUpgrade'; - const title = intl.formatMessage({id: 'mobile.client_upgrade', defaultMessage: 'Upgrade App'}); - const passProps = { - upgradeType: this.state.upgradeType, - }; - const options = { - topBar: { - leftButtons: [{ - id: 'close-upgrade', - icon: this.closeButton, - }], - }, - }; - - showModal(screen, title, passProps, options); - - this.toggleUpgradeMessage(false); - }; - - render() { - if (!isUpgradeAvailable(this.state.upgradeType)) { - return null; - } - - const {forceUpgrade, theme} = this.props; - const styles = getStyleSheet(theme); - - return ( - - - - - - - - - - - - - {!forceUpgrade && - - - - } - - - - ); - } -} - -const getStyleSheet = makeStyleSheetFromTheme((theme) => { - return { - bottom: { - flexDirection: 'row', - justifyContent: 'space-around', - borderTopColor: changeOpacity(theme.centerChannelColor, 0.2), - backgroundColor: changeOpacity(theme.centerChannelColor, 0.06), - borderTopWidth: 1, - }, - button: { - color: theme.linkColor, - fontSize: 13, - paddingHorizontal: 5, - paddingVertical: 5, - }, - container: { - flex: 1, - backgroundColor: changeOpacity(theme.centerChannelBg, 0.8), - borderRadius: 5, - }, - message: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - messageText: { - fontSize: 16, - color: changeOpacity(theme.centerChannelColor, 0.8), - fontWeight: '600', - }, - wrapper: { - position: 'absolute', - elevation: 5, - left: 30, - right: 30, - height: 75, - backgroundColor: 'white', - borderColor: changeOpacity(theme.centerChannelColor, 0.2), - borderWidth: 2, - borderRadius: 5, - shadowColor: theme.centerChannelColor, - shadowOffset: { - width: 0, - height: 3, - }, - shadowOpacity: 0.2, - shadowRadius: 2, - }, - }; -}); diff --git a/app/components/client_upgrade_listener/index.js b/app/components/client_upgrade_listener/index.js deleted file mode 100644 index 49af5bd47..000000000 --- a/app/components/client_upgrade_listener/index.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. -import {bindActionCreators} from 'redux'; -import {connect} from 'react-redux'; - -import {logError} from '@mm-redux/actions/errors'; -import {getTheme} from '@mm-redux/selectors/entities/preferences'; - -import {setLastUpgradeCheck} from 'app/actions/views/client_upgrade'; -import getClientUpgrade from 'app/selectors/client_upgrade'; -import {isLandscape} from 'app/selectors/device'; - -import ClientUpgradeListener from './client_upgrade_listener'; - -function mapStateToProps(state) { - const {currentVersion, downloadLink, forceUpgrade, latestVersion, minVersion} = getClientUpgrade(state); - - return { - currentVersion, - downloadLink, - forceUpgrade, - isLandscape: isLandscape(state), - lastUpgradeCheck: state.views.clientUpgrade.lastUpdateCheck, - latestVersion, - minVersion, - theme: getTheme(state), - }; -} - -function mapDispatchToProps(dispatch) { - return { - actions: bindActionCreators({ - logError, - setLastUpgradeCheck, - }, dispatch), - }; -} - -export default connect(mapStateToProps, mapDispatchToProps)(ClientUpgradeListener); diff --git a/app/components/post_body/post_body.js b/app/components/post_body/post_body.js index 6d7db4ce7..931a9570a 100644 --- a/app/components/post_body/post_body.js +++ b/app/components/post_body/post_body.js @@ -25,8 +25,6 @@ import {preventDoubleTap} from '@utils/tap'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; import {showModalOverCurrentContext} from '@actions/navigation'; -import telemetry from '@telemetry'; - import {renderSystemMessage} from './system_message_helpers'; let FileAttachmentList; @@ -105,18 +103,6 @@ export default class PostBody extends PureComponent { isLongPost: false, }; - logTelemetry = () => { - telemetry.end([ - 'channel:switch_initial', - 'channel:switch_loaded', - 'post_list:permalink', - 'post_list:thread', - 'team:switch', - 'start:overall', - ]); - telemetry.save(); - } - measurePost = (event) => { const {height} = event.nativeEvent.layout; const {showLongPost} = this.props; @@ -126,10 +112,6 @@ export default class PostBody extends PureComponent { isLongPost: height >= this.state.maxHeight, }); } - - if (this.props.isLastPost) { - this.logTelemetry(); - } }; openLongPost = preventDoubleTap(() => { @@ -363,6 +345,7 @@ export default class PostBody extends PureComponent { const messageStyles = {messageStyle, textStyles}; const intl = this.context.intl; const systemMessage = renderSystemMessage(this.props, messageStyles, intl); + if (systemMessage) { return systemMessage; } diff --git a/app/components/post_list/post_list.js b/app/components/post_list/post_list.js index 6c67024d8..625c131e1 100644 --- a/app/components/post_list/post_list.js +++ b/app/components/post_list/post_list.js @@ -6,18 +6,17 @@ import PropTypes from 'prop-types'; import {Alert, DeviceEventEmitter, FlatList, Platform, RefreshControl, StyleSheet} from 'react-native'; import {intlShape} from 'react-intl'; +import CombinedUserActivityPost from '@components/combined_user_activity_post'; +import Post from '@components/post'; +import {DeepLinkTypes, ListTypes, NavigationTypes} from '@constants'; import {Posts} from '@mm-redux/constants'; import EventEmitter from '@mm-redux/utils/event_emitter'; import * as PostListUtils from '@mm-redux/utils/post_list'; +import telemetry, {PERF_MARKERS} from '@telemetry'; import {errorBadChannel} from '@utils/draft'; - -import CombinedUserActivityPost from 'app/components/combined_user_activity_post'; -import Post from 'app/components/post'; -import {DeepLinkTypes, ListTypes, NavigationTypes} from '@constants'; +import {makeExtraData} from '@utils/list_view'; +import {matchDeepLink, PERMALINK_GENERIC_TEAM_NAME_REDIRECT} from '@utils/url'; import mattermostManaged from 'app/mattermost_managed'; -import {makeExtraData} from 'app/utils/list_view'; -import {matchDeepLink, PERMALINK_GENERIC_TEAM_NAME_REDIRECT} from 'app/utils/url'; -import telemetry from 'app/telemetry'; import DateHeader from './date_header'; import NewMessagesDivider from './new_messages_divider'; @@ -98,6 +97,7 @@ export default class PostList extends PureComponent { this.shouldScrollToBottom = false; this.makeExtraData = makeExtraData(); this.flatListRef = React.createRef(); + this.initialRender = false; } componentDidMount() { @@ -215,13 +215,16 @@ export default class PostList extends PureComponent { handleLayout = (event) => { const {height} = event.nativeEvent.layout; + if (!this.initialRender && this.props.postIds.length) { + telemetry.end([PERF_MARKERS.CHANNEL_RENDER]); + this.initialRender = true; + } if (this.postListHeight !== height) { this.postListHeight = height; } }; handlePermalinkPress = (postId, teamName) => { - telemetry.start(['post_list:permalink']); const {showPermalink} = this.props.actions; showPermalink(this.context.intl, teamName, postId); @@ -362,6 +365,7 @@ export default class PostList extends PureComponent { postId={postId} highlight={highlightPostId === postId} isLastPost={lastPostIndex === index} + hey={index} {...postProps} /> ); @@ -370,6 +374,7 @@ export default class PostList extends PureComponent { resetPostList = () => { this.contentOffsetY = 0; this.hasDoneInitialScroll = false; + this.initialRender = false; if (this.scrollAfterInteraction) { this.scrollAfterInteraction.cancel(); diff --git a/app/components/sidebars/drawer_layout/drawer_layout.js b/app/components/sidebars/drawer_layout/drawer_layout.js index a61572339..c9f419cb9 100644 --- a/app/components/sidebars/drawer_layout/drawer_layout.js +++ b/app/components/sidebars/drawer_layout/drawer_layout.js @@ -18,8 +18,6 @@ import { } from 'react-native'; import PropTypes from 'prop-types'; -import telemetry from 'app/telemetry'; - const MIN_SWIPE_DISTANCE = 3; const VX_MAX = 0.1; @@ -307,8 +305,6 @@ export default class DrawerLayout extends Component { }).start(() => { this.handleOpenValueChanged({value: 1}); if (this.props.onDrawerOpen) { - telemetry.end(['channel:open_drawer']); - telemetry.save(); this.props.onDrawerOpen(); } @@ -328,7 +324,6 @@ export default class DrawerLayout extends Component { }).start(() => { this.handleOpenValueChanged({value: 0}); if (this.props.onDrawerClose) { - telemetry.end(['channel:close_drawer']); this.props.onDrawerClose(); this.canClose = true; } diff --git a/app/components/sidebars/main/index.js b/app/components/sidebars/main/index.js index 98d5cbc1b..62d4b8023 100644 --- a/app/components/sidebars/main/index.js +++ b/app/components/sidebars/main/index.js @@ -12,28 +12,9 @@ import {getCurrentUser} from '@mm-redux/selectors/entities/users'; import {setChannelDisplayName, handleSelectChannel} from 'app/actions/views/channel'; import {makeDirectChannel} from 'app/actions/views/more_dms'; -import telemetry from 'app/telemetry'; import MainSidebar from './main_sidebar'; -export function logChannelSwitch(channelId, currentChannelId) { - return (dispatch, getState) => { - if (channelId === currentChannelId) { - return; - } - - const metrics = []; - if (getState().entities.posts.postsInChannel[channelId]) { - metrics.push('channel:switch_loaded'); - } else { - metrics.push('channel:switch_initial'); - } - - telemetry.reset(); - telemetry.start(metrics); - }; -} - function mapStateToProps(state) { const currentUser = getCurrentUser(state); @@ -51,7 +32,6 @@ function mapDispatchToProps(dispatch) { actions: bindActionCreators({ getTeams, joinChannel, - logChannelSwitch, makeDirectChannel, setChannelDisplayName, handleSelectChannel, diff --git a/app/components/sidebars/main/main_sidebar.test.js b/app/components/sidebars/main/main_sidebar.test.js index cd66f73c2..5a5941ac5 100644 --- a/app/components/sidebars/main/main_sidebar.test.js +++ b/app/components/sidebars/main/main_sidebar.test.js @@ -15,7 +15,6 @@ describe('MainSidebar', () => { const baseProps = { actions: { getTeams: jest.fn(), - logChannelSwitch: jest.fn(), makeDirectChannel: jest.fn(), setChannelDisplayName: jest.fn(), setChannelLoading: jest.fn(), diff --git a/app/components/sidebars/main/main_sidebar_base.js b/app/components/sidebars/main/main_sidebar_base.js index 058c8fd62..101f7f651 100644 --- a/app/components/sidebars/main/main_sidebar_base.js +++ b/app/components/sidebars/main/main_sidebar_base.js @@ -15,8 +15,6 @@ import {NavigationTypes, WebsocketEvents} from '@constants'; import {General} from '@mm-redux/constants'; import EventEmitter from '@mm-redux/utils/event_emitter'; import {t} from '@utils/i18n'; -import tracker from '@utils/time_tracker'; -import telemetry from '@telemetry/'; import ChannelsList from './channels_list'; import DrawerSwiper from './drawer_swiper'; @@ -28,7 +26,6 @@ export default class MainSidebarBase extends Component { getTeams: PropTypes.func.isRequired, handleSelectChannel: PropTypes.func, joinChannel: PropTypes.func.isRequired, - logChannelSwitch: PropTypes.func.isRequired, makeDirectChannel: PropTypes.func.isRequired, setChannelDisplayName: PropTypes.func.isRequired, }).isRequired, @@ -267,10 +264,9 @@ export default class MainSidebarBase extends Component { }; selectChannel = (channel, currentChannelId, closeDrawer = true) => { - const {logChannelSwitch, handleSelectChannel} = this.props.actions; + const {handleSelectChannel} = this.props.actions; if (closeDrawer) { - telemetry.start(['channel:close_drawer']); this.closeMainSidebar(); } @@ -278,10 +274,6 @@ export default class MainSidebarBase extends Component { return; } - logChannelSwitch(channel.id, currentChannelId); - - tracker.channelSwitch = Date.now(); - if (!channel) { const utils = require('app/utils/general'); const intl = this.getIntl(); diff --git a/app/components/sidebars/main/teams_list/teams_list.js b/app/components/sidebars/main/teams_list/teams_list.js index 80da7ef31..e607949f4 100644 --- a/app/components/sidebars/main/teams_list/teams_list.js +++ b/app/components/sidebars/main/teams_list/teams_list.js @@ -20,11 +20,9 @@ import CompassIcon from '@components/compass_icon'; import FormattedText from '@components/formatted_text'; import {DeviceTypes, ListTypes, ViewTypes} from '@constants'; import {getCurrentServerUrl} from '@init/credentials'; -import telemetry from '@telemetry'; import {preventDoubleTap} from '@utils/tap'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; import {removeProtocol} from '@utils/url'; -import tracker from '@utils/time_tracker'; import TeamsListItem from './teams_list_item'; @@ -70,15 +68,9 @@ export default class TeamsList extends PureComponent { selectTeam = (teamId) => { const {actions, closeMainSidebar, currentTeamId} = this.props; - if (teamId !== currentTeamId) { - telemetry.reset(); - telemetry.start(['team:switch']); - } - StatusBar.setHidden(false, 'slide'); requestAnimationFrame(() => { if (teamId !== currentTeamId) { - tracker.teamSwitch = Date.now(); actions.handleTeamChange(teamId); } }); diff --git a/app/constants/device.js b/app/constants/device.js index 2988f2822..31e58b66c 100644 --- a/app/constants/device.js +++ b/app/constants/device.js @@ -11,7 +11,6 @@ const deviceTypes = keyMirror({ DEVICE_DIMENSIONS_CHANGED: null, DEVICE_TYPE_CHANGED: null, DEVICE_ORIENTATION_CHANGED: null, - STATUSBAR_HEIGHT_CHANGED: null, }); const isPhoneWithInsets = Platform.OS === 'ios' && DeviceInfo.hasNotch(); diff --git a/app/constants/index.js b/app/constants/index.js index e06653d6e..07b4215e2 100644 --- a/app/constants/index.js +++ b/app/constants/index.js @@ -8,7 +8,7 @@ import DeviceTypes from './device'; import ListTypes from './list'; import NavigationTypes from './navigation'; import Types from './types'; -import ViewTypes, {UpgradeTypes} from './view'; +import ViewTypes from './view'; import WebsocketEvents from './websocket'; export { @@ -18,7 +18,6 @@ export { DeviceTypes, ListTypes, NavigationTypes, - UpgradeTypes, Types, ViewTypes, WebsocketEvents, diff --git a/app/constants/view.js b/app/constants/view.js index 88d7a1c04..f91743ec1 100644 --- a/app/constants/view.js +++ b/app/constants/view.js @@ -9,13 +9,6 @@ import keyMirror from '@mm-redux/utils/key_mirror'; // The iPhone 11 and iPhone 11 Pro Max have a navbar height of 44 and iPhone 11 Pro has 32 const IPHONE_11_LANDSCAPE_HEIGHT = ['iPhone 11', 'iPhone 11 Pro Max']; -export const UpgradeTypes = { - CAN_UPGRADE: 'can_upgrade', - MUST_UPGRADE: 'must_upgrade', - NO_UPGRADE: 'no_upgrade', - IS_BETA: 'is_beta', -}; - export const SidebarSectionTypes = { UNREADS: 'unreads', FAVORITE: 'favorite', @@ -89,8 +82,6 @@ const ViewTypes = keyMirror({ RECEIVED_POSTS_FOR_CHANNEL_AT_TIME: null, - SET_LAST_UPGRADE_CHECK: null, - ADD_RECENT_EMOJI: null, ADD_RECENT_EMOJI_ARRAY: null, ANNOUNCEMENT_BANNER: null, diff --git a/app/init/analytics.ts b/app/init/analytics.ts index cf53e90a5..065d23959 100644 --- a/app/init/analytics.ts +++ b/app/init/analytics.ts @@ -6,7 +6,6 @@ import {Dimensions} from 'react-native'; import LocalConfig from '@assets/config.json'; import {Config} from '@mm-redux/types/config'; -import tracker from '@utils/time_tracker'; import {isSystemAdmin} from '@mm-redux/utils/user_utils'; type RudderClient = { @@ -103,24 +102,6 @@ class Analytics { this.analytics.track(event, properties, options); } - recordTime(screenName: string, category: string, userId: string) { - if (this.analytics) { - const track: Record = tracker; - const startTime: number = track[category]; - track[category] = 0; - this.analytics.screen( - screenName, { - userId: this.diagnosticId, - context: this.context, - properties: { - user_actual_id: userId, - time: Date.now() - startTime, - }, - }, - ); - } - } - trackAPI(event: string, props?: any) { this.trackEvent('api', event, props); } diff --git a/app/init/global_event_handler.js b/app/init/global_event_handler.js index c01fbb611..a4a2b44ab 100644 --- a/app/init/global_event_handler.js +++ b/app/init/global_event_handler.js @@ -1,26 +1,24 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import {Alert, AppState, Dimensions, Linking, NativeModules, Platform} from 'react-native'; +import {AppState, Dimensions, Linking, Platform} from 'react-native'; import AsyncStorage from '@react-native-community/async-storage'; import CookieManager from 'react-native-cookies'; import DeviceInfo from 'react-native-device-info'; import {getLocales} from 'react-native-localize'; import RNFetchBlob from 'rn-fetch-blob'; -import semver from 'semver/preload'; -import {setDeviceDimensions, setDeviceOrientation, setDeviceAsTablet, setStatusBarHeight} from '@actions/device'; +import {setDeviceDimensions, setDeviceOrientation, setDeviceAsTablet} from '@actions/device'; import {selectDefaultChannel} from '@actions/views/channel'; import {showOverlay} from '@actions/navigation'; import {loadConfigAndLicense, setDeepLinkURL, startDataCleanup} from '@actions/views/root'; import {loadMe, logout} from '@actions/views/user'; import LocalConfig from '@assets/config'; import {NavigationTypes, ViewTypes} from '@constants'; -import {getTranslations, resetMomentLocale} from '@i18n'; +import {resetMomentLocale} from '@i18n'; import {setupPermanentSidebar} from '@init/device'; 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'; import {close as closeWebSocket} from '@actions/websocket'; import {Client4} from '@client/rest'; @@ -31,10 +29,8 @@ import {getCurrentUser, getUser} from '@mm-redux/selectors/entities/users'; import {isTimezoneEnabled} from '@mm-redux/selectors/entities/timezone'; import EventEmitter from '@mm-redux/utils/event_emitter'; import {isMinimumServerVersion} from '@mm-redux/utils/helpers'; -import {getCurrentLocale} from '@selectors/i18n'; import initialState from '@store/initial_state'; import Store from '@store/store'; -import {t} from '@utils/i18n'; import {deleteFileCache} from '@utils/file'; import {getDeviceTimezone} from '@utils/timezone'; @@ -45,7 +41,6 @@ import {getAppCredentials, removeAppCredentials} from './credentials'; import emmProvider from './emm_provider'; import {analytics} from '@init/analytics.ts'; -const {StatusBarManager} = NativeModules; const PROMPT_IN_APP_PIN_CODE_AFTER = 5 * 1000; class GlobalEventHandler { @@ -100,17 +95,6 @@ class GlobalEventHandler { const window = Dimensions.get('window'); this.onOrientationChange({window}); - this.StatusBarSizeIOS = require('react-native-status-bar-size'); - if (Platform.OS === 'ios') { - this.StatusBarSizeIOS.addEventListener('willChange', this.onStatusBarHeightChange); - - StatusBarManager.getHeight( - (data) => { - this.onStatusBarHeightChange(data.height); - }, - ); - } - this.JavascriptAndNativeErrorHandler = require('app/utils/error_handling').default; this.JavascriptAndNativeErrorHandler.initializeErrorHandling(Store.redux); @@ -259,19 +243,10 @@ class GlobalEventHandler { const user = getUser(state, currentUserId); await dispatch(loadConfigAndLicense()); - await dispatch(getTeams()); await dispatch(loadMe(user)); const window = Dimensions.get('window'); this.onOrientationChange({window}); - - if (Platform.OS === 'ios') { - StatusBarManager.getHeight( - (data) => { - this.onStatusBarHeightChange(data.height); - }, - ); - } }; onServerConfigChanged = (config) => { @@ -285,32 +260,12 @@ class GlobalEventHandler { onServerVersionChanged = async (serverVersion) => { const {dispatch, getState} = Store.redux; const state = getState(); - const match = serverVersion && serverVersion.match(/^[0-9]*.[0-9]*.[0-9]*(-[a-zA-Z0-9.-]*)?/g); - const version = match && match[0]; - const locale = getCurrentLocale(state); - const translations = getTranslations(locale); - if (serverVersion) { - if (semver.valid(version) && semver.lt(version, LocalConfig.MinServerVersion)) { - Alert.alert( - translations[t('mobile.server_upgrade.title')], - translations[t('mobile.server_upgrade.description')], - [{ - text: translations[t('mobile.server_upgrade.button')], - onPress: this.serverUpgradeNeeded, - }], - {cancelable: false}, - ); - } else if (state.entities.users && state.entities.users.currentUserId) { - dispatch(setServerVersion(serverVersion)); - dispatch(loadConfigAndLicense()); - } + if (serverVersion && state.entities.users && state.entities.users.currentUserId) { + dispatch(setServerVersion(serverVersion)); + dispatch(loadConfigAndLicense()); } }; - onStatusBarHeightChange = (nextStatusBarHeight) => { - Store.redux.dispatch(setStatusBarHeight(nextStatusBarHeight)); - }; - onSwitchToDefaultChannel = (teamId) => { Store.redux.dispatch(selectDefaultChannel(teamId)); }; diff --git a/app/init/global_event_handler.test.js b/app/init/global_event_handler.test.js index f0fe5f39b..ebde1b77d 100644 --- a/app/init/global_event_handler.test.js +++ b/app/init/global_event_handler.test.js @@ -1,12 +1,10 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import {Alert} from 'react-native'; import configureMockStore from 'redux-mock-store'; import thunk from 'redux-thunk'; 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'; @@ -29,10 +27,6 @@ jest.mock('@utils/error_handling', () => ({ }, })); -jest.mock('react-native-status-bar-size', () => ({ - addEventListener: jest.fn(), -})); - jest.mock('@mm-redux/actions/general', () => ({ setAppState: jest.fn(), setServerVersion: jest.fn().mockReturnValue('setServerVersion'), @@ -149,7 +143,7 @@ describe('GlobalEventHandler', () => { jest.clearAllMocks(); }); - const minVersion = semver.parse(MinServerVersion); + const minVersion = semver.parse('5.31.0'); const currentUserId = 'current-user-id'; Store.redux.getState = jest.fn().mockReturnValue({ entities: { @@ -165,13 +159,11 @@ describe('GlobalEventHandler', () => { const dispatch = jest.spyOn(Store.redux, 'dispatch'); const configureAnalytics = jest.spyOn(GlobalEventHandler, 'configureAnalytics'); - const alert = jest.spyOn(Alert, 'alert'); it('should dispatch on invalid version with currentUserId', async () => { const invalidVersion = 'a.b.c'; await GlobalEventHandler.onServerVersionChanged(invalidVersion); - expect(alert).not.toHaveBeenCalled(); expect(dispatch).toHaveBeenCalledTimes(2); expect(dispatch).toHaveBeenCalledWith('setServerVersion'); expect(dispatch).toHaveBeenCalledWith('loadConfigAndLicense'); @@ -180,41 +172,28 @@ describe('GlobalEventHandler', () => { it('should dispatch on gte min server version with currentUserId', async () => { let version = minVersion.version; await GlobalEventHandler.onServerVersionChanged(version); - expect(alert).not.toHaveBeenCalled(); expect(dispatch).toHaveBeenCalledTimes(2); expect(dispatch).toHaveBeenCalledWith('setServerVersion'); expect(dispatch).toHaveBeenCalledWith('loadConfigAndLicense'); version = semver.coerce(minVersion.major + 1).version; await GlobalEventHandler.onServerVersionChanged(version); - expect(alert).not.toHaveBeenCalled(); expect(dispatch).toHaveBeenCalledTimes(4); }); - it('should alert on lt min server version', async () => { - const version = semver.coerce(minVersion.major - 1).version; - await GlobalEventHandler.onServerVersionChanged(version); - expect(alert).toHaveBeenCalled(); - expect(dispatch).not.toHaveBeenCalled(); - expect(configureAnalytics).not.toHaveBeenCalled(); - }); - - it('should not alert nor dispatch on empty, null, undefined server version', async () => { + it('should not dispatch on empty, null, undefined server version', async () => { let version; await GlobalEventHandler.onServerVersionChanged(version); - expect(alert).not.toHaveBeenCalled(); expect(dispatch).not.toHaveBeenCalled(); expect(configureAnalytics).not.toHaveBeenCalled(); version = ''; await GlobalEventHandler.onServerVersionChanged(version); - expect(alert).not.toHaveBeenCalled(); expect(dispatch).not.toHaveBeenCalled(); expect(configureAnalytics).not.toHaveBeenCalled(); version = null; await GlobalEventHandler.onServerVersionChanged(version); - expect(alert).not.toHaveBeenCalled(); expect(dispatch).not.toHaveBeenCalled(); expect(configureAnalytics).not.toHaveBeenCalled(); }); diff --git a/app/mattermost.js b/app/mattermost.js index 7e0ffdd6a..184f7cecf 100644 --- a/app/mattermost.js +++ b/app/mattermost.js @@ -10,7 +10,6 @@ import EventEmitter from '@mm-redux/utils/event_emitter'; import {resetToChannel, resetToSelectServer} from '@actions/navigation'; import {setDeepLinkURL} from '@actions/views/root'; import {loadMe, logout} from '@actions/views/user'; -import telemetry from 'app/telemetry'; import {NavigationTypes} from '@constants'; import {getAppCredentials} from '@init/credentials'; import emmProvider from '@init/emm_provider'; @@ -23,6 +22,7 @@ import EphemeralStore from '@store/ephemeral_store'; import getStorage from '@store/mmkv_adapter'; import Store from '@store/store'; import {waitForHydration} from '@store/utils'; +import telemetry from '@telemetry'; import {validatePreviousVersion} from '@utils/general'; import {captureJSException} from '@utils/sentry'; @@ -49,11 +49,6 @@ const init = async () => { }; const launchApp = (credentials) => { - telemetry.start([ - 'start:select_server_screen', - 'start:channel_screen', - ]); - const store = Store.redux; waitForHydration(store, async () => { Linking.getInitialURL().then((url) => { @@ -70,7 +65,7 @@ const launchApp = (credentials) => { await globalEventHandler.configureAnalytics(); // eslint-disable-next-line no-console console.log('Launch app in Channel screen'); - resetToChannel({skipMetrics: true}); + resetToChannel(); } else { const error = new Error(`Previous app version "${previousVersion}" is invalid.`); captureJSException(error, false, store); @@ -79,9 +74,10 @@ const launchApp = (credentials) => { } else { resetToSelectServer(emmProvider.allowOtherServers); } + + telemetry.startSinceLaunch(credentials ? 'Launch on Channel Screen' : 'Launch on Server Screen'); }); - telemetry.startSinceLaunch(['start:splash_screen']); EphemeralStore.appStarted = true; }; diff --git a/app/mm-redux/actions/general.ts b/app/mm-redux/actions/general.ts index c432ea4af..46bc3b25b 100644 --- a/app/mm-redux/actions/general.ts +++ b/app/mm-redux/actions/general.ts @@ -12,7 +12,6 @@ import {GetStateFunc, DispatchFunc, ActionFunc, batchActions} from '@mm-redux/ty import {logError} from './errors'; import {loadRolesIfNeeded} from './roles'; -import {loadMe} from './users'; import {bindClientFunc, forceLogoutIfNecessary, FormattedError} from './helpers'; export function getPing(): ActionFunc { @@ -139,15 +138,6 @@ export function setServerVersion(serverVersion: string): ActionFunc { }; } -export function setStoreFromLocalData(data: { token: string; url: string }): ActionFunc { - return async (dispatch: DispatchFunc, getState) => { - Client4.setToken(data.token); - Client4.setUrl(data.url); - - return loadMe()(dispatch, getState); - }; -} - export function getSupportedTimezones() { return bindClientFunc({ clientFunc: Client4.getTimezones, @@ -195,7 +185,6 @@ export default { setAppState, setDeviceToken, setServerVersion, - setStoreFromLocalData, setUrl, getRedirectLocation, }; diff --git a/app/mm-redux/actions/users.ts b/app/mm-redux/actions/users.ts index a795208ad..fb81f45b4 100644 --- a/app/mm-redux/actions/users.ts +++ b/app/mm-redux/actions/users.ts @@ -8,7 +8,7 @@ import {General} from '../constants'; import {UserTypes, TeamTypes} from '@mm-redux/action_types'; import {getAllCustomEmojis} from './emojis'; import {getClientConfig, setServerVersion} from './general'; -import {getMyTeams, getMyTeamMembers, getMyTeamUnreads} from './teams'; +import {getMyTeams} from './teams'; import {loadRolesIfNeeded} from './roles'; import {getUserIdFromChannelName, isDirectChannel, isDirectChannelVisible, isGroupChannel, isGroupChannelVisible} from '@mm-redux/utils/channel_utils'; import {removeUserFromList} from '@mm-redux/utils/user_utils'; @@ -194,47 +194,6 @@ function completeLogin(data: UserProfile): ActionFunc { }; } -export function loadMe(): ActionFunc { - return async (dispatch: DispatchFunc, getState: GetStateFunc) => { - const state = getState(); - const config = getConfig(state); - - const deviceId = state.entities.general.deviceToken; - if (deviceId) { - Client4.attachDevice(deviceId); - } - - const promises = [ - dispatch(getMe()), - dispatch(getMyPreferences()), - dispatch(getMyTeams()), - dispatch(getMyTeamMembers()), - dispatch(getMyTeamUnreads()), - ]; - - // Sometimes the server version is set in one or the other - const serverVersion = Client4.getServerVersion() || getState().entities.general.serverVersion; - dispatch(setServerVersion(serverVersion)); - if (!isMinimumServerVersion(serverVersion, 4, 7) && config.EnableCustomEmoji === 'true') { - dispatch(getAllCustomEmojis()); - } - - await Promise.all(promises); - - const {currentUserId} = getState().entities.users; - const user = getState().entities.users.profiles[currentUserId]; - if (currentUserId) { - analytics.setUserId(currentUserId); - } - - if (user) { - analytics.setUserRoles(user.roles); - } - - return {data: true}; - }; -} - export function getProfiles(page = 0, perPage: number = General.PROFILE_CHUNK_SIZE, options: any = {}): ActionFunc { return async (dispatch: DispatchFunc, getState: GetStateFunc) => { const {currentUserId} = getState().entities.users; diff --git a/app/reducers/device/index.js b/app/reducers/device/index.js index 5145f3e85..734535868 100644 --- a/app/reducers/device/index.js +++ b/app/reducers/device/index.js @@ -7,12 +7,10 @@ import connection from './connection'; import dimension from './dimension'; import isTablet from './is_tablet'; import orientation from './orientation'; -import statusBarHeight from './status_bar'; export default combineReducers({ connection, dimension, isTablet, orientation, - statusBarHeight, }); diff --git a/app/reducers/views/client_upgrade.js b/app/reducers/views/client_upgrade.js deleted file mode 100644 index ed710e8a7..000000000 --- a/app/reducers/views/client_upgrade.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. -const initialState = { - lastUpdateCheck: 0, -}; - -import {ViewTypes} from 'app/constants'; - -export default function clientUpgrade(state = initialState, action) { - switch (action.type) { - case ViewTypes.SET_LAST_UPGRADE_CHECK: - return { - lastUpdateCheck: Date.now(), - }; - default: - return state; - } -} diff --git a/app/reducers/views/index.js b/app/reducers/views/index.js index 820c597b6..1d09f5053 100644 --- a/app/reducers/views/index.js +++ b/app/reducers/views/index.js @@ -5,7 +5,6 @@ import {combineReducers} from 'redux'; import announcement from './announcement'; import channel from './channel'; -import clientUpgrade from './client_upgrade'; import i18n from './i18n'; import recentEmojis from './recent_emojis'; import root from './root'; @@ -20,7 +19,6 @@ import post from './post'; export default combineReducers({ announcement, channel, - clientUpgrade, i18n, recentEmojis, root, diff --git a/app/screens/channel/channel.android.js b/app/screens/channel/channel.android.js index 702972535..1d4fe7900 100644 --- a/app/screens/channel/channel.android.js +++ b/app/screens/channel/channel.android.js @@ -5,7 +5,6 @@ import React from 'react'; import {StyleSheet, View, BackHandler, ToastAndroid} from 'react-native'; import {openMainSideMenu, openSettingsSideMenu} from '@actions/navigation'; -import LocalConfig from '@assets/config'; import AnnouncementBanner from 'app/components/announcement_banner'; import KeyboardLayout from '@components/layout/keyboard_layout'; import InteractiveDialogController from '@components/interactive_dialog_controller'; @@ -18,7 +17,7 @@ import EphemeralStore from '@store/ephemeral_store'; import ChannelNavBar from './channel_nav_bar'; import ChannelPostList from './channel_post_list'; -import ChannelBase, {ClientUpgradeListener} from './channel_base'; +import ChannelBase from './channel_base'; let backPressedCount = 0; @@ -93,7 +92,6 @@ export default class ChannelAndroid extends ChannelBase { {component} - {LocalConfig.EnableMobileClientUpgrade && } ); diff --git a/app/screens/channel/channel.ios.js b/app/screens/channel/channel.ios.js index d45a220d8..3389a8abd 100644 --- a/app/screens/channel/channel.ios.js +++ b/app/screens/channel/channel.ios.js @@ -5,7 +5,6 @@ import React from 'react'; import {View} from 'react-native'; import {SafeAreaView} from 'react-native-safe-area-context'; -import LocalConfig from '@assets/config'; import AnnouncementBanner from 'app/components/announcement_banner'; import Autocomplete from '@components/autocomplete'; import InteractiveDialogController from '@components/interactive_dialog_controller'; @@ -18,7 +17,7 @@ import DEVICE from '@constants/device'; import {ACCESSORIES_CONTAINER_NATIVE_ID, CHANNEL_POST_TEXTBOX_CURSOR_CHANGE, CHANNEL_POST_TEXTBOX_VALUE_CHANGE} from '@constants/post_draft'; import {makeStyleSheetFromTheme} from '@utils/theme'; -import ChannelBase, {ClientUpgradeListener} from './channel_base'; +import ChannelBase from './channel_base'; import ChannelNavBar from './channel_nav_bar'; import ChannelPostList from './channel_post_list'; @@ -66,7 +65,6 @@ export default class ChannelIOS extends ChannelBase { updateNativeScrollView={this.updateNativeScrollView} registerTypingAnimation={this.registerTypingAnimation} /> - {LocalConfig.EnableMobileClientUpgrade && } ); } diff --git a/app/screens/channel/channel_base.js b/app/screens/channel/channel_base.js index 79b3e0070..45f0d885b 100644 --- a/app/screens/channel/channel_base.js +++ b/app/screens/channel/channel_base.js @@ -10,19 +10,14 @@ import {General} from '@mm-redux/constants'; import EventEmitter from '@mm-redux/utils/event_emitter'; import {showModal, showModalOverCurrentContext} from '@actions/navigation'; -import LocalConfig from '@assets/config'; import {UPDATE_NATIVE_SCROLLVIEW, TYPING_VISIBLE} from '@constants/post_draft'; import CompassIcon from '@components/compass_icon'; +import PushNotifications from '@init/push_notifications'; import EphemeralStore from '@store/ephemeral_store'; +import telemetry, {PERF_MARKERS} from '@telemetry'; import {unsupportedServer} from '@utils/supported_server'; import {preventDoubleTap} from '@utils/tap'; import {setNavigatorStyles} from '@utils/theme'; -import tracker from '@utils/time_tracker'; - -import PushNotifications from '@init/push_notifications'; -import telemetry from 'app/telemetry'; - -export let ClientUpgradeListener; export default class ChannelBase extends PureComponent { static propTypes = { @@ -31,7 +26,6 @@ export default class ChannelBase extends PureComponent { loadChannelsForTeam: PropTypes.func.isRequired, selectDefaultTeam: PropTypes.func.isRequired, selectInitialChannel: PropTypes.func.isRequired, - recordLoadTime: PropTypes.func.isRequired, }).isRequired, componentId: PropTypes.string.isRequired, currentChannelId: PropTypes.string, @@ -43,7 +37,6 @@ export default class ChannelBase extends PureComponent { teamName: PropTypes.string, theme: PropTypes.object.isRequired, showTermsOfService: PropTypes.bool, - skipMetrics: PropTypes.bool, }; static contextTypes = { @@ -63,8 +56,8 @@ export default class ChannelBase extends PureComponent { channelsRequestFailed: false, }; - if (LocalConfig.EnableMobileClientUpgrade && !ClientUpgradeListener) { - ClientUpgradeListener = require('app/components/client_upgrade_listener').default; + if (props.currentChannelId) { + telemetry.start([PERF_MARKERS.CHANNEL_RENDER], Date.now(), ['Initial Channel Render']); } this.typingAnimations = []; @@ -79,7 +72,6 @@ export default class ChannelBase extends PureComponent { isSupportedServer, isSystemAdmin, showTermsOfService, - skipMetrics, } = this.props; EventEmitter.on('leave_team', this.handleLeaveTeam); @@ -99,27 +91,15 @@ export default class ChannelBase extends PureComponent { }); } - if (tracker.initialLoad && !skipMetrics) { - actions.recordLoadTime('Start time', 'initialLoad'); - } - if (showTermsOfService && !disableTermsModal) { this.showTermsOfServiceModal(); } else if (!isSupportedServer) { // Only display the Alert if the TOS does not need to show first unsupportedServer(isSystemAdmin, this.context.intl.formatMessage); } - - if (!skipMetrics) { - telemetry.end(['start:channel_screen']); - } } componentDidUpdate(prevProps) { - if (tracker.teamSwitch) { - this.props.actions.recordLoadTime('Switch Team', 'teamSwitch'); - } - if (prevProps.isSupportedServer && !this.props.isSupportedServer) { unsupportedServer(this.props.isSystemAdmin, this.context.intl.formatMessage); } @@ -150,10 +130,6 @@ export default class ChannelBase extends PureComponent { this.updateNativeScrollView(); }); } - - if (LocalConfig.EnableMobileClientUpgrade && !ClientUpgradeListener) { - ClientUpgradeListener = require('app/components/client_upgrade_listener').default; - } } componentWillUnmount() { diff --git a/app/screens/channel/channel_base.test.js b/app/screens/channel/channel_base.test.js index bcd73f719..67a5a91a6 100644 --- a/app/screens/channel/channel_base.test.js +++ b/app/screens/channel/channel_base.test.js @@ -25,7 +25,6 @@ describe('ChannelBase', () => { getChannelStats: jest.fn(), loadChannelsForTeam: jest.fn(), markChannelViewedAndRead: jest.fn(), - recordLoadTime: jest.fn(), selectDefaultTeam: jest.fn(), selectInitialChannel: jest.fn(), }, 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 c04509d7b..7e5fe960f 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 @@ -16,7 +16,6 @@ import {preventDoubleTap} from '@utils/tap'; import {makeStyleSheetFromTheme} from '@utils/theme'; import {t} from '@utils/i18n'; -import telemetry from '@telemetry'; import {LARGE_BADGE_RIGHT_POSITION, SMALL_BADGE_RIGHT_POSITION, MAX_BADGE_RIGHT_POSITION} from '@constants/view'; export default class MainSidebarDrawerButton extends PureComponent { @@ -56,7 +55,6 @@ export default class MainSidebarDrawerButton extends PureComponent { } handlePress = preventDoubleTap(() => { - telemetry.start(['channel:open_drawer']); this.props.openSidebar(); }); diff --git a/app/screens/channel/channel_post_list/channel_post_list.js b/app/screens/channel/channel_post_list/channel_post_list.js index d05ea7684..552d7ecb1 100644 --- a/app/screens/channel/channel_post_list/channel_post_list.js +++ b/app/screens/channel/channel_post_list/channel_post_list.js @@ -16,9 +16,7 @@ import RetryBarIndicator from '@components/retry_bar_indicator'; import {TYPING_HEIGHT} from '@constants/post_draft'; import EventEmitter from '@mm-redux/utils/event_emitter'; import {getLastPostIndex} from '@mm-redux/utils/post_list'; -import tracker from '@utils/time_tracker'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; -import telemetry from '@telemetry'; import {CHANNEL} from '@constants/screen'; let ChannelIntro = null; @@ -31,7 +29,6 @@ export default class ChannelPostList extends PureComponent { getPostThread: PropTypes.func.isRequired, increasePostVisibility: PropTypes.func.isRequired, selectPost: PropTypes.func.isRequired, - recordLoadTime: PropTypes.func.isRequired, refreshChannelWithRetry: PropTypes.func.isRequired, setChannelRefreshing: PropTypes.func, }).isRequired, @@ -70,9 +67,6 @@ export default class ChannelPostList extends PureComponent { componentDidUpdate(prevProps) { if (this.props.channelId !== prevProps.channelId) { this.isLoadingMoreTop = false; - if (tracker.channelSwitch) { - this.props.actions.recordLoadTime('Switch Channel', 'channelSwitch'); - } } if (!prevProps.postIds?.length && this.props.postIds?.length > 0 && this.props.updateNativeScrollView) { @@ -99,7 +93,6 @@ export default class ChannelPostList extends PureComponent { } goToThread = (post) => { - telemetry.start(['post_list:thread']); const {actions, channelId} = this.props; const rootId = (post.root_id || post.id); @@ -163,6 +156,7 @@ export default class ChannelPostList extends PureComponent { return ( ); }; @@ -190,7 +184,7 @@ export default class ChannelPostList extends PureComponent { theme={theme} /> ); - } else { + } else if (channelId) { component = ( { getPostThread: jest.fn(), increasePostVisibility: jest.fn(), selectPost: jest.fn(), - recordLoadTime: jest.fn(), refreshChannelWithRetry: jest.fn(), }, channelId: 'channel-id', diff --git a/app/screens/channel/channel_post_list/index.js b/app/screens/channel/channel_post_list/index.js index b917f8775..0421adb25 100644 --- a/app/screens/channel/channel_post_list/index.js +++ b/app/screens/channel/channel_post_list/index.js @@ -10,7 +10,6 @@ import { refreshChannelWithRetry, } from '@actions/views/channel'; import {getPostThread} from '@actions/views/post'; -import {recordLoadTime} from 'app/actions/views/root'; import {Types} from '@constants'; import {selectPost} from '@mm-redux/actions/posts'; import {getPostIdsInCurrentChannel} from '@mm-redux/selectors/entities/posts'; @@ -46,7 +45,6 @@ function mapDispatchToProps(dispatch) { getPostThread, increasePostVisibility, selectPost, - recordLoadTime, refreshChannelWithRetry, }, dispatch), }; diff --git a/app/screens/channel/index.js b/app/screens/channel/index.js index 2325c449c..92b5b00f8 100644 --- a/app/screens/channel/index.js +++ b/app/screens/channel/index.js @@ -5,7 +5,6 @@ import {bindActionCreators} from 'redux'; import {connect} from 'react-redux'; import {loadChannelsForTeam, selectInitialChannel} from '@actions/views/channel'; -import {recordLoadTime} from '@actions/views/root'; import {selectDefaultTeam} from '@actions/views/select_team'; import {ViewTypes} from '@constants'; import {getChannelStats} from '@mm-redux/actions/channels'; @@ -59,7 +58,6 @@ function mapDispatchToProps(dispatch) { loadChannelsForTeam, selectDefaultTeam, selectInitialChannel, - recordLoadTime, }, dispatch), }; } diff --git a/app/screens/client_upgrade/client_upgrade.js b/app/screens/client_upgrade/client_upgrade.js deleted file mode 100644 index c9c1c2287..000000000 --- a/app/screens/client_upgrade/client_upgrade.js +++ /dev/null @@ -1,335 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import React, {PureComponent} from 'react'; -import {Navigation} from 'react-native-navigation'; -import PropTypes from 'prop-types'; -import { - Alert, - Image, - ScrollView, - TouchableOpacity, - View, -} from 'react-native'; -import {intlShape} from 'react-intl'; -import {SafeAreaView} from 'react-native-safe-area-context'; - -import {popTopScreen, dismissModal} from '@actions/navigation'; -import FormattedText from '@components/formatted_text'; -import StatusBar from '@components/status_bar'; -import {UpgradeTypes} from '@constants'; -import {checkUpgradeType, isUpgradeAvailable} from '@utils/client_upgrade'; -import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; -import {tryOpenURL} from '@utils/url'; - -export default class ClientUpgrade extends PureComponent { - static propTypes = { - actions: PropTypes.shape({ - logError: PropTypes.func.isRequired, - setLastUpgradeCheck: PropTypes.func.isRequired, - }).isRequired, - currentVersion: PropTypes.string, - closeAction: PropTypes.func, - userCheckedForUpgrade: PropTypes.bool, - downloadLink: PropTypes.string.isRequired, - forceUpgrade: PropTypes.bool, - latestVersion: PropTypes.string, - theme: PropTypes.object.isRequired, - upgradeType: PropTypes.string, - }; - - static contextTypes = { - intl: intlShape, - }; - - constructor(props) { - super(props); - - this.state = { - upgradeType: UpgradeTypes.NO_UPGRADE, - }; - } - - componentDidMount() { - this.navigationEventListener = Navigation.events().bindComponent(this); - - if (this.props.userCheckedForUpgrade) { - this.checkUpgrade(this.props); - } - } - - navigationButtonPressed({buttonId}) { - if (buttonId === 'close-upgrade') { - dismissModal(); - } - } - - checkUpgrade = ({minVersion, latestVersion}) => { - const {actions, currentVersion, downloadLink} = this.props; - - // We need at least minVersion or latestVersion and the app downloadlink - if (!(latestVersion || minVersion) || !downloadLink) { - return; - } - - const upgradeType = checkUpgradeType(currentVersion, minVersion, latestVersion, actions.logError); - - if (upgradeType === UpgradeTypes.NO_UPGRADE) { - return; - } - - this.setState({ - upgradeType, - }); - - actions.setLastUpgradeCheck(); - } - - handleClose = () => { - const { - closeAction, - userCheckedForUpgrade, - } = this.props; - - if (closeAction) { - closeAction(); - } else if (userCheckedForUpgrade) { - popTopScreen(); - } else { - dismissModal(); - } - }; - - handleDownload = () => { - const {downloadLink} = this.props; - const {intl} = this.context; - - const onError = () => { - Alert.alert( - intl.formatMessage({ - id: 'mobile.client_upgrade.download_error.title', - defaultMessage: 'Upgrade Error', - }), - intl.formatMessage({ - id: 'mobile.client_upgrade.download_error.message', - defaultMessage: 'An error occurred while trying to open the download link.', - }), - ); - }; - - tryOpenURL(downloadLink, onError); - }; - - renderMustUpgrade() { - const {theme} = this.props; - const styles = getStyleFromTheme(theme); - - return ( - - - - - ); - } - - renderCanUpgrade() { - const {theme} = this.props; - const styles = getStyleFromTheme(theme); - - return ( - - - - - ); - } - - renderNoUpgrade() { - const {theme} = this.props; - const styles = getStyleFromTheme(theme); - - return ( - - - - - ); - } - - renderMessageContent = () => { - const {currentVersion, forceUpgrade, latestVersion, upgradeType: passedUpgradeType, userCheckedForUpgrade, theme} = this.props; - const styles = getStyleFromTheme(theme); - const upgradeType = userCheckedForUpgrade ? this.state.upgradeType : passedUpgradeType; - - let messageComponent; - - switch (upgradeType) { - case UpgradeTypes.CAN_UPGRADE: - messageComponent = this.renderCanUpgrade(); - break; - case UpgradeTypes.MUST_UPGRADE: - messageComponent = this.renderMustUpgrade(); - break; - default: - case UpgradeTypes.NO_UPGRADE: - case UpgradeTypes.IS_BETA: - messageComponent = this.renderNoUpgrade(); - break; - } - - return ( - - {messageComponent} - {upgradeType !== UpgradeTypes.IS_BETA && ( - - )} - - {isUpgradeAvailable(this.state.upgradeType) && - - - - - {!forceUpgrade && - - - - } - - } - - ); - } - - render() { - const {theme} = this.props; - - const styles = getStyleFromTheme(theme); - - return ( - - - - - {this.renderMessageContent()} - - - ); - } -} - -const getStyleFromTheme = makeStyleSheetFromTheme((theme) => { - return { - container: { - flex: 1, - }, - logo: { - marginTop: 75, - }, - messageButton: { - marginBottom: 15, - borderWidth: 2, - borderRadius: 2, - alignItems: 'center', - justifyContent: 'center', - borderColor: theme.buttonBg, - }, - messageButtonText: { - paddingVertical: 10, - paddingHorizontal: 20, - fontWeight: '600', - color: theme.buttonBg, - }, - messageContainer: { - marginTop: 25, - flex: 1, - alignSelf: 'stretch', - alignItems: 'center', - }, - messageCloseButton: { - marginBottom: 15, - alignItems: 'center', - justifyContent: 'center', - }, - messageSubtitle: { - fontSize: 16, - marginBottom: 20, - color: theme.centerChannelColor, - textAlign: 'center', - paddingHorizontal: 30, - }, - messageTitle: { - fontSize: 24, - marginBottom: 20, - fontWeight: '600', - color: theme.centerChannelColor, - textAlign: 'center', - paddingHorizontal: 30, - }, - scrollView: { - flex: 1, - backgroundColor: changeOpacity(theme.centerChannelColor, 0.03), - }, - scrollViewContent: { - paddingBottom: 20, - alignItems: 'center', - }, - }; -}); diff --git a/app/screens/client_upgrade/index.js b/app/screens/client_upgrade/index.js deleted file mode 100644 index 630036d24..000000000 --- a/app/screens/client_upgrade/index.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. -import {bindActionCreators} from 'redux'; -import {connect} from 'react-redux'; - -import {logError} from '@mm-redux/actions/errors'; - -import {setLastUpgradeCheck} from 'app/actions/views/client_upgrade'; -import getClientUpgrade from 'app/selectors/client_upgrade'; -import {getTheme} from '@mm-redux/selectors/entities/preferences'; - -import ClientUpgrade from './client_upgrade'; - -function mapStateToProps(state) { - const {currentVersion, downloadLink, forceUpgrade, latestVersion, minVersion} = getClientUpgrade(state); - - return { - currentVersion, - downloadLink, - forceUpgrade, - latestVersion, - minVersion, - theme: getTheme(state), - }; -} - -function mapDispatchToProps(dispatch) { - return { - actions: bindActionCreators({ - logError, - setLastUpgradeCheck, - }, dispatch), - }; -} - -export default connect(mapStateToProps, mapDispatchToProps)(ClientUpgrade); diff --git a/app/screens/gallery/footer/prepare_file/prepare_file.tsx b/app/screens/gallery/footer/prepare_file/prepare_file.tsx index bdda30dc6..aa0dfa643 100644 --- a/app/screens/gallery/footer/prepare_file/prepare_file.tsx +++ b/app/screens/gallery/footer/prepare_file/prepare_file.tsx @@ -126,6 +126,8 @@ const PrepareFile = forwardRef(({intl, isLands if (path && share && !canceled) { Share.open({ + message: '', + title: '', url: `file://${path}`, showAppsToView: true, }).catch(() => { diff --git a/app/screens/gallery/gallery.js b/app/screens/gallery/gallery.js index 7c73a4992..fba7d53f4 100644 --- a/app/screens/gallery/gallery.js +++ b/app/screens/gallery/gallery.js @@ -67,6 +67,7 @@ export default class Gallery extends PureComponent { sharedElementTransitions.push({ fromId: `gallery-${file.id}`, toId: `image-${file.id}`, + duration: 300, interpolation: {type: 'accelerateDecelerate', factor: 8}, }); } @@ -79,10 +80,6 @@ export default class Gallery extends PureComponent { }); } const options = { - layout: { - backgroundColor: '#000', - componentBackgroundColor: '#000', - }, topBar: { visible: this.footer.current?.getWrappedInstance().isVisible(), background: { @@ -90,6 +87,7 @@ export default class Gallery extends PureComponent { }, title: { text: title, + color: '#FFF', }, backButton: { enableMenu: false, diff --git a/app/screens/gallery/gallery_image.tsx b/app/screens/gallery/gallery_image.tsx index b11cde810..adfa52bcd 100644 --- a/app/screens/gallery/gallery_image.tsx +++ b/app/screens/gallery/gallery_image.tsx @@ -10,6 +10,7 @@ import {calculateDimensions} from '@utils/images'; import {GalleryItemProps} from 'types/screens/gallery'; +// @ts-expect-error: Ignore the typescript error for createAnimatedComponent const AnimatedImage = Animated.createAnimatedComponent(FastImage); const GalleryImage = ({file, deviceHeight, deviceWidth, style}: GalleryItemProps) => { diff --git a/app/screens/gallery/gallery_viewer.tsx b/app/screens/gallery/gallery_viewer.tsx index 36e73c57f..e4e61e943 100644 --- a/app/screens/gallery/gallery_viewer.tsx +++ b/app/screens/gallery/gallery_viewer.tsx @@ -4,7 +4,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, greaterOrEq, greaterThan, multiply, neq, not, onChange, set, sub, useCode, Easing, ceil} from 'react-native-reanimated'; +import Animated, {abs, add, and, call, clockRunning, cond, divide, eq, greaterOrEq, greaterThan, multiply, neq, not, onChange, set, sub, useCode, EasingNode, ceil} from 'react-native-reanimated'; 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'; @@ -216,7 +216,7 @@ const GalleryViewer = (props: GalleryProps) => { ], set(translateY, timing({from: translateY, to: 0}))), ]), cond(and(eq(pan.state, State.END), neq(translationX, 0)), [ - set(translateX, timing({clock, from: translateX, to: snapTo, duration: 250, easing: Easing.out(Easing.quad)})), + set(translateX, timing({clock, from: translateX, to: snapTo, duration: 250, easing: EasingNode.out(EasingNode.quad)})), set(offsetX, translateX), cond(not(clockRunning(clock)), [ vec.set(translate, 0), diff --git a/app/screens/index.js b/app/screens/index.js index 8b03a9159..d15c61f7e 100644 --- a/app/screens/index.js +++ b/app/screens/index.js @@ -61,9 +61,6 @@ Navigation.setLazyComponentRegistrator((screenName) => { case 'ChannelNotificationPreference': screen = require('@screens/channel_notification_preference').default; break; - case 'ClientUpgrade': - screen = require('@screens/client_upgrade').default; - break; case 'ClockDisplaySettings': screen = require('@screens/settings/clock_display').default; break; @@ -149,6 +146,9 @@ Navigation.setLazyComponentRegistrator((screenName) => { case 'OptionsModal': screen = require('@screens/options_modal').default; break; + case 'PerfMetrics': + screen = require('@screens/perf_metrics').default; + break; case 'Permalink': screen = require('@screens/permalink').default; break; diff --git a/app/screens/login/login.js b/app/screens/login/login.js index 7c26c0150..51ad858a7 100644 --- a/app/screens/login/login.js +++ b/app/screens/login/login.js @@ -27,11 +27,9 @@ import StatusBar from '@components/status_bar'; import {t} from '@utils/i18n'; import {preventDoubleTap} from '@utils/tap'; import {changeOpacity} from '@utils/theme'; -import tracker from '@utils/time_tracker'; import mattermostManaged from 'app/mattermost_managed'; import {GlobalStyles} from 'app/styles'; -import telemetry from 'app/telemetry'; export const mfaExpectedErrors = ['mfa.validate_token.authenticate.app_error', 'ent.mfa.validate_token.authenticate.app_error']; @@ -75,9 +73,6 @@ export default class Login extends PureComponent { } goToChannel = () => { - telemetry.remove(['start:overall']); - - tracker.initialLoad = Date.now(); this.scheduleSessionExpiredNotification(); resetToChannel(); diff --git a/app/screens/perf_metrics/index.tsx b/app/screens/perf_metrics/index.tsx new file mode 100644 index 000000000..8b0c79d75 --- /dev/null +++ b/app/screens/perf_metrics/index.tsx @@ -0,0 +1,46 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import React from 'react'; +import {FlatList, View} from 'react-native'; +import {useSelector} from 'react-redux'; + +import {getTheme} from '@mm-redux/selectors/entities/preferences'; +import {changeOpacity, makeStyleFromTheme} from '@mm-redux/utils/theme_utils'; +import telemetry, {PerfMetric} from '@telemetry'; + +import type {Theme} from '@mm-redux/types/preferences'; + +import PerfItem from './item'; + +const getStyleSheet = makeStyleFromTheme((theme: Theme) => { + return { + container: { + backgroundColor: changeOpacity(theme.centerChannelColor, 0.1), + flex: 1, + }, + }; +}); + +const PerfMetrics = () => { + const theme: Theme = useSelector(getTheme); + const style = getStyleSheet(theme); + const data: PerfMetric[] = telemetry.getMetrics(); + + return ( + + `${item.name}-${item.startTime}`} + renderItem={({item}) => ( + + )} + /> + + ); +}; + +export default PerfMetrics; diff --git a/app/screens/perf_metrics/item.tsx b/app/screens/perf_metrics/item.tsx new file mode 100644 index 000000000..4cf27bd48 --- /dev/null +++ b/app/screens/perf_metrics/item.tsx @@ -0,0 +1,88 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import React from 'react'; +import {Text, View} from 'react-native'; + +import {makeStyleSheetFromTheme} from '@utils/theme'; + +import type {Theme} from '@mm-redux/types/preferences'; +import type {PerfMetric} from '@telemetry'; + +type PerfItemProps = { + metric: PerfMetric; + theme: Theme +}; + +const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ + container: { + alignItems: 'flex-start', + backgroundColor: theme.centerChannelBg, + margin: 5, + paddingVertical: 10, + paddingHorizontal: 5, + borderRadius: 5, + }, + totalTime: { + fontWeight: 'bold', + borderWidth: 1, + borderRadius: 10, + paddingVertical: 1, + paddingHorizontal: 4, + textAlign: 'center', + marginVertical: 3, + }, + text: { + color: theme.centerChannelColor, + fontSize: 16, + }, + extra: { + paddingHorizontal: 5, + paddingVertical: 3, + flex: 1, + }, + name: { + fontSize: 18, + fontWeight: 'bold', + textAlign: 'center', + padding: 0, + }, +})); + +const PerfItem = ({metric, theme}: PerfItemProps) => { + const styles = getStyleSheet(theme); + const time = (metric.endTime || 0) - metric.startTime; + + const getStatusTextColor = (totalTime: number) => { + if (totalTime <= 500) { + return theme.onlineIndicator; + } + + if (totalTime <= 2000) { + return theme.awayIndicator; + } + + return theme.dndIndicator; + }; + + const getStatusStyles = (totalTime: number) => ({ + color: getStatusTextColor(totalTime), + borderColor: getStatusTextColor(totalTime), + }); + + return ( + + + {metric.name} + + + {time + 'ms'} + + + {metric.extra} + + + ); +}; + +export default PerfItem; diff --git a/app/screens/select_server/index.js b/app/screens/select_server/index.js index cdaf07d23..1c2647694 100644 --- a/app/screens/select_server/index.js +++ b/app/screens/select_server/index.js @@ -4,31 +4,25 @@ import {bindActionCreators} from 'redux'; import {connect} from 'react-redux'; -import {setLastUpgradeCheck} from '@actions/views/client_upgrade'; import {loadConfigAndLicense} from '@actions/views/root'; import {handleServerUrlChanged} from '@actions/views/select_server'; import {scheduleExpiredNotification} from '@actions/views/session'; import {getPing, resetPing, setServerVersion} from '@mm-redux/actions/general'; import {login} from '@mm-redux/actions/users'; import {getConfig, getLicense} from '@mm-redux/selectors/entities/general'; -import getClientUpgrade from '@selectors/client_upgrade'; import SelectServer from './select_server'; function mapStateToProps(state) { const config = getConfig(state); const license = getLicense(state); - const {currentVersion, latestVersion, minVersion} = getClientUpgrade(state); return { ...state.views.selectServer, config, - currentVersion, deepLinkURL: state.views.root.deepLinkURL, hasConfigAndLicense: Object.keys(config).length > 0 && Object.keys(license).length > 0, - latestVersion, license, - minVersion, }; } @@ -41,7 +35,6 @@ function mapDispatchToProps(dispatch) { loadConfigAndLicense, login, resetPing, - setLastUpgradeCheck, setServerVersion, }, dispatch), }; diff --git a/app/screens/select_server/select_server.js b/app/screens/select_server/select_server.js index 674d9c43a..9b83189e4 100644 --- a/app/screens/select_server/select_server.js +++ b/app/screens/select_server/select_server.js @@ -35,16 +35,13 @@ import fetchConfig from '@init/fetch'; import globalEventHandler from '@init/global_event_handler'; import {Client4} from '@client/rest'; import {isMinimumServerVersion} from '@mm-redux/utils/helpers'; -import {checkUpgradeType, isUpgradeAvailable} from '@utils/client_upgrade'; import {t} from '@utils/i18n'; import {preventDoubleTap} from '@utils/tap'; import {changeOpacity} from '@utils/theme'; -import tracker from '@utils/time_tracker'; import {isValidUrl, stripTrailingSlashes} from '@utils/url'; import mattermostBucket from 'app/mattermost_bucket'; import {GlobalStyles} from 'app/styles'; -import telemetry from 'app/telemetry'; export default class SelectServer extends PureComponent { static propTypes = { @@ -55,16 +52,12 @@ export default class SelectServer extends PureComponent { loadConfigAndLicense: PropTypes.func.isRequired, login: PropTypes.func.isRequired, resetPing: PropTypes.func.isRequired, - setLastUpgradeCheck: PropTypes.func.isRequired, setServerVersion: PropTypes.func.isRequired, }).isRequired, allowOtherServers: PropTypes.bool, config: PropTypes.object, - currentVersion: PropTypes.string, hasConfigAndLicense: PropTypes.bool.isRequired, - latestVersion: PropTypes.string, license: PropTypes.object, - minVersion: PropTypes.string, serverUrl: PropTypes.string.isRequired, deepLinkURL: PropTypes.string, }; @@ -115,25 +108,11 @@ export default class SelectServer extends PureComponent { this.certificateListener = DeviceEventEmitter.addListener('RNFetchBlobCertificate', this.selectCertificate); this.sslProblemListener = DeviceEventEmitter.addListener('RNFetchBlobSslProblem', this.handleSslProblem); - - telemetry.end(['start:select_server_screen']); - telemetry.save(); } componentDidUpdate(prevProps, prevState) { if (this.state.connected && this.props.hasConfigAndLicense && !(prevState.connected && prevProps.hasConfigAndLicense)) { - if (LocalConfig.EnableMobileClientUpgrade) { - this.props.actions.setLastUpgradeCheck(); - const {currentVersion, minVersion, latestVersion} = this.props; - const upgradeType = checkUpgradeType(currentVersion, minVersion, latestVersion); - if (isUpgradeAvailable(upgradeType)) { - this.handleShowClientUpgrade(upgradeType); - } else { - this.handleLoginOptions(this.props); - } - } else { - this.handleLoginOptions(this.props); - } + this.handleLoginOptions(); } } @@ -251,9 +230,9 @@ export default class SelectServer extends PureComponent { } }); - handleLoginOptions = async (props = this.props) => { + handleLoginOptions = async () => { const {formatMessage} = this.context.intl; - const {config, license} = props; + const {config, license} = this.props; const samlEnabled = config.EnableSaml === 'true' && license.IsLicensed === 'true' && license.SAML === 'true'; const gitlabEnabled = config.EnableSignUpWithGitLab === 'true'; const googleEnabled = config.EnableSignUpWithGoogle === 'true' && license.IsLicensed === 'true'; @@ -293,23 +272,6 @@ export default class SelectServer extends PureComponent { } }; - handleShowClientUpgrade = (upgradeType) => { - const {formatMessage} = this.context.intl; - const screen = 'ClientUpgrade'; - const title = formatMessage({id: 'mobile.client_upgrade', defaultMessage: 'Client Upgrade'}); - const passProps = { - closeAction: this.handleLoginOptions, - upgradeType, - }; - const options = { - statusBar: { - visible: false, - }, - }; - - this.goToNextScreen(screen, title, passProps, options); - }; - handleTextChanged = (url) => { this.setState({url}); }; @@ -319,8 +281,6 @@ export default class SelectServer extends PureComponent { }; loginWithCertificate = async () => { - tracker.initialLoad = Date.now(); - await this.props.actions.login('credential', 'password'); this.scheduleSessionExpiredNotification(); diff --git a/app/screens/select_server/select_server.test.js b/app/screens/select_server/select_server.test.js index 6ec1699e9..c5e1a90e2 100644 --- a/app/screens/select_server/select_server.test.js +++ b/app/screens/select_server/select_server.test.js @@ -14,7 +14,6 @@ describe('SelectServer', () => { loadConfigAndLicense: jest.fn(), login: jest.fn(), resetPing: jest.fn(), - setLastUpgradeCheck: jest.fn(), setServerVersion: jest.fn(), }; diff --git a/app/screens/settings/advanced_settings/advanced_settings.js b/app/screens/settings/advanced_settings/advanced_settings.js index f94d8e8e3..b716a9a83 100644 --- a/app/screens/settings/advanced_settings/advanced_settings.js +++ b/app/screens/settings/advanced_settings/advanced_settings.js @@ -15,7 +15,7 @@ import { import {SafeAreaView} from 'react-native-safe-area-context'; import * as Sentry from '@sentry/react-native'; -import {dismissAllModals} from '@actions/navigation'; +import {dismissAllModals, goToScreen} from '@actions/navigation'; import Config from '@assets/config'; import StatusBar from '@components/status_bar'; import {getFormattedFileSize} from '@mm-redux/utils/file_utils'; @@ -137,6 +137,10 @@ class AdvancedSettings extends Component { ); }; + showPerfMetrics = preventDoubleTap(() => { + goToScreen('PerfMetrics', 'Performance Metrics'); + }); + render() { const {theme} = this.props; const style = getStyleSheet(theme); @@ -160,12 +164,25 @@ class AdvancedSettings extends Component { iconName='trash-can-outline' isDestructor={true} onPress={this.clearOfflineCache} - separator={false} + separator={Boolean(Config.ShowPerformanceMarkers)} showArrow={false} rightComponent={this.renderCacheFileSize()} theme={theme} testID='advanced_settings.delete_documents_and_data.action' /> + {Config.ShowPerformanceMarkers && + + } {this.renderSentryDebugOptions()} diff --git a/app/screens/settings/general/settings.js b/app/screens/settings/general/settings.js index 538a176ab..e86c07bc1 100644 --- a/app/screens/settings/general/settings.js +++ b/app/screens/settings/general/settings.js @@ -15,7 +15,6 @@ import {Navigation} from 'react-native-navigation'; import {SafeAreaView} from 'react-native-safe-area-context'; import {goToScreen, dismissModal} from '@actions/navigation'; -import LocalConfig from '@assets/config'; import StatusBar from '@components/status_bar'; import SettingsItem from '@screens/settings/settings_item'; import {t} from '@utils/i18n'; @@ -123,17 +122,6 @@ class Settings extends PureComponent { goToScreen(screen, title, passProps); }); - goToClientUpgrade = preventDoubleTap(() => { - const {intl} = this.props; - const screen = 'ClientUpgrade'; - const title = intl.formatMessage({id: 'mobile.client_upgrade', defaultMessage: 'Upgrade App'}); - const passProps = { - userCheckedForUpgrade: true, - }; - - goToScreen(screen, title, passProps); - }); - openErrorEmail = preventDoubleTap(() => { const {config, intl} = this.props; const recipient = config.SupportEmail; @@ -246,18 +234,6 @@ class Settings extends PureComponent { theme={theme} separator={true} /> - {LocalConfig.EnableMobileClientUpgrade && LocalConfig.EnableMobileClientUpgradeUserSetting && - - } { const mainProps = { actions: { getTeams: jest.fn(), - logChannelSwitch: jest.fn(), makeDirectChannel: jest.fn(), setChannelDisplayName: jest.fn(), setChannelLoading: jest.fn(), diff --git a/app/screens/sso/index.tsx b/app/screens/sso/index.tsx index 37148fb5e..c6b459f70 100644 --- a/app/screens/sso/index.tsx +++ b/app/screens/sso/index.tsx @@ -8,7 +8,6 @@ import type {GlobalState} from '@mm-redux/types/store'; import {resetToChannel} from 'app/actions/navigation'; import {ViewTypes} from 'app/constants'; -import tracker from 'app/utils/time_tracker'; import {scheduleExpiredNotification} from '@actions/views/session'; import {ssoLogin} from '@actions/views/user'; import emmProvider from '@init/emm_provider'; @@ -92,7 +91,6 @@ function SSO({intl, ssoType}: SSOProps) { }; const goToChannel = () => { - tracker.initialLoad = Date.now(); scheduleSessionExpiredNotification(); resetToChannel(); }; diff --git a/app/selectors/client_upgrade.js b/app/selectors/client_upgrade.js deleted file mode 100644 index bfb0f2295..000000000 --- a/app/selectors/client_upgrade.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. -import {createSelector} from 'reselect'; -import {Platform} from 'react-native'; -import DeviceInfo from 'react-native-device-info'; - -import LocalConfig from '@assets/config'; -import {getConfig} from '@mm-redux/selectors/entities/general'; - -const getClientUpgrade = createSelector( - getConfig, - (config) => { - const {AndroidMinVersion, AndroidLatestVersion, IosMinVersion, IosLatestVersion} = config; - - let minVersion = IosMinVersion; - let latestVersion = IosLatestVersion; - let downloadLink = LocalConfig.MobileClientUpgradeIosIpaLink; - if (Platform.OS === 'android') { - minVersion = AndroidMinVersion; - latestVersion = AndroidLatestVersion; - downloadLink = LocalConfig.MobileClientUpgradeAndroidApkLink; - } - - return { - currentVersion: DeviceInfo.getVersion(), - downloadLink, - forceUpgrade: LocalConfig.EnableForceMobileClientUpgrade, - latestVersion, - minVersion, - }; - }, -); - -export default getClientUpgrade; diff --git a/app/selectors/device.js b/app/selectors/device.js index db728fa59..79b3f5da6 100644 --- a/app/selectors/device.js +++ b/app/selectors/device.js @@ -9,10 +9,6 @@ export function getConnection(state) { return state.device.connection; } -export function getStatusBarHeight(state) { - return state.device.statusBarHeight; -} - export function isLandscape(state) { return state.device.dimension.deviceWidth > state.device.dimension.deviceHeight; } diff --git a/app/telemetry/index.js b/app/telemetry/index.js deleted file mode 100644 index d28de41c1..000000000 --- a/app/telemetry/index.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import telemetry from './telemetry'; - -export default telemetry; diff --git a/app/telemetry/index.ts b/app/telemetry/index.ts new file mode 100644 index 000000000..7fa3729bc --- /dev/null +++ b/app/telemetry/index.ts @@ -0,0 +1,87 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {getTimeSinceStartup} from 'react-native-startup-time'; + +export interface PerfMetric { + name: string; + startTime: number; + endTime?: number; + extra: string; +} + +export const PERF_MARKERS = { + START_SINCE_LAUNCH: 'Start Since Launch', + CHANNEL_RENDER: 'Channel Render', + CHANNEL_SWITCH: 'Channe Switch', +}; + +class Telemetry { + metrics: PerfMetric[]; + currentMetrics: Record; + + constructor() { + this.metrics = []; + this.currentMetrics = {}; + } + + getMetrics = () => { + return this.metrics; + } + + reset() { + this.currentMetrics = {}; + } + + start(names = [], time = 0, extra = []) { + const startTime = Date.now(); + + names.forEach((name, index) => { + this.currentMetrics[name] = { + extra: extra[index], + name, + startTime: time || startTime, + }; + }); + } + + end(names = []) { + const endTime = Date.now(); + names.forEach((name) => { + const finalMetric = this.currentMetrics[name]; + + if (finalMetric && finalMetric.startTime >= 0) { + this.metrics.push({ + ...finalMetric, + endTime, + }); + + Reflect.deleteProperty(this.currentMetrics, name); + } + }); + } + + startSinceLaunch(extra = '') { + getTimeSinceStartup().then((endTime) => { + this.metrics.push({ + extra, + name: PERF_MARKERS.START_SINCE_LAUNCH, + startTime: 0, + endTime, + }); + }); + } + + remove(names = []) { + names.forEach((name) => { + const currentMetric = this.currentMetrics[name]; + + if (currentMetric) { + Reflect.deleteProperty(this.currentMetrics, name); + } + }); + } +} + +const telemetry = new Telemetry(); +export default telemetry; diff --git a/app/telemetry/telemetry.android.js b/app/telemetry/telemetry.android.js deleted file mode 100644 index 8a3faa602..000000000 --- a/app/telemetry/telemetry.android.js +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import LocalConfig from '@assets/config'; -import Store from '@store/store'; - -import { - saveToTelemetryServer, - getDeviceInfo, - setTraceRecord, -} from './telemetry_utils'; - -class Telemetry { - constructor() { - this.appStartTime = 0; - this.reactInitializedStartTime = 0; - this.reactInitializedEndTime = 0; - this.metrics = []; - this.currentMetrics = {}; - this.pendingSinceLaunchMetrics = []; - } - - setAppStartTime(startTime) { - this.appStartTime = startTime; - } - - reset() { - this.metrics = []; - this.currentMetrics = {}; - this.pendingSinceLaunchMetrics = []; - } - - canSendTelemetry() { - const {config} = Store.redux.getState().entities.general; - return Boolean(!__DEV__ && config.EnableDiagnostics === 'true' && LocalConfig.TelemetryEnabled); - } - - start(names = [], time = 0) { - if (this.canSendTelemetry()) { - const d = new Date(); - const startTime = d.getTime(); - - names.forEach((name) => { - this.currentMetrics[name] = { - name, - startTime: time || startTime, - }; - }); - } - } - - end(names = []) { - if (this.canSendTelemetry()) { - const d = new Date(); - const endTime = d.getTime(); - names.forEach((name) => { - const finalMetric = this.currentMetrics[name]; - - if (finalMetric && finalMetric.startTime > 0) { - this.metrics.push({ - ...finalMetric, - endTime, - }); - - Reflect.deleteProperty(this.currentMetrics, name); - } - }); - } - } - - include(metrics = []) { - if (this.canSendTelemetry()) { - metrics.forEach((metric) => { - this.metrics.push({ - name: metric.name, - startTime: metric.startTime, - endTime: metric.endTime, - }); - }); - } - } - - startSinceLaunch(names = []) { - if (this.canSendTelemetry()) { - const d = new Date(); - const endTime = d.getTime(); - - names.forEach((name) => { - if (!this.appStartTime) { - this.pendingSinceLaunchMetrics.push({ - name, - endTime, - }); - return; - } - - this.metrics.push({ - name, - startTime: this.appStartTime, - endTime, - }); - }); - } - } - - remove(names = []) { - names.forEach((name) => { - const currentMetric = this.currentMetrics[name]; - - if (currentMetric) { - Reflect.deleteProperty(this.currentMetrics, name); - } - }); - } - - async save() { - if (!this.canSendTelemetry()) { - return; - } - - this.pendingSinceLaunchMetrics.forEach((pendingMetric) => { - this.metrics.push({ - ...pendingMetric, - startTime: this.appStartTime, - }); - }); - - if (this.metrics.length === 0) { - return; - } - - const metrics = this.metrics.filter((m) => m.endTime && m.startTime).map((metric) => { - const {name, startTime, endTime} = metric; - let dur; - if (endTime && startTime) { - dur = (endTime - startTime) * 1000; - } - - return setTraceRecord({ - name, - time: startTime * 1000, - dur, - }); - }); - - const {config} = Store.redux.getState().entities.general; - const deviceInfo = getDeviceInfo(); - deviceInfo.server_version = config.Version; - - saveToTelemetryServer({trace_events: metrics, device_info: deviceInfo}); - - this.reset(); - } -} - -const telemetry = new Telemetry(); -export default telemetry; diff --git a/app/telemetry/telemetry.ios.js b/app/telemetry/telemetry.ios.js deleted file mode 100644 index 4a50b58b5..000000000 --- a/app/telemetry/telemetry.ios.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -class Telemetry { - constructor() { - this.appStartTime = 0; - this.reactInitializedStartTime = 0; - this.reactInitializedEndTime = 0; - this.metrics = []; - this.currentMetrics = {}; - this.pendingSinceLaunchMetrics = []; - } - - setAppStartTime = () => true; - - reset = () => true; - - canSendTelemetry = () => false; - - start = () => true; - - end = () => true; - - include = () => true; - - startSinceLaunch = () => true; - - remove = () => true; - - save = () => true; -} - -const telemetry = new Telemetry(); -export default telemetry; diff --git a/app/telemetry/telemetry_utils.js b/app/telemetry/telemetry_utils.js deleted file mode 100644 index 781afad30..000000000 --- a/app/telemetry/telemetry_utils.js +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import {Dimensions} from 'react-native'; -import DeviceInfo from 'react-native-device-info'; -import * as RNLocalize from 'react-native-localize'; - -import LocalConfig from '@assets/config'; - -export function saveToTelemetryServer(data) { - const { - TelemetryEnabled, - TelemetryUrl, - TelemetryApiKey, - } = LocalConfig; - - if (TelemetryEnabled && TelemetryUrl) { - fetch(TelemetryUrl, { - method: 'post', - body: JSON.stringify({data}), - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - 'x-api-key': TelemetryApiKey, - }, - }); - } -} - -const presetTID = { - 'start:overall': 0, - 'start:process_packages': 1, - 'start:content_appeared': 2, - 'start:select_server_screen': 3, - 'start:channel_screen': 4, - 'team:switch': 5, - 'channel:loading': 6, - 'channel:switch_loaded': 7, - 'channel:switch_initial': 8, - 'channel:close_drawer': 9, - 'channel:open_drawer': 10, - 'posts:loading': 11, - 'post_list:thread': 12, - 'post_list:permalink': 13, -}; - -export function setTraceRecord({ - name, - time: ts, - dur = 0, - instanceKey = 0, - pid = 0, -}) { - const tid = presetTID[name]; - - return { - cat: 'react-native', - ph: 'X', - name, - ts, - dur, - pid, - tid, - args: { - instanceKey, - tag: name, - }, - }; -} - -export async function getDeviceInfo() { - const {height, width} = Dimensions.get('window'); - - return { - api_level: await DeviceInfo.getAPILevel(), - build_number: DeviceInfo.getBuildNumber(), - bundle_id: DeviceInfo.getBundleId(), - brand: DeviceInfo.getBrand(), - country: RNLocalize.getCountry(), - device_id: DeviceInfo.getDeviceId(), - device_locale: RNLocalize.getLocales()[0].languageCode, - device_type: DeviceInfo.getDeviceType(), - device_unique_id: DeviceInfo.getUniqueID(), - height: height ? Math.floor(height) : 0, - is_emulator: await DeviceInfo.isEmulator(), - is_tablet: DeviceInfo.isTablet(), - manufacturer: await DeviceInfo.getManufacturer(), - max_memory: await DeviceInfo.getMaxMemory(), - model: DeviceInfo.getModel(), - system_name: DeviceInfo.getSystemName(), - system_version: DeviceInfo.getSystemVersion(), - timezone: RNLocalize.getTimeZone(), - app_version: DeviceInfo.getVersion(), - width: width ? Math.floor(width) : 0, - }; -} - -export default { - getDeviceInfo, - setTraceRecord, -}; - diff --git a/app/utils/client_upgrade.js b/app/utils/client_upgrade.js deleted file mode 100644 index 65c4dd297..000000000 --- a/app/utils/client_upgrade.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. -import semver from 'semver'; - -import LocalConfig from '@assets/config'; -import {UpgradeTypes} from '@constants'; - -export function checkUpgradeType(currentVersion, minVersion, latestVersion, logError) { - let upgradeType = UpgradeTypes.NO_UPGRADE; - - try { - if (semver.gt(currentVersion, latestVersion)) { - upgradeType = UpgradeTypes.IS_BETA; - } else if (minVersion && semver.lt(currentVersion, minVersion)) { - upgradeType = UpgradeTypes.MUST_UPGRADE; - } else if (latestVersion && semver.lt(currentVersion, latestVersion)) { - if (LocalConfig.EnableForceMobileClientUpgrade) { - upgradeType = UpgradeTypes.MUST_UPGRADE; - } else { - upgradeType = UpgradeTypes.CAN_UPGRADE; - } - } - } catch (error) { - logError(error.message); - } - - return upgradeType; -} - -export function isUpgradeAvailable(upgradeType) { - return [ - UpgradeTypes.CAN_UPGRADE, - UpgradeTypes.MUST_UPGRADE, - ].includes(upgradeType); -} diff --git a/app/utils/theme.js b/app/utils/theme.js index 08e695dda..eb1a24cd5 100644 --- a/app/utils/theme.js +++ b/app/utils/theme.js @@ -11,7 +11,6 @@ import {mergeNavigationOptions} from 'app/actions/navigation'; const MODAL_SCREENS_WITHOUT_BACK = [ 'AddReaction', 'ChannelInfo', - 'ClientUpgrade', 'CreateChannel', 'EditPost', 'ErrorTeamsList', diff --git a/app/utils/time_tracker.js b/app/utils/time_tracker.js deleted file mode 100644 index 9a764cf5f..000000000 --- a/app/utils/time_tracker.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -export default { - initialLoad: 0, - channelSwitch: 0, - teamSwitch: 0, -}; diff --git a/assets/base/config.json b/assets/base/config.json index d465a5ac2..789e7c735 100644 --- a/assets/base/config.json +++ b/assets/base/config.json @@ -1,17 +1,19 @@ { "DefaultServerUrl": "", "TestServerUrl": "http://localhost:8065", - "DefaultTheme": "default", "ShowErrorsList": false, - "MinServerVersion": "4.0.0", "EELearnURL": "about.mattermost.com", "TeamEditionLearnURL": "mattermost.org", "AboutTeamURL": "http://www.mattermost.org/", - "AboutEnterpriseURL": "http://about.mattermost.com/", - "PlatformNoticeURL": "https://about.mattermost.com/platform-notice-txt/", + "AboutEnterpriseURL": "https://mattermost.com/", + "PlatformNoticeURL": "https://mattermost.com/platform-notice-txt/", "MobileNoticeURL": "https://about.mattermost.com/mobile-notice-txt/", "RudderApiKey": "", + "AutoSelectServerUrl": false, + "CustomRequestHeaders": {}, + "ExperimentalNormalizeMarkdownLinks": false, + "HideEmailLoginExperimental": false, "HideGitLabLoginExperimental": false, "HideLDAPLoginExperimental": false, @@ -19,6 +21,7 @@ "HideO365LoginExperimental": false, "SentryEnabled": false, + "ShowSentryDebugOptions": false, "SentryDsnIos": "", "SentryDsnAndroid": "", "SentryOptions": { @@ -28,22 +31,6 @@ "console": true } }, - - "ExperimentalNormalizeMarkdownLinks": false, - - "AutoSelectServerUrl": false, - - "EnableMobileClientUpgrade": false, - "EnableMobileClientUpgradeUserSetting": false, - "EnableForceMobileClientUpgrade": false, - "MobileClientUpgradeAndroidApkLink": "https://about.mattermost.com/mattermost-android-app/", - "MobileClientUpgradeIosIpaLink": "https://about.mattermost.com/mattermost-ios-app/", - - "ShowSentryDebugOptions": false, - - "CustomRequestHeaders": {}, - - "TelemetryEnabled": false, - "TelemetryUrl": "", - "TelemetryApiKey": "" + + "ShowPerformanceMarkers": false } diff --git a/assets/base/i18n/en.json b/assets/base/i18n/en.json index 3f09ea1a2..5dea6edcb 100644 --- a/assets/base/i18n/en.json +++ b/assets/base/i18n/en.json @@ -240,23 +240,6 @@ "mobile.channel_list.unreads": "UNREADS", "mobile.channel_loader.still_loading": "Still trying to load your content...", "mobile.channel_members.add_members_alert": "You must select at least one member to add to the channel.", - "mobile.client_upgrade": "Update App", - "mobile.client_upgrade.can_upgrade_subtitle": "A new version is available for download.", - "mobile.client_upgrade.can_upgrade_title": "Update Available", - "mobile.client_upgrade.close": "Update Later", - "mobile.client_upgrade.current_version": "Latest Version: {version}", - "mobile.client_upgrade.download_error.message": "An error occurred downloading the new version.", - "mobile.client_upgrade.download_error.title": "Unable to Install Update", - "mobile.client_upgrade.latest_version": "Your Version: {version}", - "mobile.client_upgrade.listener.dismiss_button": "Dismiss", - "mobile.client_upgrade.listener.learn_more_button": "Learn More", - "mobile.client_upgrade.listener.message": "A client upgrade is available!", - "mobile.client_upgrade.listener.upgrade_button": "Upgrade", - "mobile.client_upgrade.must_upgrade_subtitle": "Please update the app to continue.", - "mobile.client_upgrade.must_upgrade_title": "Update Required", - "mobile.client_upgrade.no_upgrade_subtitle": "You already have the latest version.", - "mobile.client_upgrade.no_upgrade_title": "Your App Is Up to Date", - "mobile.client_upgrade.upgrade": "Update", "mobile.commands.error_title": "Error Executing Command", "mobile.components.error_list.dismiss_all": "Dismiss All", "mobile.components.select_server_view.connect": "Connect", @@ -525,7 +508,6 @@ "mobile.server_ssl.error.title": "Untrusted Certificate", "mobile.server_upgrade.alert_description": "This server version is unsupported and users will be exposed to compatibility issues that cause crashes or severe bugs breaking core functionality of the app. Upgrading to server version {serverVersion} or later is required.", "mobile.server_upgrade.button": "OK", - "mobile.server_upgrade.description": "\nA server upgrade is required to use the Mattermost app. Please ask your System Administrator for details.\n", "mobile.server_upgrade.dismiss": "Dismiss", "mobile.server_upgrade.learn_more": "Learn More", "mobile.server_upgrade.title": "Server upgrade required", @@ -536,7 +518,6 @@ "mobile.set_status.dnd": "Do Not Disturb", "mobile.set_status.offline": "Offline", "mobile.set_status.online": "Online", - "mobile.settings.modal.check_for_upgrade": "Check for Updates", "mobile.share_extension.channel": "Channel", "mobile.share_extension.error_close": "Close", "mobile.share_extension.error_message": "An error has occurred while using the share extension.", diff --git a/detox/e2e/support/ui/screen/general_settings.js b/detox/e2e/support/ui/screen/general_settings.js index 75ca32c32..075577c7b 100644 --- a/detox/e2e/support/ui/screen/general_settings.js +++ b/detox/e2e/support/ui/screen/general_settings.js @@ -11,7 +11,6 @@ class GeneralSettingsScreen { displayAction: 'general_settings.display.action', selectTeamAction: 'general_settings.select_team.action', advancedAction: 'general_settings.advanced.action', - checkForUpgradeAction: 'general_settings.checkForUpgrade.action', aboutAction: 'general_settings.about.action', helpAction: 'general_settings.help.action', reportAction: 'general_settings.report.action', @@ -23,7 +22,6 @@ class GeneralSettingsScreen { displayAction = element(by.id(this.testID.displayAction)); selectTeamAction = element(by.id(this.testID.selectTeamAction)); advancedAction = element(by.id(this.testID.advancedAction)); - checkForUpgradeAction = element(by.id(this.testID.checkForUpgradeAction)); aboutAction = element(by.id(this.testID.aboutAction)); helpAction = element(by.id(this.testID.helpAction)); reportAction = element(by.id(this.testID.reportAction)); diff --git a/detox/package-lock.json b/detox/package-lock.json index 1dc1e3378..61649a1af 100644 --- a/detox/package-lock.json +++ b/detox/package-lock.json @@ -152,13 +152,31 @@ } }, "@babel/helper-hoist-variables": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", - "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", "dev": true, "requires": { - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-member-expression-to-functions": { @@ -344,6 +362,16 @@ "@babel/helper-plugin-utils": "^7.13.0" } }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.13.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", + "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" + } + }, "@babel/plugin-proposal-dynamic-import": { "version": "7.13.8", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", @@ -448,6 +476,34 @@ "@babel/helper-plugin-utils": "^7.13.0" } }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + }, + "dependencies": { + "@babel/helper-create-class-features-plugin": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.1.tgz", + "integrity": "sha512-r8rsUahG4ywm0QpGcCrLaUSOuNAISR3IZCg4Fx05Ozq31aCUrQsTLH6KPxy0N5ULoQ4Sn9qjNdGNtbPWAC6hYg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13" + } + } + } + }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", @@ -485,6 +541,15 @@ "@babel/helper-plugin-utils": "^7.12.13" } }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -575,6 +640,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, "@babel/plugin-syntax-top-level-await": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", @@ -614,12 +688,12 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", - "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.1.tgz", + "integrity": "sha512-2mQXd0zBrwfp0O1moWIhPpEeTKDvxyHcnma3JATVP1l+CctWBuot6OJG8LQ4DnBj4ZZPSmlb/fm4mu47EOAnVA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-classes": { @@ -647,9 +721,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", - "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", + "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" @@ -722,26 +796,160 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", - "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", + "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/generator": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "dev": true + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", - "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-simple-access": "^7.13.12", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/generator": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "dev": true + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-modules-systemjs": { @@ -758,13 +966,80 @@ } }, "@babel/plugin-transform-modules-umd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", - "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "dev": true + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-named-capturing-groups-regex": { @@ -911,18 +1186,19 @@ } }, "@babel/preset-env": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.15.tgz", - "integrity": "sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.1.tgz", + "integrity": "sha512-0M4yL1l7V4l+j/UHvxcdvNfLB9pPtIooHTbEhgD/6UGyh8Hy3Bm1Mj0buzjDXATCSz3JFibVdnoJZCrlUCanrQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-compilation-targets": "^7.13.13", + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-validator-option": "^7.12.17", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", "@babel/plugin-proposal-async-generator-functions": "^7.13.15", "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-class-static-block": "^7.13.11", "@babel/plugin-proposal-dynamic-import": "^7.13.8", "@babel/plugin-proposal-export-namespace-from": "^7.12.13", "@babel/plugin-proposal-json-strings": "^7.13.8", @@ -933,9 +1209,11 @@ "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", "@babel/plugin-proposal-optional-chaining": "^7.13.12", "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -945,14 +1223,15 @@ "@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-private-property-in-object": "^7.14.0", "@babel/plugin-syntax-top-level-await": "^7.12.13", "@babel/plugin-transform-arrow-functions": "^7.13.0", "@babel/plugin-transform-async-to-generator": "^7.13.0", "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.14.1", "@babel/plugin-transform-classes": "^7.13.0", "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", "@babel/plugin-transform-dotall-regex": "^7.12.13", "@babel/plugin-transform-duplicate-keys": "^7.12.13", "@babel/plugin-transform-exponentiation-operator": "^7.12.13", @@ -960,10 +1239,10 @@ "@babel/plugin-transform-function-name": "^7.12.13", "@babel/plugin-transform-literals": "^7.12.13", "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.13.0", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-amd": "^7.14.0", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-modules-umd": "^7.14.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", "@babel/plugin-transform-new-target": "^7.12.13", "@babel/plugin-transform-object-super": "^7.12.13", @@ -979,12 +1258,48 @@ "@babel/plugin-transform-unicode-escapes": "^7.12.13", "@babel/plugin-transform-unicode-regex": "^7.12.13", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.13.14", + "@babel/types": "^7.14.1", "babel-plugin-polyfill-corejs2": "^0.2.0", "babel-plugin-polyfill-corejs3": "^0.2.0", "babel-plugin-polyfill-regenerator": "^0.2.0", "core-js-compat": "^3.9.0", "semver": "^6.3.0" + }, + "dependencies": { + "@babel/compat-data": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "dev": true + }, + "@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/preset-modules": { @@ -1001,9 +1316,9 @@ } }, "@babel/runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", - "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -2665,9 +2980,9 @@ "dev": true }, "detox": { - "version": "18.11.2", - "resolved": "https://registry.npmjs.org/detox/-/detox-18.11.2.tgz", - "integrity": "sha512-zEm4sdz6ItKIzWByfLldPzk8SLE562l+/nRKUBfV9fXzys6VeZ7YKb1YbMmC2JF0slmR4rIqCr9Fji4laDwE6w==", + "version": "18.13.0", + "resolved": "https://registry.npmjs.org/detox/-/detox-18.13.0.tgz", + "integrity": "sha512-YQPhi+uUGhVXYQm4W76EyKXdDKXnxq3dO+9ua22gGhNGwiJDbV8TUOavZNMbjBKWLb+OueGKOEBp4uNGOrVANw==", "dev": true, "requires": { "bunyan": "^1.8.12", @@ -2684,6 +2999,7 @@ "proper-lockfile": "^3.0.2", "resolve-from": "^5.0.0", "sanitize-filename": "^1.6.1", + "semver": "^7.0.0", "serialize-error": "^8.0.1", "shell-quote": "^1.7.2", "signal-exit": "^3.0.3", @@ -2694,6 +3010,32 @@ "ws": "^7.0.0", "yargs": "^16.0.3", "yargs-unparser": "^2.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "diff-sequences": { @@ -4334,9 +4676,9 @@ } }, "jest-html-reporters": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/jest-html-reporters/-/jest-html-reporters-2.1.3.tgz", - "integrity": "sha512-46QGqnILYTlkFINsYnQ333VGZqFhi9pUHY7T3G/66U3iQm725pm+HHMsWBIN/XgXEkIP9jsEKlCg6kg4pAAUrA==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/jest-html-reporters/-/jest-html-reporters-2.1.6.tgz", + "integrity": "sha512-L81yXCctu0clmRl2rDeq5nWdH6Sy1U0IJgf+wy6wUTPcCmfg3JIfJnTug0mWSgQqtk0I5IMZ7Z+c4317uMNgMw==", "dev": true, "requires": { "fs-extra": "^9.0.1", @@ -5905,9 +6247,9 @@ } }, "open": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/open/-/open-8.0.5.tgz", - "integrity": "sha512-hkPXCz7gijWp2GoWqsQ4O/5p7F6d5pIQ/+9NyeWG1nABJ4zvLi9kJRv1a44kVf5p13wK0WMoiRA+Xey68yOytA==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/open/-/open-8.0.8.tgz", + "integrity": "sha512-3XmKIU8+H/TVr8wB8C4vj0z748+yBydSvtpzZVS6vQ1dKNHB6AiPbhaoG+89zb80717GPk9y/7OvK0R6FXkNmQ==", "dev": true, "requires": { "define-lazy-prop": "^2.0.0", @@ -6789,9 +7131,9 @@ "dev": true }, "serialize-error": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.0.1.tgz", - "integrity": "sha512-r5o60rWFS+8/b49DNAbB+GXZA0SpDpuWE758JxDKgRTga05r3U5lwyksE91dYKDhXSmnu36RALj615E6Aj5pSg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", "dev": true, "requires": { "type-fest": "^0.20.2" diff --git a/detox/package.json b/detox/package.json index 5e2caddb8..25a2fe29f 100644 --- a/detox/package.json +++ b/detox/package.json @@ -5,20 +5,20 @@ "author": "Mattermost, Inc.", "devDependencies": { "@babel/plugin-proposal-class-properties": "7.13.0", - "@babel/plugin-transform-modules-commonjs": "7.13.8", + "@babel/plugin-transform-modules-commonjs": "7.14.0", "@babel/plugin-transform-runtime": "7.13.15", - "@babel/preset-env": "7.13.15", + "@babel/preset-env": "7.14.1", "axios": "0.21.1", "babel-jest": "26.6.3", "babel-plugin-module-resolver": "4.1.0", "client-oauth2": "github:larkox/js-client-oauth2#e24e2eb5dfcbbbb3a59d095e831dbe0012b0ac49", "deepmerge": "4.2.2", - "detox": "18.11.2", + "detox": "18.13.0", "form-data": "4.0.0", "jest": "26.6.3", "jest-circus": "26.6.3", "jest-cli": "26.6.3", - "jest-html-reporters": "2.1.3", + "jest-html-reporters": "2.1.6", "jest-junit": "12.0.0", "sanitize-filename": "1.6.3", "uuid": "8.3.2" diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 042ae44b1..dea76a8fe 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -592,7 +592,6 @@ platform :android do unless configured configure end - configure_telemetry_android update_identifiers replace_assets link_sentry_android @@ -622,27 +621,6 @@ platform :android do sh "mv #{lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]} #{Pathname.new(File.expand_path(File.dirname(__FILE__))).parent.to_s}/Mattermost-unsigned.apk" end - desc 'Update config and module/listener for Android telemetry' - lane :configure_telemetry_android do - if ENV['TELEMETRY_ENABLED'] == 'true' && ENV['TELEMETRY_URL'] != '' && ENV['TELEMETRY_API_KEY'] != '' - # Update telemetry config - json = load_config_json('../dist/assets/config.json') - json['TelemetryEnabled'] = true - json['TelemetryUrl'] = ENV['TELEMETRY_URL'] - json['TelemetryApiKey'] = ENV['TELEMETRY_API_KEY'] - save_json_as_file('../dist/assets/config.json', json) - - beta_dir = './android/app/src/main/java/com/mattermost/rnbeta/' - - # Listen to telemetry react markers - find_replace_string( - path_to_file: "#{beta_dir}MainApplication.java", - old_string: '// addReactMarkerListener();', - new_string: 'addReactMarkerListener();' - ) - end - end - lane :update_identifiers do # Set the name for the app app_name = ENV['APP_NAME'] || 'Mattermost Beta' diff --git a/index.js b/index.js index 0bfffc97a..1a8a5f526 100644 --- a/index.js +++ b/index.js @@ -2,12 +2,10 @@ // See LICENSE.txt for license information. import 'react-native/Libraries/Core/InitializeCore'; -import {DeviceEventEmitter, Platform, Text} from 'react-native'; +import {Platform, Text} from 'react-native'; import 'react-native-gesture-handler'; -import LocalConfig from '@assets/config'; import 'app/mattermost'; -import telemetry from 'app/telemetry'; if (Platform.OS === 'android') { require('harmony-reflect'); @@ -18,9 +16,9 @@ if (__DEV__) { LogBox.ignoreLogs([ 'Warning: componentWillReceiveProps', 'Warning: componentWillMount', - 'Warning: StatusBarIOS', '`-[RCTRootView cancelTouches]`', 'Animated', + 'If you want to use Reanimated 2 then go through our installation steps https://docs.swmansion.com/react-native-reanimated/docs/installation', // Hide warnings caused by React Native (https://github.com/facebook/react-native/issues/20841) 'Require cycle: node_modules/react-native/Libraries/Network/fetch.js', @@ -58,19 +56,6 @@ if (Platform.OS === 'android') { const AppRegistry = require('react-native/Libraries/ReactNative/AppRegistry'); AppRegistry.registerComponent('MattermostShare', () => ShareExtension); setFontFamily(); - - if (LocalConfig.TelemetryEnabled) { - const metricsSubscription = DeviceEventEmitter.addListener('nativeMetrics', (metrics) => { - telemetry.setAppStartTime(metrics.appReload); - telemetry.include([ - {name: 'start:process_packages', startTime: metrics.processPackagesStart, endTime: metrics.processPackagesEnd}, - {name: 'start:content_appeared', startTime: metrics.appReload, endTime: metrics.appContentAppeared}, - ]); - telemetry.start(['start:overall'], metrics.appReload); - - DeviceEventEmitter.removeSubscription(metricsSubscription); - }); - } } // Uncomment the snippet below if you want to update the modules diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 8734e4025..7d2cddb96 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3,17 +3,17 @@ PODS: - BVLinearGradient (2.5.6): - React - DoubleConversion (1.1.6) - - FBLazyVector (0.64.0) - - FBReactNativeSpec (0.64.0): + - FBLazyVector (0.64.1) + - FBReactNativeSpec (0.64.1): - RCT-Folly (= 2020.01.13.00) - - RCTRequired (= 0.64.0) - - RCTTypeSafety (= 0.64.0) - - React-Core (= 0.64.0) - - React-jsi (= 0.64.0) - - ReactCommon/turbomodule/core (= 0.64.0) + - RCTRequired (= 0.64.1) + - RCTTypeSafety (= 0.64.1) + - React-Core (= 0.64.1) + - React-jsi (= 0.64.1) + - ReactCommon/turbomodule/core (= 0.64.1) - glog (0.3.5) - - jail-monkey (2.3.3): - - React + - jail-monkey (2.3.4): + - React-Core - libwebp (1.2.0): - libwebp/demux (= 1.2.0) - libwebp/mux (= 1.2.0) @@ -26,17 +26,17 @@ PODS: - MMKV (1.2.7): - MMKVCore (~> 1.2.7) - MMKVCore (1.2.7) - - Permission-Camera (3.0.1): + - Permission-Camera (3.0.3): - RNPermissions - - Permission-MediaLibrary (3.0.1): + - Permission-MediaLibrary (3.0.3): - RNPermissions - - Permission-Microphone (3.0.1): + - Permission-Microphone (3.0.3): - RNPermissions - - Permission-Notifications (3.0.1): + - Permission-Notifications (3.0.3): - RNPermissions - - Permission-PhotoLibrary (3.0.1): + - Permission-PhotoLibrary (3.0.3): - RNPermissions - - Permission-PhotoLibraryAddOnly (3.0.1): + - Permission-PhotoLibraryAddOnly (3.0.3): - RNPermissions - RCT-Folly (2020.01.13.00): - boost-for-react-native @@ -47,193 +47,193 @@ PODS: - boost-for-react-native - DoubleConversion - glog - - RCTRequired (0.64.0) - - RCTTypeSafety (0.64.0): - - FBLazyVector (= 0.64.0) + - RCTRequired (0.64.1) + - RCTTypeSafety (0.64.1): + - FBLazyVector (= 0.64.1) - RCT-Folly (= 2020.01.13.00) - - RCTRequired (= 0.64.0) - - React-Core (= 0.64.0) + - RCTRequired (= 0.64.1) + - React-Core (= 0.64.1) - RCTYouTube (2.0.1): - React - YoutubePlayer-in-WKWebView (~> 0.3.1) - - React (0.64.0): - - React-Core (= 0.64.0) - - React-Core/DevSupport (= 0.64.0) - - React-Core/RCTWebSocket (= 0.64.0) - - React-RCTActionSheet (= 0.64.0) - - React-RCTAnimation (= 0.64.0) - - React-RCTBlob (= 0.64.0) - - React-RCTImage (= 0.64.0) - - React-RCTLinking (= 0.64.0) - - React-RCTNetwork (= 0.64.0) - - React-RCTSettings (= 0.64.0) - - React-RCTText (= 0.64.0) - - React-RCTVibration (= 0.64.0) - - React-callinvoker (0.64.0) - - React-Core (0.64.0): + - React (0.64.1): + - React-Core (= 0.64.1) + - React-Core/DevSupport (= 0.64.1) + - React-Core/RCTWebSocket (= 0.64.1) + - React-RCTActionSheet (= 0.64.1) + - React-RCTAnimation (= 0.64.1) + - React-RCTBlob (= 0.64.1) + - React-RCTImage (= 0.64.1) + - React-RCTLinking (= 0.64.1) + - React-RCTNetwork (= 0.64.1) + - React-RCTSettings (= 0.64.1) + - React-RCTText (= 0.64.1) + - React-RCTVibration (= 0.64.1) + - React-callinvoker (0.64.1) + - React-Core (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - - React-Core/Default (= 0.64.0) - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-Core/Default (= 0.64.1) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/CoreModulesHeaders (0.64.0): + - React-Core/CoreModulesHeaders (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - React-Core/Default - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/Default (0.64.0): + - React-Core/Default (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/DevSupport (0.64.0): + - React-Core/DevSupport (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - - React-Core/Default (= 0.64.0) - - React-Core/RCTWebSocket (= 0.64.0) - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-jsinspector (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-Core/Default (= 0.64.1) + - React-Core/RCTWebSocket (= 0.64.1) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-jsinspector (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.64.0): + - React-Core/RCTActionSheetHeaders (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - React-Core/Default - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/RCTAnimationHeaders (0.64.0): + - React-Core/RCTAnimationHeaders (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - React-Core/Default - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/RCTBlobHeaders (0.64.0): + - React-Core/RCTBlobHeaders (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - React-Core/Default - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/RCTImageHeaders (0.64.0): + - React-Core/RCTImageHeaders (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - React-Core/Default - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/RCTLinkingHeaders (0.64.0): + - React-Core/RCTLinkingHeaders (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - React-Core/Default - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/RCTNetworkHeaders (0.64.0): + - React-Core/RCTNetworkHeaders (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - React-Core/Default - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/RCTSettingsHeaders (0.64.0): + - React-Core/RCTSettingsHeaders (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - React-Core/Default - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/RCTTextHeaders (0.64.0): + - React-Core/RCTTextHeaders (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - React-Core/Default - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/RCTVibrationHeaders (0.64.0): + - React-Core/RCTVibrationHeaders (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - React-Core/Default - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-Core/RCTWebSocket (0.64.0): + - React-Core/RCTWebSocket (0.64.1): - glog - RCT-Folly (= 2020.01.13.00) - - React-Core/Default (= 0.64.0) - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsiexecutor (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-Core/Default (= 0.64.1) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsiexecutor (= 0.64.1) + - React-perflogger (= 0.64.1) - Yoga - - React-CoreModules (0.64.0): - - FBReactNativeSpec (= 0.64.0) + - React-CoreModules (0.64.1): + - FBReactNativeSpec (= 0.64.1) - RCT-Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.64.0) - - React-Core/CoreModulesHeaders (= 0.64.0) - - React-jsi (= 0.64.0) - - React-RCTImage (= 0.64.0) - - ReactCommon/turbomodule/core (= 0.64.0) - - React-cxxreact (0.64.0): + - RCTTypeSafety (= 0.64.1) + - React-Core/CoreModulesHeaders (= 0.64.1) + - React-jsi (= 0.64.1) + - React-RCTImage (= 0.64.1) + - ReactCommon/turbomodule/core (= 0.64.1) + - React-cxxreact (0.64.1): - boost-for-react-native (= 1.63.0) - DoubleConversion - glog - RCT-Folly (= 2020.01.13.00) - - React-callinvoker (= 0.64.0) - - React-jsi (= 0.64.0) - - React-jsinspector (= 0.64.0) - - React-perflogger (= 0.64.0) - - React-runtimeexecutor (= 0.64.0) - - React-jsi (0.64.0): + - React-callinvoker (= 0.64.1) + - React-jsi (= 0.64.1) + - React-jsinspector (= 0.64.1) + - React-perflogger (= 0.64.1) + - React-runtimeexecutor (= 0.64.1) + - React-jsi (0.64.1): - boost-for-react-native (= 1.63.0) - DoubleConversion - glog - RCT-Folly (= 2020.01.13.00) - - React-jsi/Default (= 0.64.0) - - React-jsi/Default (0.64.0): + - React-jsi/Default (= 0.64.1) + - React-jsi/Default (0.64.1): - boost-for-react-native (= 1.63.0) - DoubleConversion - glog - RCT-Folly (= 2020.01.13.00) - - React-jsiexecutor (0.64.0): + - React-jsiexecutor (0.64.1): - DoubleConversion - glog - RCT-Folly (= 2020.01.13.00) - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-perflogger (= 0.64.0) - - React-jsinspector (0.64.0) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-perflogger (= 0.64.1) + - React-jsinspector (0.64.1) - react-native-cameraroll (4.0.4): - React-Core - react-native-cookies (3.2.0): @@ -259,6 +259,8 @@ PODS: - React - react-native-safe-area-context (3.2.0): - React-Core + - react-native-startup-time (2.0.0): + - React - react-native-video (5.1.1): - React-Core - react-native-video/Video (= 5.1.1) @@ -266,80 +268,80 @@ PODS: - React-Core - react-native-webview (7.0.1): - React - - React-perflogger (0.64.0) - - React-RCTActionSheet (0.64.0): - - React-Core/RCTActionSheetHeaders (= 0.64.0) - - React-RCTAnimation (0.64.0): - - FBReactNativeSpec (= 0.64.0) + - React-perflogger (0.64.1) + - React-RCTActionSheet (0.64.1): + - React-Core/RCTActionSheetHeaders (= 0.64.1) + - React-RCTAnimation (0.64.1): + - FBReactNativeSpec (= 0.64.1) - RCT-Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.64.0) - - React-Core/RCTAnimationHeaders (= 0.64.0) - - React-jsi (= 0.64.0) - - ReactCommon/turbomodule/core (= 0.64.0) - - React-RCTBlob (0.64.0): - - FBReactNativeSpec (= 0.64.0) + - RCTTypeSafety (= 0.64.1) + - React-Core/RCTAnimationHeaders (= 0.64.1) + - React-jsi (= 0.64.1) + - ReactCommon/turbomodule/core (= 0.64.1) + - React-RCTBlob (0.64.1): + - FBReactNativeSpec (= 0.64.1) - RCT-Folly (= 2020.01.13.00) - - React-Core/RCTBlobHeaders (= 0.64.0) - - React-Core/RCTWebSocket (= 0.64.0) - - React-jsi (= 0.64.0) - - React-RCTNetwork (= 0.64.0) - - ReactCommon/turbomodule/core (= 0.64.0) - - React-RCTImage (0.64.0): - - FBReactNativeSpec (= 0.64.0) + - React-Core/RCTBlobHeaders (= 0.64.1) + - React-Core/RCTWebSocket (= 0.64.1) + - React-jsi (= 0.64.1) + - React-RCTNetwork (= 0.64.1) + - ReactCommon/turbomodule/core (= 0.64.1) + - React-RCTImage (0.64.1): + - FBReactNativeSpec (= 0.64.1) - RCT-Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.64.0) - - React-Core/RCTImageHeaders (= 0.64.0) - - React-jsi (= 0.64.0) - - React-RCTNetwork (= 0.64.0) - - ReactCommon/turbomodule/core (= 0.64.0) - - React-RCTLinking (0.64.0): - - FBReactNativeSpec (= 0.64.0) - - React-Core/RCTLinkingHeaders (= 0.64.0) - - React-jsi (= 0.64.0) - - ReactCommon/turbomodule/core (= 0.64.0) - - React-RCTNetwork (0.64.0): - - FBReactNativeSpec (= 0.64.0) + - RCTTypeSafety (= 0.64.1) + - React-Core/RCTImageHeaders (= 0.64.1) + - React-jsi (= 0.64.1) + - React-RCTNetwork (= 0.64.1) + - ReactCommon/turbomodule/core (= 0.64.1) + - React-RCTLinking (0.64.1): + - FBReactNativeSpec (= 0.64.1) + - React-Core/RCTLinkingHeaders (= 0.64.1) + - React-jsi (= 0.64.1) + - ReactCommon/turbomodule/core (= 0.64.1) + - React-RCTNetwork (0.64.1): + - FBReactNativeSpec (= 0.64.1) - RCT-Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.64.0) - - React-Core/RCTNetworkHeaders (= 0.64.0) - - React-jsi (= 0.64.0) - - ReactCommon/turbomodule/core (= 0.64.0) - - React-RCTSettings (0.64.0): - - FBReactNativeSpec (= 0.64.0) + - RCTTypeSafety (= 0.64.1) + - React-Core/RCTNetworkHeaders (= 0.64.1) + - React-jsi (= 0.64.1) + - ReactCommon/turbomodule/core (= 0.64.1) + - React-RCTSettings (0.64.1): + - FBReactNativeSpec (= 0.64.1) - RCT-Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.64.0) - - React-Core/RCTSettingsHeaders (= 0.64.0) - - React-jsi (= 0.64.0) - - ReactCommon/turbomodule/core (= 0.64.0) - - React-RCTText (0.64.0): - - React-Core/RCTTextHeaders (= 0.64.0) - - React-RCTVibration (0.64.0): - - FBReactNativeSpec (= 0.64.0) + - RCTTypeSafety (= 0.64.1) + - React-Core/RCTSettingsHeaders (= 0.64.1) + - React-jsi (= 0.64.1) + - ReactCommon/turbomodule/core (= 0.64.1) + - React-RCTText (0.64.1): + - React-Core/RCTTextHeaders (= 0.64.1) + - React-RCTVibration (0.64.1): + - FBReactNativeSpec (= 0.64.1) - RCT-Folly (= 2020.01.13.00) - - React-Core/RCTVibrationHeaders (= 0.64.0) - - React-jsi (= 0.64.0) - - ReactCommon/turbomodule/core (= 0.64.0) - - React-runtimeexecutor (0.64.0): - - React-jsi (= 0.64.0) - - ReactCommon/turbomodule/core (0.64.0): + - React-Core/RCTVibrationHeaders (= 0.64.1) + - React-jsi (= 0.64.1) + - ReactCommon/turbomodule/core (= 0.64.1) + - React-runtimeexecutor (0.64.1): + - React-jsi (= 0.64.1) + - ReactCommon/turbomodule/core (0.64.1): - DoubleConversion - glog - RCT-Folly (= 2020.01.13.00) - - React-callinvoker (= 0.64.0) - - React-Core (= 0.64.0) - - React-cxxreact (= 0.64.0) - - React-jsi (= 0.64.0) - - React-perflogger (= 0.64.0) + - React-callinvoker (= 0.64.1) + - React-Core (= 0.64.1) + - React-cxxreact (= 0.64.1) + - React-jsi (= 0.64.1) + - React-perflogger (= 0.64.1) - ReactNativeExceptionHandler (2.10.10): - React-Core - ReactNativeKeyboardTrackingView (5.7.0): - React - - ReactNativeNavigation (7.11.3): + - ReactNativeNavigation (7.14.0): - React-Core - React-RCTImage - React-RCTText - - ReactNativeNavigation/Core (= 7.11.3) - - ReactNativeNavigation/Core (7.11.3): + - ReactNativeNavigation/Core (= 7.14.0) + - ReactNativeNavigation/Core (7.14.0): - React-Core - React-RCTImage - React-RCTText @@ -349,9 +351,9 @@ PODS: - React-Core - RNCClipboard (1.5.1): - React-Core - - RNCMaskedView (0.1.10): + - RNCMaskedView (0.1.11): - React - - RNDeviceInfo (8.0.8): + - RNDeviceInfo (8.1.3): - React-Core - RNDevMenu (4.0.2): - React-Core @@ -365,27 +367,54 @@ PODS: - React-Core - RNGestureHandler (1.10.3): - React-Core - - RNKeychain (6.2.0): - - React - - RNLocalize (2.0.2): + - RNKeychain (7.0.0): - React-Core - - RNPermissions (3.0.1): + - RNLocalize (2.0.3): + - React-Core + - RNPermissions (3.0.3): - React-Core - RNReactNativeHapticFeedback (1.11.0): - React-Core - - RNReanimated (1.13.2): + - RNReanimated (2.1.0): + - DoubleConversion + - FBLazyVector + - FBReactNativeSpec + - glog + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React + - React-callinvoker - React-Core + - React-Core/DevSupport + - React-Core/RCTWebSocket + - React-CoreModules + - React-cxxreact + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-RCTActionSheet + - React-RCTAnimation + - React-RCTBlob + - React-RCTImage + - React-RCTLinking + - React-RCTNetwork + - React-RCTSettings + - React-RCTText + - React-RCTVibration + - ReactCommon/turbomodule/core + - Yoga - RNRudderSdk (1.0.0): - React - Rudder - - RNScreens (3.0.0): + - RNScreens (3.1.1): - React-Core - - RNSentry (2.4.0): + - RNSentry (2.4.2): - React-Core - Sentry (= 6.1.4) - - RNShare (5.1.7): + - RNShare (6.0.1): - React-Core - - RNSVG (12.1.0): + - RNSVG (12.1.1): - React - RNVectorIcons (8.1.0): - React-Core @@ -443,6 +472,7 @@ DEPENDENCIES: - react-native-passcode-status (from `../node_modules/react-native-passcode-status`) - react-native-safe-area (from `../node_modules/react-native-safe-area`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) + - react-native-startup-time (from `../node_modules/react-native-startup-time`) - react-native-video (from `../node_modules/react-native-video`) - react-native-webview (from `../node_modules/react-native-webview`) - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) @@ -571,6 +601,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-safe-area" react-native-safe-area-context: :path: "../node_modules/react-native-safe-area-context" + react-native-startup-time: + :path: "../node_modules/react-native-startup-time" react-native-video: :path: "../node_modules/react-native-video" react-native-webview: @@ -652,31 +684,31 @@ SPEC CHECKSUMS: boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872 DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de - FBLazyVector: 49cbe4b43e445b06bf29199b6ad2057649e4c8f5 - FBReactNativeSpec: 4862b23f27a9cdb8fdb1710af411fa677dcdd3cf + FBLazyVector: 7b423f9e248eae65987838148c36eec1dbfe0b53 + FBReactNativeSpec: 5f648f4f07de2b0b37afa48029ed2b894d9ebfd0 glog: 73c2498ac6884b13ede40eda8228cb1eee9d9d62 - jail-monkey: 80c9e34da2cd54023e5ad08bf7051ec75bd43d5b + jail-monkey: 0b62fb896246639f4203ea90358e08db91b7f5ea libwebp: e90b9c01d99205d03b6bb8f2c8c415e5a4ef66f0 MMKV: 22e5136f7d00197bc0fc9694b7f71519f0d1ca12 MMKVCore: 607b7b05f2c2140056b5d338e45f2c14bf3f4232 - Permission-Camera: 0d2d15352e9c54c3ea8686c8c21fb1a9edf3431b - Permission-MediaLibrary: a9b436b1127dff9d65fb699ebbdbd2dd9362fa16 - Permission-Microphone: 60319bf64f89a035f5bf8d00107fab31b904005c - Permission-Notifications: 0db4fc644c3f5a8628f81696ca1b3019ce8bce32 - Permission-PhotoLibrary: e5d0500209f22e2a5b281501cd3744a965747726 - Permission-PhotoLibraryAddOnly: fba90734d82a6e577631b3267d660de42ebd649f + Permission-Camera: 104ac17250aa2632a0d488caca4e91b1d42fb70a + Permission-MediaLibrary: 5da8d6cdc18fcea48f9dd900f852bce112d68754 + Permission-Microphone: 19d712e494fe874d61d9e537998d10237d28465b + Permission-Notifications: 41bc12e1ea68c62ac782526c361f15fd0a26e6f4 + Permission-PhotoLibrary: 67f5337aa90463df9b1df53bc195ec280a4a327e + Permission-PhotoLibraryAddOnly: 80ff7188f5c2c1c7e995b66bbf7c6177d2a217ca RCT-Folly: ec7a233ccc97cc556cf7237f0db1ff65b986f27c - RCTRequired: 2f8cb5b7533219bf4218a045f92768129cf7050a - RCTTypeSafety: 512728b73549e72ad7330b92f3d42936f2a4de5b + RCTRequired: ec2ebc96b7bfba3ca5c32740f5a0c6a014a274d2 + RCTTypeSafety: 22567f31e67c3e088c7ac23ea46ab6d4779c0ea5 RCTYouTube: 7ff7d42f5ed42d185198681e967fd2c2b661375d - React: 98eac01574128a790f0bbbafe2d1a8607291ac24 - React-callinvoker: def3f7fae16192df68d9b69fd4bbb59092ee36bc - React-Core: 70a52aa5dbe9b83befae82038451a7df9fd54c5a - React-CoreModules: 052edef46117862e2570eb3a0f06d81c61d2c4b8 - React-cxxreact: c1dc71b30653cfb4770efdafcbdc0ad6d388baab - React-jsi: 74341196d9547cbcbcfa4b3bbbf03af56431d5a1 - React-jsiexecutor: 06a9c77b56902ae7ffcdd7a4905f664adc5d237b - React-jsinspector: 0ae35a37b20d5e031eb020a69cc5afdbd6406301 + React: a241e3dbb1e91d06332f1dbd2b3ab26e1a4c4b9d + React-callinvoker: da4d1c6141696a00163960906bc8a55b985e4ce4 + React-Core: 46ba164c437d7dac607b470c83c8308b05799748 + React-CoreModules: 217bd14904491c7b9940ff8b34a3fe08013c2f14 + React-cxxreact: 0090588ae6660c4615d3629fdd5c768d0983add4 + React-jsi: 5de8204706bd872b78ea646aee5d2561ca1214b6 + React-jsiexecutor: 124e8f99992490d0d13e0649d950d3e1aae06fe9 + React-jsinspector: 500a59626037be5b3b3d89c5151bc3baa9abf1a9 react-native-cameraroll: 7c6c7ca84844f93b3dac9a87670bbad6541684ec react-native-cookies: 854d59c4135c70b92a02ca4930e68e4e2eb58150 react-native-document-picker: d2b8fa4d9b268a316515b1f631236f7a87813df6 @@ -689,42 +721,43 @@ SPEC CHECKSUMS: react-native-passcode-status: 88c4f6e074328bc278bd127646b6c694ad5a530a react-native-safe-area: e8230b0017d76c00de6b01e2412dcf86b127c6a3 react-native-safe-area-context: e471852c5ed67eea4b10c5d9d43c1cebae3b231d + react-native-startup-time: c4c433fcf7ccac3c622f5d522e4ef18fb3bb0c9c react-native-video: 1574074179ecaf6a9dd067116c8f31bf9fec15c8 react-native-webview: 0d1c2b4e7ffb0543a74fa0512f2f8dc5fb0e49e2 - React-perflogger: 9c547d8f06b9bf00cb447f2b75e8d7f19b7e02af - React-RCTActionSheet: 3080b6e12e0e1a5b313c8c0050699b5c794a1b11 - React-RCTAnimation: 3f96f21a497ae7dabf4d2f150ee43f906aaf516f - React-RCTBlob: 283b8e5025e7f954176bc48164f846909002f3ed - React-RCTImage: 5088a484faac78f2d877e1b79125d3bb1ea94a16 - React-RCTLinking: 5e8fbb3e9a8bc2e4e3eb15b1eb8bda5fcac27b8c - React-RCTNetwork: 38ec277217b1e841d5e6a1fa78da65b9212ccb28 - React-RCTSettings: 242d6e692108c3de4f3bb74b7586a8799e9ab070 - React-RCTText: 8746736ac8eb5a4a74719aa695b7a236a93a83d2 - React-RCTVibration: 0fd6b21751a33cb72fce1a4a33ab9678416d307a - React-runtimeexecutor: cad74a1eaa53ee6e7a3620231939d8fe2c6afcf0 - ReactCommon: cfe2b7fd20e0dbd2d1185cd7d8f99633fbc5ff05 + React-perflogger: aad6d4b4a267936b3667260d1f649b6f6069a675 + React-RCTActionSheet: fc376be462c9c8d6ad82c0905442fd77f82a9d2a + React-RCTAnimation: ba0a1c3a2738be224a08092fa7f1b444ab77d309 + React-RCTBlob: f758d4403fc5828a326dc69e27b41e1a92f34947 + React-RCTImage: ce57088705f4a8d03f6594b066a59c29143ba73e + React-RCTLinking: 852a3a95c65fa63f657a4b4e2d3d83a815e00a7c + React-RCTNetwork: 9d7ccb8a08d522d71700b4fb677d9fa28cccd118 + React-RCTSettings: d8aaf4389ff06114dee8c42ef5f0f2915946011e + React-RCTText: 809c12ed6b261796ba056c04fcd20d8b90bcc81d + React-RCTVibration: 4b99a7f5c6c0abbc5256410cc5425fb8531986e1 + React-runtimeexecutor: ff951a0c241bfaefc4940a3f1f1a229e7cb32fa6 + ReactCommon: bedc99ed4dae329c4fcf128d0c31b9115e5365ca ReactNativeExceptionHandler: b11ff67c78802b2f62eed0e10e75cb1ef7947c60 ReactNativeKeyboardTrackingView: 02137fac3b2ebd330d74fa54ead48b14750a2306 - ReactNativeNavigation: 906b631a6847c26cacf5cb3791566f1fe205c65c + ReactNativeNavigation: ff4873e683e5f23822af097e4fe643c82469c3d2 rn-fetch-blob: 17961aec08caae68bb8fc0e5b40f93b3acfa6932 RNCAsyncStorage: cb9a623793918c6699586281f0b51cbc38f046f9 RNCClipboard: 5e299c6df8e0c98f3d7416b86ae563d3a9f768a3 - RNCMaskedView: f5c7d14d6847b7b44853f7acb6284c1da30a3459 - RNDeviceInfo: 6d24c244896857a89685312335e5ae344d6c9699 + RNCMaskedView: f127cd9652acfa31b91dcff613e07ba18b774db6 + RNDeviceInfo: 49f6d50f861c7810fac2dd9b71cfb56cc1940e14 RNDevMenu: 9f80d65b80ba1fa84e5361d017b8c854a2f05005 RNFastImage: d4870d58f5936111c56218dbd7fcfc18e65b58ff RNFileViewer: 83cc066ad795b1f986791d03b56fe0ee14b6a69f RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211 - RNKeychain: b8e0711b959a19c5b057d1e970d3c83d159b6da5 - RNLocalize: 47e22ef8c36df1d572e42a87c8ae22e3fcf551dd - RNPermissions: eb94f9fdc0a8ecd02fcce0676d56ffb1395d41e1 + RNKeychain: f75b8c8b2f17d3b2aa1f25b4a0ac5b83d947ff8f + RNLocalize: 29e84ea169d3bca6c3b83584536c7f586a07fb98 + RNPermissions: d6679ecf0c21bf6de5a619b20df4304182792da8 RNReactNativeHapticFeedback: 653a8c126a0f5e88ce15ffe280b3ff37e1fbb285 - RNReanimated: e03f7425cb7a38dcf1b644d680d1bfc91c3337ad + RNReanimated: b8c8004b43446e3c2709fe64b2b41072f87428ad RNRudderSdk: 5d99b1a5a582ab55d6213b38018d35e98818af63 - RNScreens: e8e8dd0588b5da0ab57dcca76ab9b2d8987757e0 - RNSentry: b0d55027200c96f52e26b9bfb20296d47fc5051d - RNShare: 503c37af86611beadccba46156fcc42170c9fb42 - RNSVG: ce9d996113475209013317e48b05c21ee988d42e + RNScreens: bd1523c3bde7069b8e958e5a16e1fc7722ad0bdd + RNSentry: e86fb2e2fec0365644f4b582938bf66be515acce + RNShare: 755de6bac084428f8fd8fb54c376f126f40e560c + RNSVG: 551acb6562324b1d52a4e0758f7ca0ec234e278f RNVectorIcons: 31cebfcf94e8cf8686eb5303ae0357da64d7a5a4 Rudder: ef340f877a39653f19e69124dffae12fde3f881b SDWebImage: c666b97e1fa9c64b4909816a903322018f0a9c84 @@ -732,7 +765,7 @@ SPEC CHECKSUMS: Sentry: 9d055e2de30a77685e86b219acf02e59b82091fc Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b XCDYouTubeKit: 79baadb0560673a67c771eba45f83e353fd12c1f - Yoga: 8c8436d4171c87504c648ae23b1d81242bdf3bbf + Yoga: a7de31c64fe738607e7a3803e3f591a4b1df7393 YoutubePlayer-in-WKWebView: cfbf46da51d7370662a695a8f351e5fa1d3e1008 PODFILE CHECKSUM: 8f9184e7a51675aa02c8489226782a6a87b8d987 diff --git a/package-lock.json b/package-lock.json index 8fc86cada..4873a2a58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@babel/cli": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.13.14.tgz", - "integrity": "sha512-zmEFV8WBRsW+mPQumO1/4b34QNALBVReaiHJOkxhUsdo/AvYM62c+SKSuLi2aZ42t3ocK6OI0uwUXRvrIbREZw==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.13.16.tgz", + "integrity": "sha512-cL9tllhqvsQ6r1+d9Invf7nNXg/3BlfL1vvvL/AdH9fZ2l5j0CeBcoq6UjsqHpvyN1v5nXSZgqJZoGeK+ZOAbw==", "dev": true, "requires": { "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", @@ -16,7 +16,6 @@ "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "glob": "^7.0.0", - "lodash": "^4.17.19", "make-dir": "^2.1.0", "slash": "^2.0.0", "source-map": "^0.5.0" @@ -56,20 +55,19 @@ "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==" }, "@babel/core": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.14.tgz", - "integrity": "sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==", - "dev": true, + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", + "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.13", + "@babel/generator": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -78,17 +76,85 @@ "source-map": "^0.5.0" }, "dependencies": { + "@babel/generator": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "requires": { + "@babel/types": "^7.14.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + }, + "@babel/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==" + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, @@ -214,13 +280,31 @@ } }, "@babel/helper-hoist-variables": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", - "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", "dev": true, "requires": { - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-member-expression-to-functions": { @@ -336,13 +420,64 @@ } }, "@babel/helpers": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", - "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "requires": { "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "requires": { + "@babel/types": "^7.14.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + }, + "@babel/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==" + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } } }, "@babel/highlight": { @@ -391,6 +526,16 @@ "@babel/helper-plugin-utils": "^7.13.0" } }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.13.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", + "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" + } + }, "@babel/plugin-proposal-dynamic-import": { "version": "7.13.8", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", @@ -500,6 +645,34 @@ "@babel/helper-plugin-utils": "^7.13.0" } }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + }, + "dependencies": { + "@babel/helper-create-class-features-plugin": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.1.tgz", + "integrity": "sha512-r8rsUahG4ywm0QpGcCrLaUSOuNAISR3IZCg4Fx05Ozq31aCUrQsTLH6KPxy0N5ULoQ4Sn9qjNdGNtbPWAC6hYg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13" + } + } + } + }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", @@ -536,6 +709,15 @@ "@babel/helper-plugin-utils": "^7.12.13" } }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -645,6 +827,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, "@babel/plugin-syntax-top-level-await": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", @@ -798,14 +989,87 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", - "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", + "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/generator": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "dev": true + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "@babel/plugin-transform-modules-commonjs": { @@ -833,13 +1097,86 @@ } }, "@babel/plugin-transform-modules-umd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", - "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "dev": true + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "@babel/plugin-transform-named-capturing-groups-regex": { @@ -956,70 +1293,22 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz", - "integrity": "sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==", - "dev": true, + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz", + "integrity": "sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==", "requires": { - "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-module-imports": "^7.13.12", "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", "semver": "^6.3.0" }, "dependencies": { - "@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", - "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", - "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.0", - "@babel/helper-define-polyfill-provider": "^0.1.5", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", - "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", - "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -1094,18 +1383,19 @@ } }, "@babel/preset-env": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", - "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.1.tgz", + "integrity": "sha512-0M4yL1l7V4l+j/UHvxcdvNfLB9pPtIooHTbEhgD/6UGyh8Hy3Bm1Mj0buzjDXATCSz3JFibVdnoJZCrlUCanrQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.12", - "@babel/helper-compilation-targets": "^7.13.10", + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-validator-option": "^7.12.17", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.13.8", + "@babel/plugin-proposal-async-generator-functions": "^7.13.15", "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-class-static-block": "^7.13.11", "@babel/plugin-proposal-dynamic-import": "^7.13.8", "@babel/plugin-proposal-export-namespace-from": "^7.12.13", "@babel/plugin-proposal-json-strings": "^7.13.8", @@ -1116,9 +1406,11 @@ "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", "@babel/plugin-proposal-optional-chaining": "^7.13.12", "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -1128,14 +1420,15 @@ "@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-private-property-in-object": "^7.14.0", "@babel/plugin-syntax-top-level-await": "^7.12.13", "@babel/plugin-transform-arrow-functions": "^7.13.0", "@babel/plugin-transform-async-to-generator": "^7.13.0", "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.14.1", "@babel/plugin-transform-classes": "^7.13.0", "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", "@babel/plugin-transform-dotall-regex": "^7.12.13", "@babel/plugin-transform-duplicate-keys": "^7.12.13", "@babel/plugin-transform-exponentiation-operator": "^7.12.13", @@ -1143,16 +1436,16 @@ "@babel/plugin-transform-function-name": "^7.12.13", "@babel/plugin-transform-literals": "^7.12.13", "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.13.0", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-amd": "^7.14.0", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-modules-umd": "^7.14.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", "@babel/plugin-transform-new-target": "^7.12.13", "@babel/plugin-transform-object-super": "^7.12.13", "@babel/plugin-transform-parameters": "^7.13.0", "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", "@babel/plugin-transform-reserved-words": "^7.12.13", "@babel/plugin-transform-shorthand-properties": "^7.12.13", "@babel/plugin-transform-spread": "^7.13.0", @@ -1162,58 +1455,125 @@ "@babel/plugin-transform-unicode-escapes": "^7.12.13", "@babel/plugin-transform-unicode-regex": "^7.12.13", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.13.12", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", + "@babel/types": "^7.14.1", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", "core-js-compat": "^3.9.0", "semver": "^6.3.0" }, "dependencies": { - "@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", - "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "@babel/compat-data": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "dev": true + }, + "@babel/generator": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", + "@babel/types": "^7.14.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "dev": true + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.1.tgz", + "integrity": "sha512-2mQXd0zBrwfp0O1moWIhPpEeTKDvxyHcnma3JATVP1l+CctWBuot6OJG8LQ4DnBj4ZZPSmlb/fm4mu47EOAnVA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", + "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "@babel/helper-simple-access": "^7.13.12", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, - "babel-plugin-polyfill-corejs2": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", - "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.0", - "@babel/helper-define-polyfill-provider": "^0.1.5", - "semver": "^6.1.1" + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, - "babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", - "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", - "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5" + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" } }, "semver": { @@ -1221,6 +1581,12 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -1258,21 +1624,21 @@ } }, "@babel/register": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.14.tgz", - "integrity": "sha512-iyw0hUwjh/fzN8qklVqZodbyWjEBOG0KdDnBOpv3zzIgK3NmuRXBmIXH39ZBdspkn8LTHvSboN+oYb4MT43+9Q==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", + "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", "requires": { + "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", - "lodash": "^4.17.19", "make-dir": "^2.1.0", "pirates": "^4.0.0", "source-map-support": "^0.5.16" } }, "@babel/runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", - "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -1485,9 +1851,9 @@ "dev": true }, "@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -1541,9 +1907,9 @@ } }, "@hapi/hoek": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.1.tgz", - "integrity": "sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw==" + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", + "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" }, "@hapi/topo": { "version": "5.0.0", @@ -2511,6 +2877,11 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "jetifier": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", + "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==" + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2746,9 +3117,9 @@ "dev": true }, "@react-native-community/masked-view": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.10.tgz", - "integrity": "sha512-rk4sWFsmtOw8oyx8SD3KSvawwaK7gRBSEIy2TAwURyGt+3TizssXP1r8nx3zY+R7v2vYYHXZ+k2/GULAT/bcaQ==" + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.11.tgz", + "integrity": "sha512-rQfMIGSR/1r/SyN87+VD8xHHzDYeHaJq6elOSCAD+0iLagXkSI2pfA0LmSXP21uw5i3em7GkkRjfJ8wpqWXZNw==" }, "@react-native-community/netinfo": { "version": "6.0.0", @@ -2783,11 +3154,11 @@ } }, "@react-navigation/native": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.9.3.tgz", - "integrity": "sha512-xaRlCDRVuFGxHsP/IetwLdNvLJwIJBYCUIx/ufWs6QkT9Q0EB0DtKzXCItuHydjMEVPd1Cy7lfjUlSM6hZ6Q3Q==", + "version": "5.9.4", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.9.4.tgz", + "integrity": "sha512-BUCrOXfZDdKWBqM8OhOKQhCX5we4HUo5XG6tCQtVqQAep+7UcApZmMUuemUXDxVe8NPESUpoUlB0RaEpyIdfTQ==", "requires": { - "@react-navigation/core": "^5.15.2", + "@react-navigation/core": "^5.15.3", "escape-string-regexp": "^4.0.0", "nanoid": "^3.1.15" } @@ -2801,9 +3172,9 @@ } }, "@react-navigation/stack": { - "version": "5.14.3", - "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.14.3.tgz", - "integrity": "sha512-7rHc13DHsYP7l7GcgBcLEyX2/IAuCcRZ1Iu3MtOZSayjvFXxBBYKFKw0OyY9NxOfZUdLl3Q3mLiUHVFZkHMcuA==", + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.14.5.tgz", + "integrity": "sha512-hpdn1SS0tc3/3atkV2Q2y++n5B4e0rUcCj4W43PODMu72yX2m0LkKAAcpkPDCWAvwnLLIoLAEl5BEifZigl/6A==", "requires": { "color": "^3.1.3", "react-native-iphone-x-helper": "^1.3.0" @@ -2840,9 +3211,9 @@ } }, "@sentry/cli": { - "version": "1.64.0", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.64.0.tgz", - "integrity": "sha512-MHWHiYVBJaE0y/JVSziZIclBYhINiI4VsJ10r7rcJYAwDah3JYBPMrv0iwmuxBVWRFMSuAmSpivkzn67JS6sPg==", + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.64.1.tgz", + "integrity": "sha512-G+TzOSG+58fG3f5uYvPXweK65f1sP/8MWSEuRmJE4P0JJTTXQI6WErvrqrhfR5F7UVvGzltEbpc8rvO7N3+88A==", "requires": { "https-proxy-agent": "^5.0.0", "mkdirp": "^0.5.5", @@ -2909,9 +3280,9 @@ } }, "@sentry/react-native": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@sentry/react-native/-/react-native-2.4.0.tgz", - "integrity": "sha512-yRUN36tKRSsGEtNHihEzl0KqGh7pmWfNV0h3jf5Q1VKXNHA9iO2ABcmr47wScrbrK2MDL1umO1AQNq2+6z24QA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@sentry/react-native/-/react-native-2.4.2.tgz", + "integrity": "sha512-+GAH2cdbZBz+EJOpBGAvVRl2jExLYrZ/gfmHnew3NYGlE/77GX1KQGJ+sKLA6xnPtXjcC7tJ13uvbQD6cltZnQ==", "requires": { "@sentry/browser": "6.2.1", "@sentry/core": "6.2.1", @@ -2951,9 +3322,9 @@ } }, "@sentry/wizard": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@sentry/wizard/-/wizard-1.2.3.tgz", - "integrity": "sha512-XS2X+0dBSIEzDh3K76Z4uz+CsZUNMpCVvhv6R1CWvhtHCor9yD/LNwIDF3zy323vIHyN9QTauNKiUUkT7Pk5ng==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@sentry/wizard/-/wizard-1.2.7.tgz", + "integrity": "sha512-1R23M4nvJg9MkrnEoj2pYH7VTTqS3BueEkCmdI4F+7TJG9BOLGLK3LJoVH44J/tmcZnAxUeTdPP46eH5VhoFMg==", "requires": { "@sentry/cli": "^1.52.4", "chalk": "^2.4.1", @@ -3004,18 +3375,18 @@ } }, "@storybook/addon-knobs": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-6.2.2.tgz", - "integrity": "sha512-vQ9o+BiY1W/CeZq3l8I4ZrjQ3226R1ziFiuaOUQPDnmZ/y3bSquLyruMVrHbrdqp5jGfcckMt6gUtIKsKldjag==", + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-6.2.9.tgz", + "integrity": "sha512-ic3xXy9uWPfIGP4x3VuGnrUmg/Jn9rHKIqZMhRcC7mFDRVlgbekvQxaruC6VY9LW6o8jV/miReSZkJf7M8o0aQ==", "dev": true, "requires": { - "@storybook/addons": "6.2.2", - "@storybook/api": "6.2.2", - "@storybook/channels": "6.2.2", - "@storybook/client-api": "6.2.2", - "@storybook/components": "6.2.2", - "@storybook/core-events": "6.2.2", - "@storybook/theming": "6.2.2", + "@storybook/addons": "6.2.9", + "@storybook/api": "6.2.9", + "@storybook/channels": "6.2.9", + "@storybook/client-api": "6.2.9", + "@storybook/components": "6.2.9", + "@storybook/core-events": "6.2.9", + "@storybook/theming": "6.2.9", "copy-to-clipboard": "^3.3.1", "core-js": "^3.8.2", "escape-html": "^1.0.3", @@ -3031,9 +3402,9 @@ }, "dependencies": { "core-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.1.tgz", - "integrity": "sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.0.tgz", + "integrity": "sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw==", "dev": true }, "react-lifecycles-compat": { @@ -3257,44 +3628,44 @@ } }, "@storybook/addons": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.2.2.tgz", - "integrity": "sha512-3FSnNl+0wzkeh3KVk+CB8bYb4FDRIEeFI0kU+UDj46PAXuqObQeIzPlpsU59D5Qq6zFXV+IhzLRknGrrMh1XzA==", + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.2.9.tgz", + "integrity": "sha512-GnmEKbJwiN1jncN9NSA8CuR1i2XAlasPcl/Zn0jkfV9WitQeczVcJCPw86SGH84AD+tTBCyF2i9UC0KaOV1YBQ==", "dev": true, "requires": { - "@storybook/api": "6.2.2", - "@storybook/channels": "6.2.2", - "@storybook/client-logger": "6.2.2", - "@storybook/core-events": "6.2.2", - "@storybook/router": "6.2.2", - "@storybook/theming": "6.2.2", + "@storybook/api": "6.2.9", + "@storybook/channels": "6.2.9", + "@storybook/client-logger": "6.2.9", + "@storybook/core-events": "6.2.9", + "@storybook/router": "6.2.9", + "@storybook/theming": "6.2.9", "core-js": "^3.8.2", "global": "^4.4.0", "regenerator-runtime": "^0.13.7" }, "dependencies": { "core-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.1.tgz", - "integrity": "sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.0.tgz", + "integrity": "sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw==", "dev": true } } }, "@storybook/api": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.2.2.tgz", - "integrity": "sha512-5BNspUVi5ZckYSWlmK55Ck2vNkZXW9klQtvxkLkf1fmuHdrjsDq5huVYJCNbHo8ngcrynR0Iynip7QZrQU0ylA==", + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.2.9.tgz", + "integrity": "sha512-okkA3HAScE9tGnYBrjTOcgzT+L1lRHNoEh3ZfGgh1u/XNEyHGNkj4grvkd6nX7BzRcYQ/l2VkcKCqmOjUnSkVQ==", "dev": true, "requires": { "@reach/router": "^1.3.4", - "@storybook/channels": "6.2.2", - "@storybook/client-logger": "6.2.2", - "@storybook/core-events": "6.2.2", + "@storybook/channels": "6.2.9", + "@storybook/client-logger": "6.2.9", + "@storybook/core-events": "6.2.9", "@storybook/csf": "0.0.1", - "@storybook/router": "6.2.2", + "@storybook/router": "6.2.9", "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.2.2", + "@storybook/theming": "6.2.9", "@types/reach__router": "^1.3.7", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", @@ -3309,67 +3680,23 @@ "util-deprecate": "^1.0.2" }, "dependencies": { - "@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", - "dev": true, - "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - } - }, "core-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.1.tgz", - "integrity": "sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.0.tgz", + "integrity": "sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw==", "dev": true } } }, "@storybook/channel-postmessage": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.2.2.tgz", - "integrity": "sha512-m8cLGKYw9t2d14ZkHTaQnnd0HVrXagzQ16AKbbj7m8ZM1Qv7XFZnRcfxN+1nZ0W0OIRhMMCh9Xf14U1bLb5CTw==", + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.2.9.tgz", + "integrity": "sha512-OqV+gLeeCHR0KExsIz0B7gD17Cjd9D+I75qnBsLWM9inWO5kc/WZ5svw8Bvjlcm6snWpvxUaT8L+svuqcPSmww==", "dev": true, "requires": { - "@storybook/channels": "6.2.2", - "@storybook/client-logger": "6.2.2", - "@storybook/core-events": "6.2.2", + "@storybook/channels": "6.2.9", + "@storybook/client-logger": "6.2.9", + "@storybook/core-events": "6.2.9", "core-js": "^3.8.2", "global": "^4.4.0", "qs": "^6.10.0", @@ -3377,9 +3704,9 @@ }, "dependencies": { "core-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.1.tgz", - "integrity": "sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.0.tgz", + "integrity": "sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw==", "dev": true } } @@ -3436,9 +3763,9 @@ } }, "@storybook/channels": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.2.2.tgz", - "integrity": "sha512-lev2jJE45QmH+q40M8zsQMF7h8OjoBA7/Ir2RIUVshftuHlzME3L5Y9w5o/7LWdlhvZYBmhqqXv+iYusFo9yTA==", + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.2.9.tgz", + "integrity": "sha512-6dC8Fb2ipNyOQXnUZMDeEUaJGH5DMLzyHlGLhVyDtrO5WR6bO8mQdkzf4+5dSKXgCBNX0BSkssXth4pDjn18rg==", "dev": true, "requires": { "core-js": "^3.8.2", @@ -3447,24 +3774,24 @@ }, "dependencies": { "core-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.1.tgz", - "integrity": "sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.0.tgz", + "integrity": "sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw==", "dev": true } } }, "@storybook/client-api": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.2.2.tgz", - "integrity": "sha512-HdWFmdMgOwR6JAbKGgxsJq0VmYkSCgpbeSmPkUMNCz8lufOekRGSyKELKvMsAVt/TSTP5vgQOrB1UC93HqCKGQ==", + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.2.9.tgz", + "integrity": "sha512-aLvEUVkbvv6Qo/2mF4rFCecdqi2CGOUDdsV1a6EFIVS/9gXFdpirsOwKHo9qNjacGdWPlBYGCUcbrw+DvNaSFA==", "dev": true, "requires": { - "@storybook/addons": "6.2.2", - "@storybook/channel-postmessage": "6.2.2", - "@storybook/channels": "6.2.2", - "@storybook/client-logger": "6.2.2", - "@storybook/core-events": "6.2.2", + "@storybook/addons": "6.2.9", + "@storybook/channel-postmessage": "6.2.9", + "@storybook/channels": "6.2.9", + "@storybook/client-logger": "6.2.9", + "@storybook/core-events": "6.2.9", "@storybook/csf": "0.0.1", "@types/qs": "^6.9.5", "@types/webpack-env": "^1.16.0", @@ -3481,17 +3808,17 @@ }, "dependencies": { "core-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.1.tgz", - "integrity": "sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.0.tgz", + "integrity": "sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw==", "dev": true } } }, "@storybook/client-logger": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.2.2.tgz", - "integrity": "sha512-tv8zKGBHCDg6mMOk4znCoiF9KUPtH02ksTrlJzJbTz5Jqc1OwBS8/O48TaeNtQcKcMfs92j9NK1aW6WFGU9o+w==", + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.2.9.tgz", + "integrity": "sha512-IfOQZuvpjh66qBInQCJOb9S0dTGpzZ/Cxlcvokp+PYt95KztaWN3mPm+HaDQCeRsrWNe0Bpm1zuickcJ6dBOXg==", "dev": true, "requires": { "core-js": "^3.8.2", @@ -3499,23 +3826,23 @@ }, "dependencies": { "core-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.1.tgz", - "integrity": "sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.0.tgz", + "integrity": "sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw==", "dev": true } } }, "@storybook/components": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.2.2.tgz", - "integrity": "sha512-KfYKVHDRGUmQGA4+vSqy4Qc3imCTrGcZsXRgAMBtiFtXqtSruA6ZTFkqEjV2ab+9hksv06vpAHjxosMStFkX3g==", + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.2.9.tgz", + "integrity": "sha512-hnV1MI2aB2g1sJ7NJphpxi7TwrMZQ/tpCJeHnkjmzyC6ez1MXqcBXGrEEdSXzRfAxjQTOEpu6H1mnns0xMP0Ag==", "dev": true, "requires": { "@popperjs/core": "^2.6.0", - "@storybook/client-logger": "6.2.2", + "@storybook/client-logger": "6.2.9", "@storybook/csf": "0.0.1", - "@storybook/theming": "6.2.2", + "@storybook/theming": "6.2.9", "@types/color-convert": "^2.0.0", "@types/overlayscrollbars": "^1.12.0", "@types/react-syntax-highlighter": "11.0.5", @@ -3554,9 +3881,9 @@ "dev": true }, "core-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.1.tgz", - "integrity": "sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.0.tgz", + "integrity": "sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw==", "dev": true } } @@ -4158,18 +4485,18 @@ } }, "@storybook/core-events": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.2.2.tgz", - "integrity": "sha512-29Xsu1cMwDXqtLQK+x2e4G//ppJCkEkPL0DISg2jD1ND04V7eaKubWq/kwsHtM8MKYJHxuxh4rSF7xb24EEPOA==", + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.2.9.tgz", + "integrity": "sha512-xQmbX/oYQK1QsAGN8hriXX5SUKOoTUe3L4dVaVHxJqy7MReRWJpprJmCpbAPJzWS6WCbDFfCM5kVEexHLOzJlQ==", "dev": true, "requires": { "core-js": "^3.8.2" }, "dependencies": { "core-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.1.tgz", - "integrity": "sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.0.tgz", + "integrity": "sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw==", "dev": true } } @@ -4735,13 +5062,13 @@ } }, "@storybook/router": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.2.2.tgz", - "integrity": "sha512-K9ScTklpmZtLNbDsNSW8WyVRy7XuqeWJgw89+A7CRIk3fSk7+FvW8OeS7ZMKFWK5j18Mm6U0XPBP+d1mSw7Vlg==", + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.2.9.tgz", + "integrity": "sha512-7Bn1OFoItCl8whXRT8N1qp1Lky7kzXJ3aslWp5E8HcM8rxh4OYXfbaeiyJEJxBTGC5zxgY+tAEXHFjsAviFROg==", "dev": true, "requires": { "@reach/router": "^1.3.4", - "@storybook/client-logger": "6.2.2", + "@storybook/client-logger": "6.2.9", "@types/reach__router": "^1.3.7", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", @@ -4753,23 +5080,75 @@ }, "dependencies": { "core-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.1.tgz", - "integrity": "sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.0.tgz", + "integrity": "sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw==", + "dev": true + } + } + }, + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "dependencies": { + "core-js": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.0.tgz", + "integrity": "sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true } } }, "@storybook/theming": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.2.2.tgz", - "integrity": "sha512-oqZkv5OD6ViIRiAdrUfTVxny1zjhvZGNtQFtTBBad0u8UA5ndIPSzz1dEvj1adfRlbX+Qn3J4ELU7L09pO4PWQ==", + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.2.9.tgz", + "integrity": "sha512-183oJW7AD7Fhqg5NT4ct3GJntwteAb9jZnQ6yhf9JSdY+fk8OhxRbPf7ov0au2gYACcGrWDd9K5pYQsvWlP5gA==", "dev": true, "requires": { "@emotion/core": "^10.1.1", "@emotion/is-prop-valid": "^0.8.6", "@emotion/styled": "^10.0.27", - "@storybook/client-logger": "6.2.2", + "@storybook/client-logger": "6.2.9", "core-js": "^3.8.2", "deep-object-diff": "^1.1.0", "emotion-theming": "^10.0.27", @@ -4781,9 +5160,9 @@ }, "dependencies": { "core-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.1.tgz", - "integrity": "sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.0.tgz", + "integrity": "sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw==", "dev": true }, "resolve-from": { @@ -5389,9 +5768,9 @@ } }, "@types/jest": { - "version": "26.0.22", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.22.tgz", - "integrity": "sha512-eeWwWjlqxvBxc4oQdkueW5OF/gtfSceKk4OnOAGlUSwS/liBRtZppbJuz1YkgbrbfGOoeBHun9fOvXnjNwrSOw==", + "version": "26.0.23", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.23.tgz", + "integrity": "sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==", "dev": true, "requires": { "jest-diff": "^26.0.0", @@ -5469,9 +5848,9 @@ } }, "@types/react": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz", - "integrity": "sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.5.tgz", + "integrity": "sha512-bj4biDB9ZJmGAYTWSKJly6bMr4BLUiBrx9ujiJEoP9XIDY9CTaPGxE5QWN/1WjpPLzYF7/jRNnV2nNxNe970sw==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -5479,9 +5858,9 @@ } }, "@types/react-native": { - "version": "0.64.2", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.64.2.tgz", - "integrity": "sha512-w2y04h+GVLY+OMlFSmq4adPuS51XtEp1yUr83OvXf+moMQ4zDG1Q07HhyvYDXdc+BSS9ANHySBqVCz0hFxli9Q==", + "version": "0.64.5", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.64.5.tgz", + "integrity": "sha512-k0r8MnQX7UFboZDvMKLov26gFLXKrNgLhCfSVhjaZ6wMUofKijxvee7/wgfAqtT2zS5FR4an4+qn0r72SCbw3g==", "requires": { "@types/react": "*" } @@ -5670,13 +6049,13 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" }, "@typescript-eslint/eslint-plugin": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.20.0.tgz", - "integrity": "sha512-sw+3HO5aehYqn5w177z2D82ZQlqHCwcKSMboueo7oE4KU9QiC0SAgfS/D4z9xXvpTc8Bt41Raa9fBR8T2tIhoQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.1.tgz", + "integrity": "sha512-kVTAghWDDhsvQ602tHBc6WmQkdaYbkcTwZu+7l24jtJiYvm9l+/y/b2BZANEezxPDiX5MK2ZecE+9BFi/YJryw==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.20.0", - "@typescript-eslint/scope-manager": "4.20.0", + "@typescript-eslint/experimental-utils": "4.22.1", + "@typescript-eslint/scope-manager": "4.22.1", "debug": "^4.1.1", "functional-red-black-tree": "^1.0.1", "lodash": "^4.17.15", @@ -5692,33 +6071,33 @@ "dev": true }, "@typescript-eslint/experimental-utils": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.20.0.tgz", - "integrity": "sha512-sQNlf6rjLq2yB5lELl3gOE7OuoA/6IVXJUJ+Vs7emrQMva14CkOwyQwD7CW+TkmOJ4Q/YGmoDLmbfFrpGmbKng==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.1.tgz", + "integrity": "sha512-svYlHecSMCQGDO2qN1v477ax/IDQwWhc7PRBiwAdAMJE7GXk5stF4Z9R/8wbRkuX/5e9dHqbIWxjeOjckK3wLQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.20.0", - "@typescript-eslint/types": "4.20.0", - "@typescript-eslint/typescript-estree": "4.20.0", + "@typescript-eslint/scope-manager": "4.22.1", + "@typescript-eslint/types": "4.22.1", + "@typescript-eslint/typescript-estree": "4.22.1", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" } }, "@typescript-eslint/types": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.20.0.tgz", - "integrity": "sha512-cYY+1PIjei1nk49JAPnH1VEnu7OYdWRdJhYI5wiKOUMhLTG1qsx5cQxCUTuwWCmQoyriadz3Ni8HZmGSofeC+w==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.22.1.tgz", + "integrity": "sha512-2HTkbkdAeI3OOcWbqA8hWf/7z9c6gkmnWNGz0dKSLYLWywUlkOAQ2XcjhlKLj5xBFDf8FgAOF5aQbnLRvgNbCw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.20.0.tgz", - "integrity": "sha512-Knpp0reOd4ZsyoEJdW8i/sK3mtZ47Ls7ZHvD8WVABNx5Xnn7KhenMTRGegoyMTx6TiXlOVgMz9r0pDgXTEEIHA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.1.tgz", + "integrity": "sha512-p3We0pAPacT+onSGM+sPR+M9CblVqdA9F1JEdIqRVlxK5Qth4ochXQgIyb9daBomyQKAXbygxp1aXQRV0GC79A==", "dev": true, "requires": { - "@typescript-eslint/types": "4.20.0", - "@typescript-eslint/visitor-keys": "4.20.0", + "@typescript-eslint/types": "4.22.1", + "@typescript-eslint/visitor-keys": "4.22.1", "debug": "^4.1.1", "globby": "^11.0.1", "is-glob": "^4.0.1", @@ -5727,12 +6106,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.20.0.tgz", - "integrity": "sha512-NXKRM3oOVQL8yNFDNCZuieRIwZ5UtjNLYtmMx2PacEAGmbaEYtGgVHUHVyZvU/0rYZcizdrWjDo+WBtRPSgq+A==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.1.tgz", + "integrity": "sha512-WPkOrIRm+WCLZxXQHCi+WG8T2MMTUFR70rWjdWYddLT7cEfb2P4a3O/J2U1FBVsSFTocXLCoXWY6MZGejeStvQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.20.0", + "@typescript-eslint/types": "4.22.1", "eslint-visitor-keys": "^2.0.0" } }, @@ -5752,9 +6131,9 @@ } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "fast-glob": { @@ -5810,14 +6189,14 @@ } }, "@typescript-eslint/parser": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.20.0.tgz", - "integrity": "sha512-m6vDtgL9EABdjMtKVw5rr6DdeMCH3OA1vFb0dAyuZSa3e5yw1YRzlwFnm9knma9Lz6b2GPvoNSa8vOXrqsaglA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.22.1.tgz", + "integrity": "sha512-l+sUJFInWhuMxA6rtirzjooh8cM/AATAe3amvIkqKFeMzkn85V+eLzb1RyuXkHak4dLfYzOmF6DXPyflJvjQnw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.20.0", - "@typescript-eslint/types": "4.20.0", - "@typescript-eslint/typescript-estree": "4.20.0", + "@typescript-eslint/scope-manager": "4.22.1", + "@typescript-eslint/types": "4.22.1", + "@typescript-eslint/typescript-estree": "4.22.1", "debug": "^4.1.1" }, "dependencies": { @@ -5828,19 +6207,19 @@ "dev": true }, "@typescript-eslint/types": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.20.0.tgz", - "integrity": "sha512-cYY+1PIjei1nk49JAPnH1VEnu7OYdWRdJhYI5wiKOUMhLTG1qsx5cQxCUTuwWCmQoyriadz3Ni8HZmGSofeC+w==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.22.1.tgz", + "integrity": "sha512-2HTkbkdAeI3OOcWbqA8hWf/7z9c6gkmnWNGz0dKSLYLWywUlkOAQ2XcjhlKLj5xBFDf8FgAOF5aQbnLRvgNbCw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.20.0.tgz", - "integrity": "sha512-Knpp0reOd4ZsyoEJdW8i/sK3mtZ47Ls7ZHvD8WVABNx5Xnn7KhenMTRGegoyMTx6TiXlOVgMz9r0pDgXTEEIHA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.1.tgz", + "integrity": "sha512-p3We0pAPacT+onSGM+sPR+M9CblVqdA9F1JEdIqRVlxK5Qth4ochXQgIyb9daBomyQKAXbygxp1aXQRV0GC79A==", "dev": true, "requires": { - "@typescript-eslint/types": "4.20.0", - "@typescript-eslint/visitor-keys": "4.20.0", + "@typescript-eslint/types": "4.22.1", + "@typescript-eslint/visitor-keys": "4.22.1", "debug": "^4.1.1", "globby": "^11.0.1", "is-glob": "^4.0.1", @@ -5849,12 +6228,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.20.0.tgz", - "integrity": "sha512-NXKRM3oOVQL8yNFDNCZuieRIwZ5UtjNLYtmMx2PacEAGmbaEYtGgVHUHVyZvU/0rYZcizdrWjDo+WBtRPSgq+A==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.1.tgz", + "integrity": "sha512-WPkOrIRm+WCLZxXQHCi+WG8T2MMTUFR70rWjdWYddLT7cEfb2P4a3O/J2U1FBVsSFTocXLCoXWY6MZGejeStvQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.20.0", + "@typescript-eslint/types": "4.22.1", "eslint-visitor-keys": "^2.0.0" } }, @@ -5874,9 +6253,9 @@ } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "fast-glob": { @@ -5919,35 +6298,35 @@ } }, "@typescript-eslint/scope-manager": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.20.0.tgz", - "integrity": "sha512-/zm6WR6iclD5HhGpcwl/GOYDTzrTHmvf8LLLkwKqqPKG6+KZt/CfSgPCiybshmck66M2L5fWSF/MKNuCwtKQSQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.22.1.tgz", + "integrity": "sha512-d5bAiPBiessSmNi8Amq/RuLslvcumxLmyhf1/Xa9IuaoFJ0YtshlJKxhlbY7l2JdEk3wS0EnmnfeJWSvADOe0g==", "dev": true, "requires": { - "@typescript-eslint/types": "4.20.0", - "@typescript-eslint/visitor-keys": "4.20.0" + "@typescript-eslint/types": "4.22.1", + "@typescript-eslint/visitor-keys": "4.22.1" }, "dependencies": { "@typescript-eslint/types": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.20.0.tgz", - "integrity": "sha512-cYY+1PIjei1nk49JAPnH1VEnu7OYdWRdJhYI5wiKOUMhLTG1qsx5cQxCUTuwWCmQoyriadz3Ni8HZmGSofeC+w==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.22.1.tgz", + "integrity": "sha512-2HTkbkdAeI3OOcWbqA8hWf/7z9c6gkmnWNGz0dKSLYLWywUlkOAQ2XcjhlKLj5xBFDf8FgAOF5aQbnLRvgNbCw==", "dev": true }, "@typescript-eslint/visitor-keys": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.20.0.tgz", - "integrity": "sha512-NXKRM3oOVQL8yNFDNCZuieRIwZ5UtjNLYtmMx2PacEAGmbaEYtGgVHUHVyZvU/0rYZcizdrWjDo+WBtRPSgq+A==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.1.tgz", + "integrity": "sha512-WPkOrIRm+WCLZxXQHCi+WG8T2MMTUFR70rWjdWYddLT7cEfb2P4a3O/J2U1FBVsSFTocXLCoXWY6MZGejeStvQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.20.0", + "@typescript-eslint/types": "4.22.1", "eslint-visitor-keys": "^2.0.0" } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } @@ -8764,6 +9143,16 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -9047,20 +9436,37 @@ "toggle-selection": "^1.0.6" } }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" - }, "core-js-compat": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.1.tgz", - "integrity": "sha512-ZHQTdTPkqvw2CeHiZC970NNJcnwzT6YIueDMASKt+p3WbZsLXOcoD392SkcWhkC0wBBHhlfhqGKKsNCQUozYtg==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.0.tgz", + "integrity": "sha512-vvaN8EOvYBEjrr+MN3vCKrMNc/xdYZI+Rt/uPMROi4T5Hj8Fz6TiPQm2mrB9aZoQVW1lCFHYmMrv99aUct9mkg==", "requires": { - "browserslist": "^4.16.3", + "browserslist": "^4.16.6", "semver": "7.0.0" }, "dependencies": { + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "caniuse-lite": { + "version": "1.0.30001223", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz", + "integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA==" + }, + "electron-to-chromium": { + "version": "1.3.727", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz", + "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==" + }, "semver": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", @@ -9636,9 +10042,9 @@ } }, "detox": { - "version": "18.11.2", - "resolved": "https://registry.npmjs.org/detox/-/detox-18.11.2.tgz", - "integrity": "sha512-zEm4sdz6ItKIzWByfLldPzk8SLE562l+/nRKUBfV9fXzys6VeZ7YKb1YbMmC2JF0slmR4rIqCr9Fji4laDwE6w==", + "version": "18.13.0", + "resolved": "https://registry.npmjs.org/detox/-/detox-18.13.0.tgz", + "integrity": "sha512-YQPhi+uUGhVXYQm4W76EyKXdDKXnxq3dO+9ua22gGhNGwiJDbV8TUOavZNMbjBKWLb+OueGKOEBp4uNGOrVANw==", "dev": true, "requires": { "bunyan": "^1.8.12", @@ -9655,6 +10061,7 @@ "proper-lockfile": "^3.0.2", "resolve-from": "^5.0.0", "sanitize-filename": "^1.6.1", + "semver": "^7.0.0", "serialize-error": "^8.0.1", "shell-quote": "^1.7.2", "signal-exit": "^3.0.3", @@ -9815,9 +10222,9 @@ } }, "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", "dev": true }, "y18n": { @@ -9926,9 +10333,9 @@ } }, "dom-helpers": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz", - "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "dev": true, "requires": { "@babel/runtime": "^7.8.7", @@ -10175,24 +10582,6 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -10350,13 +10739,13 @@ } }, "enzyme-to-json": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.6.1.tgz", - "integrity": "sha512-15tXuONeq5ORoZjV/bUo2gbtZrN2IH+Z6DvL35QmZyKHgbY1ahn6wcnLd9Xv9OjiwbAXiiP8MRZwbZrCv1wYNg==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.6.2.tgz", + "integrity": "sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg==", "dev": true, "requires": { "@types/cheerio": "^0.22.22", - "lodash": "^4.17.15", + "lodash": "^4.17.21", "react-is": "^16.12.0" } }, @@ -10569,13 +10958,13 @@ } }, "eslint": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", - "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", + "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^0.4.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -10638,9 +11027,9 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -10683,9 +11072,9 @@ } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "glob-parent": { @@ -10833,9 +11222,9 @@ "dev": true }, "eslint-plugin-jest": { - "version": "24.3.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.3.tgz", - "integrity": "sha512-IQ9tLHyKEyBw1BM3IE13WxOXQm03h/7dy1KFknUVkoY2N2+Hw7lb/3YFz/4jwcrxXt2+KhA/GoiK7jt8aK19ww==", + "version": "24.3.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz", + "integrity": "sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "^4.0.1" @@ -10848,43 +11237,33 @@ "dev": true }, "@typescript-eslint/experimental-utils": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz", - "integrity": "sha512-xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.1.tgz", + "integrity": "sha512-svYlHecSMCQGDO2qN1v477ax/IDQwWhc7PRBiwAdAMJE7GXk5stF4Z9R/8wbRkuX/5e9dHqbIWxjeOjckK3wLQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.22.0", - "@typescript-eslint/types": "4.22.0", - "@typescript-eslint/typescript-estree": "4.22.0", + "@typescript-eslint/scope-manager": "4.22.1", + "@typescript-eslint/types": "4.22.1", + "@typescript-eslint/typescript-estree": "4.22.1", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" } }, - "@typescript-eslint/scope-manager": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.22.0.tgz", - "integrity": "sha512-OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.22.0", - "@typescript-eslint/visitor-keys": "4.22.0" - } - }, "@typescript-eslint/types": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.22.0.tgz", - "integrity": "sha512-sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.22.1.tgz", + "integrity": "sha512-2HTkbkdAeI3OOcWbqA8hWf/7z9c6gkmnWNGz0dKSLYLWywUlkOAQ2XcjhlKLj5xBFDf8FgAOF5aQbnLRvgNbCw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.0.tgz", - "integrity": "sha512-TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.1.tgz", + "integrity": "sha512-p3We0pAPacT+onSGM+sPR+M9CblVqdA9F1JEdIqRVlxK5Qth4ochXQgIyb9daBomyQKAXbygxp1aXQRV0GC79A==", "dev": true, "requires": { - "@typescript-eslint/types": "4.22.0", - "@typescript-eslint/visitor-keys": "4.22.0", + "@typescript-eslint/types": "4.22.1", + "@typescript-eslint/visitor-keys": "4.22.1", "debug": "^4.1.1", "globby": "^11.0.1", "is-glob": "^4.0.1", @@ -10893,12 +11272,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.0.tgz", - "integrity": "sha512-nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.1.tgz", + "integrity": "sha512-WPkOrIRm+WCLZxXQHCi+WG8T2MMTUFR70rWjdWYddLT7cEfb2P4a3O/J2U1FBVsSFTocXLCoXWY6MZGejeStvQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.22.0", + "@typescript-eslint/types": "4.22.1", "eslint-visitor-keys": "^2.0.0" } }, @@ -10918,9 +11297,9 @@ } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "fast-glob": { @@ -10977,9 +11356,9 @@ } }, "eslint-plugin-react": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz", - "integrity": "sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", + "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", "dev": true, "requires": { "array-includes": "^3.1.3", @@ -12756,9 +13135,9 @@ } }, "harmony-reflect": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", - "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", "dev": true }, "has": { @@ -12981,12 +13360,6 @@ "parse-passwd": "^1.0.0" } }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "html-element-map": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.0.tgz", @@ -14037,9 +14410,9 @@ } }, "jail-monkey": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jail-monkey/-/jail-monkey-2.3.3.tgz", - "integrity": "sha512-c2mP3qESC4YKLnEA01enB8w01FLJ7EDjp9xTCajCuUDyJu8mrAmol63RdD8E5oJ2l0SI27Sn9HmrymFAnOcm9w==" + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/jail-monkey/-/jail-monkey-2.3.4.tgz", + "integrity": "sha512-udKtC0PiS9xMUy/b9uqqhR3hctBfq8U7cpe6XM4KdFoDgvw0Khzxd07jqZt4qqF/LloYhlq+V9z6RZkGN90+ZA==" }, "jest": { "version": "26.6.3", @@ -16308,9 +16681,10 @@ } }, "jetifier": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.6.tgz", - "integrity": "sha512-JNAkmPeB/GS2tCRqUzRPsTOHpGDah7xP18vGJfIjZC+W2sxEHbxgJxetIjIqhjQ3yYbYNEELkM/spKLtwoOSUQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-2.0.0.tgz", + "integrity": "sha512-J4Au9KuT74te+PCCCHKgAjyLlEa+2VyIAEPNCdE5aNkAJ6FAJcAqcdzEkSnzNksIa9NkGmC4tPiClk2e7tCJuQ==", + "dev": true }, "joi": { "version": "17.4.0", @@ -16375,28 +16749,6 @@ "write-file-atomic": "^2.3.0" }, "dependencies": { - "@babel/core": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", - "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.15", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.14", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -16483,16 +16835,6 @@ "to-regex": "^3.0.2" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -16874,12 +17216,6 @@ "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", "dev": true }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", @@ -17327,9 +17663,9 @@ } }, "memoize-one": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", - "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", "dev": true }, "memoizerific": { @@ -17432,51 +17768,6 @@ "yargs": "^15.3.1" }, "dependencies": { - "@babel/core": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", - "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.15", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.14", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - } - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz", - "integrity": "sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==", - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "semver": "^6.3.0" - } - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -17491,9 +17782,9 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17528,13 +17819,6 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } } }, "emoji-regex": { @@ -17638,6 +17922,11 @@ "react-refresh": "^0.4.0" } }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -17656,11 +17945,6 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, "serialize-error": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", @@ -17760,42 +18044,10 @@ "escape-string-regexp": "^1.0.5" }, "dependencies": { - "@babel/core": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", - "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.15", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.14", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, @@ -17807,40 +18059,6 @@ "@babel/core": "^7.0.0", "metro-source-map": "0.64.0", "nullthrows": "^1.1.1" - }, - "dependencies": { - "@babel/core": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", - "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.15", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.14", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, "metro-cache": { @@ -18071,9 +18289,9 @@ } }, "metro-react-native-babel-preset": { - "version": "0.65.2", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.65.2.tgz", - "integrity": "sha512-jBpZwJwnGHXUnzoZl81LlUzvec2dh1llMJ2A7pbTMuCKhx4LjqOGEE1E+hkNqj/Uh7gi6tCPy5JYSCo9Ue/Vog==", + "version": "0.66.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.66.0.tgz", + "integrity": "sha512-rO3yayxplLNxFDc7HyMShN+psgEb2mbw15EMreNvgV8QnXNYHmgU6e15tLbtEvC8LuftOLuSufEdSmR/ykm+aA==", "dev": true, "requires": { "@babel/core": "^7.0.0", @@ -18131,41 +18349,6 @@ "nullthrows": "^1.1.1" }, "dependencies": { - "@babel/core": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", - "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.15", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.14", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz", - "integrity": "sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==", - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "semver": "^6.3.0" - } - }, "metro-react-native-babel-preset": { "version": "0.64.0", "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", @@ -18211,16 +18394,6 @@ "@babel/template": "^7.0.0", "react-refresh": "^0.4.0" } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, @@ -18289,40 +18462,6 @@ "@babel/template": "^7.0.0", "@babel/traverse": "^7.0.0", "nullthrows": "^1.1.1" - }, - "dependencies": { - "@babel/core": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", - "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.15", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.14", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, "metro-transform-worker": { @@ -18343,40 +18482,6 @@ "metro-source-map": "0.64.0", "metro-transform-plugins": "0.64.0", "nullthrows": "^1.1.1" - }, - "dependencies": { - "@babel/core": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", - "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.15", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.14", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, "microevent.ts": { @@ -18597,6 +18702,11 @@ "url-parse": "^1.4.4" } }, + "mockdate": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", + "integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==" + }, "moment": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", @@ -18941,9 +19051,9 @@ "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" }, "node-stream-zip": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.3.tgz", - "integrity": "sha512-Vv95ug+8Jfug4AxcqNV7TeGEk2antNidj+YBOyP8SS8LTHJmjsE3d9h6L831eJtO8p7jesJ3CDtgkwmLO/wcSw==" + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.4.tgz", + "integrity": "sha512-M2nPvnSWFFH+fgLIRZDqmhshmuzXcr+ce9BsHQX/30pXR+cEz/USMYmx9ZAFYy837W2QoDoNzhFtbZhfzaMk9A==" }, "node-version": { "version": "1.2.0", @@ -18963,6 +19073,12 @@ "validate-npm-package-license": "^3.0.1" }, "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -20009,12 +20125,23 @@ } }, "polished": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.1.tgz", - "integrity": "sha512-4MZTrfPMPRLD7ac8b+2JZxei58zw6N1hFkdBDERif5Tlj19y3vPoPusrLG+mJIlPTGnUlKw3+yWz0BazvMx1vg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.2.tgz", + "integrity": "sha512-jq4t3PJUpVRcveC53nnbEX35VyQI05x3tniwp26WFdm1dwaNUBHAi5awa/roBlwQxx1uRhwNSYeAi/aMbfiJCQ==", "dev": true, "requires": { - "@babel/runtime": "^7.12.5" + "@babel/runtime": "^7.13.17" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + } } }, "popper.js": { @@ -20652,9 +20779,9 @@ } }, "react-colorful": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.1.2.tgz", - "integrity": "sha512-FRt9jz6xjiPqQ6bIAQ26kd0oJhHbGBwsA4BDz/F8FDCFuQJDiEl0wVUARNiqRyvQjwfKuhM42P/bMYI0l92hRw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.1.4.tgz", + "integrity": "sha512-WOEpRNz8Oo2SEU4eYQ279jEKFSjpFPa9Vi2U/K0DGwP9wOQ8wYkJcNSd5Qbv1L8OFvyKDCbWekjftXaU5mbmtg==", "dev": true }, "react-dev-utils": { @@ -20847,18 +20974,18 @@ } }, "react-devtools-core": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.12.0.tgz", - "integrity": "sha512-MN7zE3UpccJQLs+tTKGoM1GQFZLJki4PhT4Us0JJgn6MK1m5ZOQnmJZy+cp21LqUBFPXxqmpqeu65/gTRbxK5Q==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.13.1.tgz", + "integrity": "sha512-+N7vZgjQWqkPe/q7yltXOi20U3Zy4WdXax9IcLCNB4nWsUxLrkVF0Mqbsr3h4m/j0dA4046QpJOnlwdWVQuiFw==", "requires": { "shell-quote": "^1.6.1", "ws": "^7" }, "dependencies": { "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==" + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==" } } }, @@ -20970,9 +21097,9 @@ "integrity": "sha512-txfpPCQYiazVdcbMRhatqWKcAxJweUu2wDXvts5/7Wyp6+Y9cHojqXHsLPEckzutfHlxZhG8Oiundbmp8Fd6eQ==" }, "react-native": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.64.0.tgz", - "integrity": "sha512-8dhSHBthgGwAjU+OjqUEA49229ThPMQH7URH0u8L0xoQFCnZO2sZ9Wc6KcbxI0x9KSmjCMFFZqRe3w3QsRv64g==", + "version": "0.64.1", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.64.1.tgz", + "integrity": "sha512-jvSj+hNAfwvhaSmxd5KHJ5HidtG0pDXzoH6DaqNpU74g3CmAiA8vuk58B5yx/DYuffGq6PeMniAcwuh3Xp4biQ==", "requires": { "@jest/create-cache-key-function": "^26.5.0", "@react-native-community/cli": "^5.0.1-alpha.0", @@ -21172,9 +21299,9 @@ } }, "react-native-calendars": { - "version": "1.1254.0", - "resolved": "https://registry.npmjs.org/react-native-calendars/-/react-native-calendars-1.1254.0.tgz", - "integrity": "sha512-6nnrOdpgyJrnu5BpUq+jfKFtLvBEy+csgmQQJ5XQvvIoeoI110TwPfDlQ2U6dUF9wjcge3Sg0UcnimlFXNj8Zg==", + "version": "1.1260.0", + "resolved": "https://registry.npmjs.org/react-native-calendars/-/react-native-calendars-1.1260.0.tgz", + "integrity": "sha512-LOM8Jb9RGSv/qwAnuj55ijgsiC5uGFnlLIyE4GyEMoW212qIjTaNIgGR5kLQQmJ8cfh7vBpuDPKy17Io4Ar/4A==", "requires": { "hoist-non-react-statics": "^3.3.1", "immutable": "^4.0.0-rc.12", @@ -21209,9 +21336,9 @@ "dev": true }, "react-native-device-info": { - "version": "8.0.8", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.0.8.tgz", - "integrity": "sha512-ljtm48riQeZgf2epIq8TvyxiXZW6vstIX7JDlr89HtrYLUvlX3dmOmxtwZshMuAdk0VpGz/72zvpTDZMSQcKig==" + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.1.3.tgz", + "integrity": "sha512-73e3wiGFL8DvIXEd8x4Aq+mO8mZvHARwfYorIEu+X0trLHY92bP5Ict8DJHDjCQ0+HtAvpA4Wda2VoUVN1zh6Q==" }, "react-native-document-picker": { "version": "5.0.3", @@ -21219,26 +21346,26 @@ "integrity": "sha512-OLTUB9SvY2J6bYZ6F/b4FKwDfEimP+sRsEP3OSp1oosYD4+G9C5J3CKiJ69B7CCXmA89Bi/QBr5j2lW9y9rWlQ==" }, "react-native-dotenv": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/react-native-dotenv/-/react-native-dotenv-2.5.3.tgz", - "integrity": "sha512-Fibw5q6vy91aRwol7yO6U9Om+EyE7Vs4pO70AYGRkDuMkaQ4EIyYw9mmiPcKo6VFCwlpE8y1AZImxoKREFASXA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-native-dotenv/-/react-native-dotenv-2.5.5.tgz", + "integrity": "sha512-ODaFNUX52ZYfBLJ8WSEm87nv+HrwxeEoZchuwsPyEWwsC4ARRhklfsKTf1dg09UpPS31zx5IUV431fLvcepCsA==", "dev": true, "requires": { "dotenv": "^8.0.0" }, "dependencies": { "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true } } }, "react-native-elements": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/react-native-elements/-/react-native-elements-3.3.2.tgz", - "integrity": "sha512-bDWQt0WEuJEOrwzSYx0mVBV3aoRtJAsK0Kc2sioMsshSEhPOZK17Ccx+EvLBSpZ9uWxPyx42Z7hUH/8dQNu67g==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/react-native-elements/-/react-native-elements-3.4.1.tgz", + "integrity": "sha512-SPotW75psW1qyZgtiWuiKSTASdd4yNYvf6/vgO6nyl2kEgZG5nP5wtFxL/GsUVxwHh7yc8xnJ3J9pkApa7p9lQ==", "requires": { "@types/react-native-vector-icons": "^6.4.6", "color": "^3.1.2", @@ -21308,9 +21435,9 @@ "integrity": "sha512-MDeEwAbn9LJDOfHq0QLCGaZirVLk2X/tHqkAqz3y6uxryTRdSl9PwleOVar5Jx2oAPEg4J9BXbUD1wwOOi+5Kg==" }, "react-native-keychain": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/react-native-keychain/-/react-native-keychain-6.2.0.tgz", - "integrity": "sha512-U6fnOQRJPq+c0Abl+FoYy9v0H3kQU587tMamU/o+MoBSUScFLE3DQpkyT1PW4NF5IObgiGuqQdmjC2KgtBpjGA==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/react-native-keychain/-/react-native-keychain-7.0.0.tgz", + "integrity": "sha512-tH26sgW4OxB/llXmhO+DajFISEUoF1Ip2+WSDMIgCt8SP1xRE81m2qFzgIOc/7StYsUERxHhDPkxvq2H0/Goig==" }, "react-native-linear-gradient": { "version": "2.5.6", @@ -21323,9 +21450,9 @@ "integrity": "sha512-36cYGZGCG82pMiVJbQa5WMA93khP4v5JqLutFkMyB/eRpCULHmojNIBlbUPIY9SCeN4sg5VBRFTVGCtTg2r2kA==" }, "react-native-localize": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-2.0.2.tgz", - "integrity": "sha512-4Ii7lqiD9iL0LxTWifAiEsDcDPpvos/29fEVkHxgEDD7J5f+NROMkFSFomKgz1Cab1TmN5mau3o8yFmYrPFcnw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-2.0.3.tgz", + "integrity": "sha512-6SILy2yX/U1rTjF56/BiywcFXeO9AY8LmPF2p3TgP3Y2uKejxAOOQ4nzr+bAP1h+X5TaBmwTPBGNMZ1TttEJvA==" }, "react-native-mmkv-storage": { "version": "0.4.4", @@ -21362,9 +21489,9 @@ } }, "react-native-navigation": { - "version": "7.11.3", - "resolved": "https://registry.npmjs.org/react-native-navigation/-/react-native-navigation-7.11.3.tgz", - "integrity": "sha512-3cCtHwa2Tqc5Uk4QFSfocfOgOSKcRgfVlZ1m40oFUGV8yx9TaqA9BlPyQnWtaaPz8lHgKA3pkUmXQpFq0zOQzw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/react-native-navigation/-/react-native-navigation-7.14.0.tgz", + "integrity": "sha512-Cq4nUfiwUln87pkO8+AWgXtTKAFwFINIVAovS1I4RdIC8Sw/9+MpSEPZncx8RpFSyUo2t6JnHl2A0eYSzSmwlw==", "requires": { "hoist-non-react-statics": "3.x.x", "lodash": "4.17.x", @@ -21391,9 +21518,9 @@ "integrity": "sha512-a1RlcvtvIKL5L2NNPp9u3IQQjV877/tNkCvJGC71F/2gnbykxAQAPBOzLFGDtkne3439F2AgYra+oNFiQjyd/g==" }, "react-native-permissions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-3.0.1.tgz", - "integrity": "sha512-loCoNEeBeLsrvITZmrkuCUEMFiuwhKuFvkWbC5Imco4bj2hUW7BVI29i8QyxkC53ydRfSR9OtbR3KQIyghWiNQ==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-3.0.3.tgz", + "integrity": "sha512-8xiEnU29qHZcT05XXwhPHiLChTt82Pn5Z/nFdDOYGNFZ+IYSbYeGmIxFpratCRO6dgLptNaDFDPiyw2X7UZTeg==" }, "react-native-ratings": { "version": "7.6.1", @@ -21405,60 +21532,20 @@ } }, "react-native-reanimated": { - "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.1.0.tgz", + "integrity": "sha512-tlPvvcdf+X7HGQ7g/7npBFhwMznfdk7MHUc9gUB/kp2abSscXNe/kOVKlrNEOO4DS11rNOXc+llFxVFMuNk0zA==", "requires": { - "fbjs": "^1.0.0" - }, - "dependencies": { - "fbjs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz", - "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==", - "requires": { - "core-js": "^2.4.1", - "fbjs-css-vars": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - } + "@babel/plugin-transform-object-assign": "^7.10.4", + "fbjs": "^3.0.0", + "mockdate": "^3.0.2", + "string-hash-64": "^1.0.3" } }, "react-native-redash": { - "version": "16.0.8", - "resolved": "https://registry.npmjs.org/react-native-redash/-/react-native-redash-16.0.8.tgz", - "integrity": "sha512-2Opu4ls31HRGQnz11iq4cnJhCz0GnasnnZgihAlCsVFc9ofa9+47hbc1xo/WkN0OZ5X5KKo869soyfYQgIxy+w==", + "version": "16.0.11", + "resolved": "https://registry.npmjs.org/react-native-redash/-/react-native-redash-16.0.11.tgz", + "integrity": "sha512-9yTpeabkAoWASzmhEkynNh1wDTrLVtbE+x9dOV1DI23vRa7k1HI+Y1jOUNOPyRG2ddgHampNq9iHtsLnkK4mtw==", "requires": { "abs-svg-path": "^0.1.1", "normalize-svg-path": "^1.0.1", @@ -21491,9 +21578,9 @@ "integrity": "sha512-k2Nty4PwSnrg9HwrYeeE+EYqViYJoOFwEy9LxL5RIRfoqxAq/uQXNGwpUg2/u4gnKpBbEPa9eRh15KKMe/VHkA==" }, "react-native-screens": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.0.0.tgz", - "integrity": "sha512-35II5oxTaVp3OP8y0eLPOPpQkxG4fRKQ+dL1YSE1we5kCZFOU0l/Rn0T79HbyUu1LPwUZr6lZupPs0ULnRyMuQ==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.1.1.tgz", + "integrity": "sha512-cjhK85T8LQ7uqqmwvLb8FKNk1RfgJd1jtbUm1lOxUmJreFki5Wh2SUlx0DAvNG35U6quGD15KPYRducGa+M04g==" }, "react-native-section-list-get-item-layout": { "version": "2.2.3", @@ -21501,9 +21588,9 @@ "integrity": "sha512-fzCW5SiYP6qCZyDHebaElHonIFr8NFrZK9JDkxFLnpxMJih4d+HQ4rHyOs0Z4Gb/FjyCVbRH7RtEnjeQ0XffMg==" }, "react-native-share": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/react-native-share/-/react-native-share-5.1.7.tgz", - "integrity": "sha512-BSBh9OpzCoBozc6MfU0erq8KqnAlyrQdAGzGqoS1ugdHbBrhG4UoRiiTPN8AWNpw0gozKV7hLVw0UKEOlsCqwg==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/react-native-share/-/react-native-share-6.0.1.tgz", + "integrity": "sha512-K7mw2ep4cg++K6GUab32Kic3DeDUveonsQhTElwb6pZyjp0R/TLGQ11+pxcZBVlTiZhdOttyrLdCA6TsMX1lzg==" }, "react-native-size-matters": { "version": "0.3.1", @@ -21518,15 +21605,15 @@ "prop-types": "^15.5.6" } }, - "react-native-status-bar-size": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/react-native-status-bar-size/-/react-native-status-bar-size-0.3.3.tgz", - "integrity": "sha512-wG9YRcAECGM6i87T1j8mZqGG6FXHTJ8ME6+agweocvXLQqeYOeDyqSiMn+dhtDDJAD7F3JXyMU+tepjcydtvsg==" + "react-native-startup-time": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-native-startup-time/-/react-native-startup-time-2.0.0.tgz", + "integrity": "sha512-tYruEDvwoVEOf+FMTTqp3aHNfA5ARWXXV+ar4wJBIQBdIlPEYDQWaYljOAV2dITuTsKAyPY2Q/N58gkKvGWIrA==" }, "react-native-storybook-loader": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/react-native-storybook-loader/-/react-native-storybook-loader-2.0.2.tgz", - "integrity": "sha512-p39ezu9v3YMQTMuX4x1qxRkAkrB/rmdxUXD0yM0kHoecXita1e+IJD8ZAN1Ulv5HVa91MUtHDXjaMTxinTQPcA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-native-storybook-loader/-/react-native-storybook-loader-2.0.4.tgz", + "integrity": "sha512-MmBdO7ugBkHEZa4F1qXFgjB7ejURmKGTZ/3o6zXPgUpaoMdh8tT5LLliJH9uOFzh7oY13TfTMZ9HyCa3E/dqLg==", "dev": true, "requires": { "colors": "^1.1.2", @@ -21698,9 +21785,9 @@ } }, "react-native-svg": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-12.1.0.tgz", - "integrity": "sha512-1g9qBRci7man8QsHoXn6tP3DhCDiypGgc6+AOWq+Sy+PmP6yiyf8VmvKuoqrPam/tf5x+ZaBT2KI0gl7bptZ7w==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-12.1.1.tgz", + "integrity": "sha512-NIAJ8jCnXGCqGWXkkJ1GTzO4a3Md5at5sagYV8Vh4MXYnL4z5Rh428Wahjhh+LIjx40EE5xM5YtwyJBqOIba2Q==", "requires": { "css-select": "^2.1.0", "css-tree": "^1.0.0-alpha.39" @@ -21886,9 +21973,9 @@ } }, "react-redux": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.3.tgz", - "integrity": "sha512-ZhAmQ1lrK+Pyi0ZXNMUZuYxYAZd59wFuVDGUt536kSGdD0ya9Q7BfsE95E3TsFLE3kOSFp5m6G5qbatE+Ic1+w==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.4.tgz", + "integrity": "sha512-hOQ5eOSkEJEXdpIKbnRyl04LhaWabkDPV+Ix97wqQX3T3d2NQ8DUblNXXtNMavc7DpswyQM6xfaN4HQDKNY2JA==", "requires": { "@babel/runtime": "^7.12.1", "@types/react-redux": "^7.1.16", @@ -22264,12 +22351,11 @@ } }, "redux": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", - "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", + "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" + "@babel/runtime": "^7.9.2" } }, "redux-action-buffer": { @@ -23035,9 +23121,9 @@ } }, "serialize-error": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.0.1.tgz", - "integrity": "sha512-r5o60rWFS+8/b49DNAbB+GXZA0SpDpuWE758JxDKgRTga05r3U5lwyksE91dYKDhXSmnu36RALj615E6Aj5pSg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", "requires": { "type-fest": "^0.20.2" }, @@ -23150,6 +23236,14 @@ "eme-encryption-scheme-polyfill": "^2.0.1" } }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + }, "shallow-equal": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", @@ -23793,6 +23887,11 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" }, + "string-hash-64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string-hash-64/-/string-hash-64-1.0.3.tgz", + "integrity": "sha512-D5OKWKvDhyVWWn2x5Y9b+37NUllks34q1dCDhk/vYcso9fmhs+Tl3KR/gE4v5UNj2UA35cnX4KdVVGkG1deKqw==" + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -24019,11 +24118,6 @@ "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==" }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -24043,26 +24137,23 @@ } }, "table": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.9.tgz", - "integrity": "sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.0.tgz", + "integrity": "sha512-SAM+5p6V99gYiiy2gT5ArdzgM1dLDed0nkrWmG6Fry/bUS/m9x83BwpJUOf1Qj/x2qJd+thL6IkIx7qPGRxqBw==", "dev": true, "requires": { "ajv": "^8.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", "lodash.clonedeep": "^4.5.0", - "lodash.flatten": "^4.4.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "ajv": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz", - "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.2.0.tgz", + "integrity": "sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -24645,9 +24736,9 @@ "dev": true }, "ts-jest": { - "version": "26.5.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.4.tgz", - "integrity": "sha512-I5Qsddo+VTm94SukBJ4cPimOoFZsYTeElR2xy6H2TOVs+NsvgYglW8KuQgKoApOKuaU/Ix/vrF9ebFZlb5D2Pg==", + "version": "26.5.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", + "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", "dev": true, "requires": { "bs-logger": "0.x", @@ -24773,9 +24864,9 @@ } }, "typescript": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", - "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", "dev": true }, "ua-parser-js": { @@ -24821,9 +24912,9 @@ } }, "underscore": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", "dev": true }, "unfetch": { diff --git a/package.json b/package.json index 67811e34e..f54086137 100644 --- a/package.json +++ b/package.json @@ -7,16 +7,16 @@ "license": "Apache 2.0", "private": true, "dependencies": { - "@babel/runtime": "7.13.10", + "@babel/runtime": "7.14.0", "@react-native-community/async-storage": "1.12.1", "@react-native-community/cameraroll": "4.0.4", "@react-native-community/clipboard": "1.5.1", - "@react-native-community/masked-view": "0.1.10", + "@react-native-community/masked-view": "0.1.11", "@react-native-community/netinfo": "6.0.0", - "@react-navigation/native": "5.9.3", - "@react-navigation/stack": "5.14.3", + "@react-navigation/native": "5.9.4", + "@react-navigation/stack": "5.14.5", "@rudderstack/rudder-sdk-react-native": "1.0.6", - "@sentry/react-native": "2.4.0", + "@sentry/react-native": "2.4.2", "analytics-react-native": "1.2.0", "commonmark": "github:mattermost/commonmark.js#d716e1c89e0a6721051df7bc74ad7683e1ae438f", "commonmark-react-renderer": "github:mattermost/commonmark-react-renderer#81af294317ebe19b5cc195d7fbc4f4a58177854c", @@ -26,21 +26,21 @@ "form-data": "4.0.0", "fuse.js": "6.4.6", "intl": "1.2.5", - "jail-monkey": "2.3.3", + "jail-monkey": "2.3.4", "mime-db": "1.47.0", "moment-timezone": "0.5.33", "prop-types": "15.7.2", "react": "17.0.2", "react-intl": "2.8.0", - "react-native": "0.64.0", + "react-native": "0.64.1", "react-native-android-open-settings": "1.3.0", "react-native-animatable": "1.3.3", "react-native-button": "3.0.1", - "react-native-calendars": "1.1254.0", + "react-native-calendars": "1.1260.0", "react-native-cookies": "github:mattermost/react-native-cookies#b35bafc388ae09c83bd875e887daf6a0755e0b40", - "react-native-device-info": "8.0.8", + "react-native-device-info": "8.1.3", "react-native-document-picker": "5.0.3", - "react-native-elements": "3.3.2", + "react-native-elements": "3.4.1", "react-native-exception-handler": "2.10.10", "react-native-fast-image": "8.3.4", "react-native-file-viewer": "2.1.4", @@ -50,31 +50,31 @@ "react-native-image-picker": "2.3.4", "react-native-keyboard-aware-scrollview": "2.1.0", "react-native-keyboard-tracking-view": "5.7.0", - "react-native-keychain": "6.2.0", + "react-native-keychain": "7.0.0", "react-native-linear-gradient": "2.5.6", "react-native-local-auth": "1.6.0", - "react-native-localize": "2.0.2", + "react-native-localize": "2.0.3", "react-native-mmkv-storage": "0.4.4", - "react-native-navigation": "7.11.3", + "react-native-navigation": "7.14.0", "react-native-notifications": "3.4.2", "react-native-passcode-status": "1.1.2", - "react-native-permissions": "3.0.1", - "react-native-reanimated": "1.13.2", - "react-native-redash": "16.0.8", + "react-native-permissions": "3.0.3", + "react-native-reanimated": "2.1.0", + "react-native-redash": "16.0.11", "react-native-safe-area": "0.5.1", "react-native-safe-area-context": "3.2.0", - "react-native-screens": "3.0.0", + "react-native-screens": "3.1.1", "react-native-section-list-get-item-layout": "2.2.3", - "react-native-share": "5.1.7", + "react-native-share": "6.0.1", "react-native-slider": "0.11.0", - "react-native-status-bar-size": "0.3.3", - "react-native-svg": "12.1.0", + "react-native-startup-time": "2.0.0", + "react-native-svg": "12.1.1", "react-native-vector-icons": "8.1.0", "react-native-video": "5.1.1", "react-native-webview": "github:mattermost/react-native-webview#b5e22940a613869d3999feac9451ee65352f4fbe", "react-native-youtube": "2.0.1", - "react-redux": "7.2.3", - "redux": "4.0.5", + "react-redux": "7.2.4", + "redux": "4.1.0", "redux-action-buffer": "1.2.0", "redux-batched-actions": "0.5.0", "redux-persist": "6.0.0", @@ -84,29 +84,29 @@ "rn-fetch-blob": "0.12.0", "rn-placeholder": "3.0.3", "semver": "7.3.5", - "serialize-error": "8.0.1", + "serialize-error": "8.1.0", "shallow-equals": "1.0.0", "tinycolor2": "1.4.2", "url-parse": "1.5.1" }, "devDependencies": { - "@babel/cli": "7.13.14", - "@babel/core": "7.13.14", - "@babel/plugin-transform-runtime": "7.13.10", - "@babel/preset-env": "7.13.12", - "@babel/register": "7.13.14", + "@babel/cli": "7.13.16", + "@babel/core": "7.14.0", + "@babel/plugin-transform-runtime": "7.13.15", + "@babel/preset-env": "7.14.1", + "@babel/register": "7.13.16", "@react-native-community/eslint-config": "2.0.0", - "@storybook/addon-knobs": "6.2.2", + "@storybook/addon-knobs": "6.2.9", "@storybook/addon-ondevice-knobs": "5.3.25", "@storybook/react-native": "5.3.25", "@storybook/react-native-server": "5.3.23", "@testing-library/react-native": "7.2.0", "@types/enzyme": "3.10.8", "@types/enzyme-adapter-react-16": "1.0.6", - "@types/jest": "26.0.22", + "@types/jest": "26.0.23", "@types/moment-timezone": "0.5.30", - "@types/react": "17.0.3", - "@types/react-native": "0.64.2", + "@types/react": "17.0.5", + "@types/react-native": "0.64.5", "@types/react-native-share": "3.3.2", "@types/react-native-video": "5.0.4", "@types/react-redux": "7.1.16", @@ -114,32 +114,32 @@ "@types/shallow-equals": "1.0.0", "@types/tinycolor2": "1.4.2", "@types/url-parse": "1.4.3", - "@typescript-eslint/eslint-plugin": "4.20.0", - "@typescript-eslint/parser": "4.20.0", + "@typescript-eslint/eslint-plugin": "4.22.1", + "@typescript-eslint/parser": "4.22.1", "babel-eslint": "10.1.0", "babel-jest": "26.6.3", "babel-loader": "8.2.2", "babel-plugin-module-resolver": "4.1.0", "babel-plugin-transform-remove-console": "6.9.4", "deep-freeze": "0.0.1", - "detox": "18.11.2", + "detox": "18.13.0", "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.6", - "enzyme-to-json": "3.6.1", - "eslint": "7.23.0", + "enzyme-to-json": "3.6.2", + "eslint": "7.26.0", "eslint-plugin-header": "3.1.1", - "eslint-plugin-jest": "24.3.3", + "eslint-plugin-jest": "24.3.6", "eslint-plugin-mattermost": "github:mattermost/eslint-plugin-mattermost#070ce792d105482ffb2b27cfc0b7e78b3d20acee", - "eslint-plugin-react": "7.23.1", - "harmony-reflect": "1.6.1", + "eslint-plugin-react": "7.23.2", + "harmony-reflect": "1.6.2", "husky": "^6.0.0", "isomorphic-fetch": "3.0.0", "jest": "26.6.3", "jest-cli": "26.6.3", "jest-enzyme": "7.1.2", - "jetifier": "1.6.6", + "jetifier": "2.0.0", "jsdom-global": "3.0.2", - "metro-react-native-babel-preset": "0.65.2", + "metro-react-native-babel-preset": "0.66.0", "mmjstool": "github:mattermost/mattermost-utilities#3faa6075089a541d8c90ed85114e644c7a23fedf", "mock-async-storage": "2.2.0", "mock-socket": "9.0.3", @@ -148,14 +148,14 @@ "patch-package": "6.4.7", "react-dom": "17.0.2", "react-native-dev-menu": "4.0.2", - "react-native-dotenv": "2.5.3", - "react-native-storybook-loader": "2.0.2", + "react-native-dotenv": "2.5.5", + "react-native-storybook-loader": "2.0.4", "redux-mock-store": "1.5.4", "redux-persist-node-storage": "2.0.0", "socketcluster": "16.0.1", - "ts-jest": "26.5.4", - "typescript": "4.2.3", - "underscore": "1.12.1", + "ts-jest": "26.5.6", + "typescript": "4.2.4", + "underscore": "1.13.1", "util": "0.12.3" }, "scripts": { diff --git a/patches/react-native+0.64.0.patch b/patches/react-native+0.64.1.patch similarity index 100% rename from patches/react-native+0.64.0.patch rename to patches/react-native+0.64.1.patch diff --git a/patches/react-native-device-info+8.0.8.patch b/patches/react-native-device-info+8.1.3.patch similarity index 100% rename from patches/react-native-device-info+8.0.8.patch rename to patches/react-native-device-info+8.1.3.patch diff --git a/patches/react-native-elements+3.3.2.patch b/patches/react-native-elements+3.4.1.patch similarity index 74% rename from patches/react-native-elements+3.3.2.patch rename to patches/react-native-elements+3.4.1.patch index 485f220f5..7df990596 100644 --- a/patches/react-native-elements+3.3.2.patch +++ b/patches/react-native-elements+3.4.1.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/react-native-elements/dist/searchbar/SearchBar-android.js b/node_modules/react-native-elements/dist/searchbar/SearchBar-android.js -index 4261cea..183bde1 100644 +index fe25d36..a2a1a34 100644 --- a/node_modules/react-native-elements/dist/searchbar/SearchBar-android.js +++ b/node_modules/react-native-elements/dist/searchbar/SearchBar-android.js @@ -10,7 +10,7 @@ var __rest = (this && this.__rest) || function (s, e) { @@ -11,7 +11,7 @@ index 4261cea..183bde1 100644 import { renderNode } from '../helpers'; import Input from '../input/Input'; import Icon from '../icons/Icon'; -@@ -65,18 +65,16 @@ class SearchBar extends Component { +@@ -74,18 +74,11 @@ class SearchBar extends Component { this.props.onChangeText(text); this.setState({ isEmpty: text === '' }); }; @@ -24,21 +24,17 @@ index 4261cea..183bde1 100644 isEmpty: value ? value === '' : true, }; - Keyboard.addListener('keyboardDidHide', this._keyboardDidHide); - } +- } - componentWillUnmount() { - Keyboard.removeListener('keyboardDidHide', this._keyboardDidHide); -+ componentDidUpdate(prevProps) { -+ if (this.props.value !== prevProps.value) { -+ this.setState({isEmpty: this.props.value === ''}); -+ } } render() { - const _a = this.props, { theme, clearIcon = { name: 'clear' }, containerStyle, leftIconContainerStyle, rightIconContainerStyle, inputContainerStyle, inputStyle, searchIcon = { name: 'search' }, cancelIcon = { name: 'arrow-back' }, showLoading = false, loadingProps = {} } = _a, attributes = __rest(_a, ["theme", "clearIcon", "containerStyle", "leftIconContainerStyle", "rightIconContainerStyle", "inputContainerStyle", "inputStyle", "searchIcon", "cancelIcon", "showLoading", "loadingProps"]); + var _a; diff --git a/node_modules/react-native-elements/dist/searchbar/SearchBar-ios.js b/node_modules/react-native-elements/dist/searchbar/SearchBar-ios.js -index b0761ab..4fa5e83 100644 +index 9581256..b10d579 100644 --- a/node_modules/react-native-elements/dist/searchbar/SearchBar-ios.js +++ b/node_modules/react-native-elements/dist/searchbar/SearchBar-ios.js -@@ -82,6 +82,11 @@ class SearchBar extends Component { +@@ -79,6 +79,11 @@ class SearchBar extends Component { cancelButtonWidth: null, }; } @@ -50,7 +46,7 @@ index b0761ab..4fa5e83 100644 render() { const _a = this.props, { theme, cancelButtonProps, cancelButtonTitle, clearIcon, containerStyle, leftIconContainerStyle, rightIconContainerStyle, inputContainerStyle, inputStyle, placeholderTextColor, showLoading, loadingProps, searchIcon, showCancel } = _a, attributes = __rest(_a, ["theme", "cancelButtonProps", "cancelButtonTitle", "clearIcon", "containerStyle", "leftIconContainerStyle", "rightIconContainerStyle", "inputContainerStyle", "inputStyle", "placeholderTextColor", "showLoading", "loadingProps", "searchIcon", "showCancel"]); const { hasFocus, isEmpty } = this.state; -@@ -159,7 +164,6 @@ const styles = StyleSheet.create({ +@@ -154,7 +159,6 @@ const styles = StyleSheet.create({ paddingBottom: 13, paddingTop: 13, flexDirection: 'row', @@ -58,7 +54,7 @@ index b0761ab..4fa5e83 100644 alignItems: 'center', }, input: { -@@ -169,7 +173,7 @@ const styles = StyleSheet.create({ +@@ -164,7 +168,7 @@ const styles = StyleSheet.create({ inputContainer: { borderBottomWidth: 0, borderRadius: 9, diff --git a/patches/react-native-keychain+6.2.0.patch b/patches/react-native-keychain+7.0.0.patch similarity index 88% rename from patches/react-native-keychain+6.2.0.patch rename to patches/react-native-keychain+7.0.0.patch index d7a1f5682..5b95d1a0f 100644 --- a/patches/react-native-keychain+6.2.0.patch +++ b/patches/react-native-keychain+7.0.0.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/react-native-keychain/android/src/main/java/com/oblador/keychain/KeychainModule.java b/node_modules/react-native-keychain/android/src/main/java/com/oblador/keychain/KeychainModule.java -index d4ded69..af35eaa 100644 +index 3da433f..7bbc965 100644 --- a/node_modules/react-native-keychain/android/src/main/java/com/oblador/keychain/KeychainModule.java +++ b/node_modules/react-native-keychain/android/src/main/java/com/oblador/keychain/KeychainModule.java @@ -1,6 +1,7 @@ @@ -7,10 +7,10 @@ index d4ded69..af35eaa 100644 import android.os.Build; +import android.os.Bundle; - import android.os.Looper; import android.text.TextUtils; import android.util.Log; -@@ -128,6 +129,7 @@ public class KeychainModule extends ReactContextBaseJavaModule { + +@@ -129,6 +130,7 @@ public class KeychainModule extends ReactContextBaseJavaModule { //region Members /** Name-to-instance lookup map. */ private final Map cipherStorageMap = new HashMap<>(); @@ -18,7 +18,7 @@ index d4ded69..af35eaa 100644 /** Shared preferences storage. */ private final PrefsStorage prefsStorage; //endregion -@@ -139,13 +141,13 @@ public class KeychainModule extends ReactContextBaseJavaModule { +@@ -140,13 +142,13 @@ public class KeychainModule extends ReactContextBaseJavaModule { super(reactContext); prefsStorage = new PrefsStorage(reactContext); @@ -36,7 +36,7 @@ index d4ded69..af35eaa 100644 } /** Allow initialization in chain. */ -@@ -277,6 +279,12 @@ public class KeychainModule extends ReactContextBaseJavaModule { +@@ -278,6 +280,11 @@ public class KeychainModule extends ReactContextBaseJavaModule { @Nullable final ReadableMap options, @NonNull final Promise promise) { try { @@ -45,11 +45,10 @@ index d4ded69..af35eaa 100644 + promise.resolve(Arguments.fromBundle(cached)); + return; + } -+ final ResultSet resultSet = prefsStorage.getEncryptedEntry(alias); if (resultSet == null) { -@@ -299,6 +307,7 @@ public class KeychainModule extends ReactContextBaseJavaModule { +@@ -300,6 +307,7 @@ public class KeychainModule extends ReactContextBaseJavaModule { credentials.putString(Maps.USERNAME, decryptionResult.username); credentials.putString(Maps.PASSWORD, decryptionResult.password); credentials.putString(Maps.STORAGE, current.getCipherStorageName()); diff --git a/patches/react-native-navigation+7.11.3.patch b/patches/react-native-navigation+7.14.0.patch similarity index 82% rename from patches/react-native-navigation+7.11.3.patch rename to patches/react-native-navigation+7.14.0.patch index 1ef3a7353..854f93ae5 100644 --- a/patches/react-native-navigation+7.11.3.patch +++ b/patches/react-native-navigation+7.14.0.patch @@ -66,21 +66,4 @@ index 815e1c6..a35a087 100644 + [hitTestResult isKindOfClass:[RNCSafeAreaProvider class]]) { return nil; } - -diff --git a/node_modules/react-native-navigation/lib/ios/RNNViewLocation.m b/node_modules/react-native-navigation/lib/ios/RNNViewLocation.m -index 6b9981d..f725701 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)getClippedCornerRadius:(UIView *)view { - - - (CATransform3D)getTransform:(UIView *)view { - if (view) { -- if (!CATransform3DEqualToTransform(view.layer.transform, CATransform3DIdentity)) { -- return view.layer.transform; -- } else { -- return [self getTransform:view.superview]; -- } -+ return view.layer.transform; - } - - return CATransform3DIdentity; + \ No newline at end of file diff --git a/share_extension/components/channel_item.tsx b/share_extension/components/channel_item.tsx index ee32a1776..e9f524ad6 100644 --- a/share_extension/components/channel_item.tsx +++ b/share_extension/components/channel_item.tsx @@ -44,6 +44,8 @@ const ChannelItem = ({onSelect, selected, channel}: ChannelItemProps) => { ); } + const channelType = channelTypes[channel.type] || PublicChannel; + return ( { > - {channelTypes[channel.type] || PublicChannel} + {channelType()}