diff --git a/.babelrc b/.babelrc index ad8a1331703..5166f5e0e89 100644 --- a/.babelrc +++ b/.babelrc @@ -10,7 +10,6 @@ } }, "plugins": [ - "babel-plugin-rewire", "babel-plugin-styled-components", "date-fns", [ diff --git a/ios/Podfile.lock b/ios/Podfile.lock index f254ba7cd49..8b682b9c6eb 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -35,11 +35,11 @@ PODS: - DoubleConversion - glog - glog (0.3.5) - - GoogleToolboxForMac/Defines (2.2.0) - - GoogleToolboxForMac/Logger (2.2.0): - - GoogleToolboxForMac/Defines (= 2.2.0) - - "GoogleToolboxForMac/NSData+zlib (2.2.0)": - - GoogleToolboxForMac/Defines (= 2.2.0) + - GoogleToolboxForMac/Defines (2.2.1) + - GoogleToolboxForMac/Logger (2.2.1): + - GoogleToolboxForMac/Defines (= 2.2.1) + - "GoogleToolboxForMac/NSData+zlib (2.2.1)": + - GoogleToolboxForMac/Defines (= 2.2.1) - libwebp (1.0.2): - libwebp/core (= 1.0.2) - libwebp/dec (= 1.0.2) @@ -69,7 +69,7 @@ PODS: - nanopb/encode (= 0.3.901) - nanopb/decode (0.3.901) - nanopb/encode (0.3.901) - - Protobuf (3.7.0) + - Protobuf (3.9.0) - React (0.59.9): - React/Core (= 0.59.9) - react-native-blur (0.8.0): @@ -149,7 +149,7 @@ PODS: - React - RNCMaskedView (0.1.1): - React - - RNDeviceInfo (2.3.0): + - RNDeviceInfo (2.3.1): - React - RNIOS11DeviceCheck (0.0.3): - React @@ -161,9 +161,9 @@ PODS: - React - RNStoreReview (0.1.5): - React - - SDWebImage (5.0.2): - - SDWebImage/Core (= 5.0.2) - - SDWebImage/Core (5.0.2) + - SDWebImage (5.0.6): + - SDWebImage/Core (= 5.0.6) + - SDWebImage/Core (5.0.6) - yoga (0.59.9.React) DEPENDENCIES: @@ -279,18 +279,18 @@ SPEC CHECKSUMS: Crashlytics: 55e24fc23989680285a21cb1146578d9d18e432c DoubleConversion: bb338842f62ab1d708ceb63ec3d999f0f3d98ecd Fabric: 25d0963b691fc97be566392243ff0ecef5a68338 - Firebase: 76ec2a7cde90fb4037793f83aeeca48451543487 - FirebaseAnalytics: b8bce8d5c40173328b8a4300da18c5c7e0a1908d - FirebaseCore: 31d258ec80ea97e1e8e40ce00a7ba7297afb45c2 - FirebaseInstanceID: 4f7768a98c5c3c5bd9a4c9e431ea98dccc0a51f9 - FirebaseMessaging: 94579ae655d817287f029ebfebd5b0811fbb3a51 + Firebase: 68afeeb05461db02d7c9e3215cda28068670f4aa + FirebaseAnalytics: b3628aea54c50464c32c393fb2ea032566e7ecc2 + FirebaseCore: 62f1b792a49bb9e8b4073f24606d2c93ffc352f0 + FirebaseInstanceID: f3f0657372592ecdfdfe2cac604a5a75758376a6 + FirebaseMessaging: 6894b8fe0a0cf26c3b13dad729f1131654ae0bdb FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31 Folly: de497beb10f102453a1afa9edbf8cf8a251890de glog: aefd1eb5dda2ab95ba0938556f34b98e2da3a60d - GoogleToolboxForMac: ff31605b7d66400dcec09bed5861689aebadda4d + GoogleToolboxForMac: b3553629623a3b1bff17f555e736cd5a6d95ad55 libwebp: b068a3bd7c45f7460f6715be7bed1a18fd5d6b48 nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48 - Protobuf: 7a877b7f3e5964e3fce995e2eb323dbc6831bb5a + Protobuf: 1097ca58584c8d9be81bfbf2c5ff5975648dd87a React: a86b92f00edbe1873a63e4a212c29b7a7ad5224f react-native-blur: cad4d93b364f91e7b7931b3fa935455487e5c33c react-native-camera: f1fbfc336ba8ca6de5296190341d1b6022c71cff @@ -300,13 +300,13 @@ SPEC CHECKSUMS: RNAnalytics: d110195618296fed3907830911f01cb6e9be53d0 RNCAsyncStorage: 9436928b444c5f5361960a7eea051a697c244b68 RNCMaskedView: b79e193409a90bf6b5170d421684f437ff4e2278 - RNDeviceInfo: 65106cc87ad6f6f71ef2ecc667f4c59b840888e2 + RNDeviceInfo: 74ee98a0b3ef57604ea9953f03eca549a9335160 RNIOS11DeviceCheck: a4a545fdd08230a17a8ce7608e95038ee23a32aa RNLanguages: 962e562af0d34ab1958d89bcfdb64fafc37c513e RNReanimated: 7a52c90473b5e81c13408d40d797b98387eaddde RNScreens: f28b48b8345f2f5f39ed6195518291515032a788 RNStoreReview: 62d6afd7c37db711a594bbffca6b0ea3a812b7a8 - SDWebImage: 6764b5fa0f73c203728052955dbefa2bf1f33282 + SDWebImage: 920f1a2ff1ca8296ad34f6e0510a1ef1d70ac965 yoga: 03ff42a6f223fb88deeaed60249020d80c3091ee PODFILE CHECKSUM: 9a1477d30332ab86b10fd2ec7e7842ad52b5382e diff --git a/package.json b/package.json index 0bec8ec0193..7cd3644a50d 100644 --- a/package.json +++ b/package.json @@ -236,4 +236,4 @@ "vm": "vm-browserify", "tls": false } -} +} \ No newline at end of file diff --git a/patches/recyclerlistview+2.0.1-alpha.1.patch b/patches/recyclerlistview+2.0.1-alpha.1.patch index d648f64f476..afda92693bc 100644 --- a/patches/recyclerlistview+2.0.1-alpha.1.patch +++ b/patches/recyclerlistview+2.0.1-alpha.1.patch @@ -13,6 +13,42 @@ index 26e19af..e2a2913 100644 }; ViewabilityTracker.prototype.forceRefreshWithOffset = function (offset) { this._currentOffset = -1; +diff --git a/node_modules/recyclerlistview/dist/reactnative/core/StickyContainer.js b/node_modules/recyclerlistview/dist/reactnative/core/StickyContainer.js +index e3af431..8de1ec4 100644 +--- a/node_modules/recyclerlistview/dist/reactnative/core/StickyContainer.js ++++ b/node_modules/recyclerlistview/dist/reactnative/core/StickyContainer.js +@@ -54,14 +54,14 @@ var StickyContainer = /** @class */ (function (_super) { + } + }; + _this._getStickyHeaderRef = function (stickyHeaderRef) { +- if (!_this._stickyHeaderRef) { ++ if (_this._stickyHeaderRef !== stickyHeaderRef) { + _this._stickyHeaderRef = stickyHeaderRef; + // TODO: Resetting state once ref is initialized. Can look for better solution. + _this._callStickyObjectsOnVisibleIndicesChanged(_this._visibleIndicesAll); + } + }; + _this._getStickyFooterRef = function (stickyFooterRef) { +- if (!_this._stickyFooterRef) { ++ if (_this._stickyFooterRef !== stickyFooterRef) { + _this._stickyFooterRef = stickyFooterRef; + // TODO: Resetting state once ref is initialized. Can look for better solution. + _this._callStickyObjectsOnVisibleIndicesChanged(_this._visibleIndicesAll); +diff --git a/node_modules/recyclerlistview/dist/reactnative/core/layoutmanager/LayoutManager.js b/node_modules/recyclerlistview/dist/reactnative/core/layoutmanager/LayoutManager.js +index 3851852..23075a0 100644 +--- a/node_modules/recyclerlistview/dist/reactnative/core/layoutmanager/LayoutManager.js ++++ b/node_modules/recyclerlistview/dist/reactnative/core/layoutmanager/LayoutManager.js +@@ -172,6 +172,10 @@ var WrapGridLayoutManager = /** @class */ (function (_super) { + } + var i = startIndex - 1; + for (; i >= 0; i--) { ++ if (!this._layouts[i]) { ++ console.warn("WrapGridLayoutManager layout at index", i, "does not exist"); //tslint:disable-line ++ continue; ++ } + if (this._isHorizontal) { + if (this._layouts[i].y === 0) { + break; diff --git a/node_modules/recyclerlistview/dist/reactnative/core/sticky/StickyHeader.js b/node_modules/recyclerlistview/dist/reactnative/core/sticky/StickyHeader.js index 7074f36..5e72f6e 100644 --- a/node_modules/recyclerlistview/dist/reactnative/core/sticky/StickyHeader.js diff --git a/src/components/asset-list/AssetList.js b/src/components/asset-list/AssetList.js index 6d3f72e3cb2..a2f1f3a22aa 100644 --- a/src/components/asset-list/AssetList.js +++ b/src/components/asset-list/AssetList.js @@ -1,6 +1,7 @@ import PropTypes from 'prop-types'; import React from 'react'; -import { onlyUpdateForKeys } from 'recompact'; +import { compose, onlyUpdateForKeys } from 'recompact'; +import { withIsWalletImporting } from '../../hoc'; import { safeAreaInsetValues } from '../../utils'; import { FabWrapper, FloatingActionButton } from '../fab'; import { ListFooter } from '../list'; @@ -14,21 +15,26 @@ const AssetList = ({ fetchData, hideHeader, isEmpty, - sections, + isImporting, + isWalletEthZero, scrollViewTracker, + sections, ...props }) => ( - isEmpty - ? - : ( - + ) : ( + ) ); @@ -37,13 +43,18 @@ AssetList.propTypes = { fetchData: PropTypes.func.isRequired, hideHeader: PropTypes.bool, isEmpty: PropTypes.bool, + isImporting: PropTypes.bool, isWalletEthZero: PropTypes.bool, scrollViewTracker: PropTypes.object, sections: PropTypes.arrayOf(PropTypes.object), }; -export default onlyUpdateForKeys([ - 'isEmpty', - 'isWalletEthZero', - 'sections', -])(AssetList); +export default compose( + withIsWalletImporting, + onlyUpdateForKeys([ + 'isEmpty', + 'isImporting', + 'isWalletEthZero', + 'sections', + ]), +)(AssetList); diff --git a/src/components/asset-list/EmptyAssetList.js b/src/components/asset-list/EmptyAssetList.js index 4939c91093b..0c10cf0138e 100644 --- a/src/components/asset-list/EmptyAssetList.js +++ b/src/components/asset-list/EmptyAssetList.js @@ -1,5 +1,6 @@ import lang from 'i18n-js'; import { times } from 'lodash'; +import PropTypes from 'prop-types'; import React from 'react'; import { withNeverRerender } from '../../hoc'; import { position } from '../../styles'; @@ -32,4 +33,8 @@ const EmptyAssetList = ({ isWalletEthZero, ...props }) => ( ); +EmptyAssetList.propTypes = { + isWalletEthZero: PropTypes.bool, +}; + export default withNeverRerender(EmptyAssetList); diff --git a/src/components/asset-list/RecyclerAssetList.js b/src/components/asset-list/RecyclerAssetList.js index 4ffea173bb8..85ee7be7ae9 100644 --- a/src/components/asset-list/RecyclerAssetList.js +++ b/src/components/asset-list/RecyclerAssetList.js @@ -394,14 +394,14 @@ class RecyclerAssetList extends Component { rowRenderer = (type, data, index) => { if (isNil(data) || isNil(index)) { - return null; + return NOOP; } const { item = {}, renderItem } = data; const { hideHeader, sections } = this.props; if (type === ViewTypes.HEADER) { - return hideHeader ? null : ; + return hideHeader ? NOOP : ; } const isNotUniqueToken = ( diff --git a/src/components/list/SectionList.js b/src/components/list/SectionList.js deleted file mode 100644 index 138fdc06a58..00000000000 --- a/src/components/list/SectionList.js +++ /dev/null @@ -1,101 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { PureComponent } from 'react'; -import { RefreshControl, SectionList as ReactSectionList } from 'react-native'; -import { View } from 'react-primitives'; -import styled from 'styled-components/primitives'; -import { withSafeAreaViewInsetValues } from '../../hoc'; -import { colors, position } from '../../styles'; -import ListFooter from './ListFooter'; -import ListHeader from './ListHeader'; - -const DefaultRenderItem = renderItemProps => ; - -const List = styled(ReactSectionList)` - ${position.size('100%')} - background-color: ${colors.white}; -`; - -class SectionList extends PureComponent { - static propTypes = { - enablePullToRefresh: PropTypes.bool, - fetchData: PropTypes.func, - hideHeader: PropTypes.bool, - isRefreshing: PropTypes.bool, - onRefresh: PropTypes.func, - renderItem: PropTypes.func, - renderSectionFooter: PropTypes.func, - safeAreaInset: PropTypes.object, - showSafeAreaInsetBottom: PropTypes.bool, - } - - static defaultProps = { - enablePullToRefresh: false, - renderItem: DefaultRenderItem, - renderSectionFooter: ListFooter, - showSafeAreaInsetBottom: true, - } - - state = { isRefreshing: false } - - componentDidMount = () => { - this.isCancelled = false; - } - - componentWillUnmount = () => { - this.isCancelled = true; - } - - listRef = null - - handleListRef = (ref) => { this.listRef = ref; } - - handleRefresh = () => { - if (this.state.isRefreshing) return; - - this.setState({ isRefreshing: true }); - this.props.fetchData().then(() => { - if (!this.isCancelled) { - this.setState({ isRefreshing: false }); - } - }); - } - - renderRefreshControl = () => { - if (!this.props.enablePullToRefresh) return null; - - return ( - - ); - } - - render = () => { - const { - hideHeader, - renderItem, - renderSectionFooter, - safeAreaInset, - showSafeAreaInsetBottom, - ...props - } = this.props; - - return ( - - ); - } -} - -export default withSafeAreaViewInsetValues(SectionList); diff --git a/src/components/list/index.js b/src/components/list/index.js index 92f3e7a8c1b..ad6a5eeba32 100644 --- a/src/components/list/index.js +++ b/src/components/list/index.js @@ -4,4 +4,3 @@ export { default as ListHeader } from './ListHeader'; export { default as ListItem } from './ListItem'; export { default as ListItemArrowGroup } from './ListItemArrowGroup'; export { default as ListItemDivider } from './ListItemDivider'; -export { default as SectionList } from './SectionList'; diff --git a/src/hoc/index.js b/src/hoc/index.js index 75a125c5b22..897406e5151 100644 --- a/src/hoc/index.js +++ b/src/hoc/index.js @@ -12,6 +12,7 @@ export { default as withHideSplashScreen } from './withHideSplashScreen'; export { default as withImageDimensionsCache } from './withImageDimensionsCache'; export { default as withIsWalletEmpty } from './withIsWalletEmpty'; export { default as withIsWalletEthZero } from './withIsWalletEthZero'; +export { default as withIsWalletImporting } from './withIsWalletImporting'; export { default as withMessageSigningScreen } from './withMessageSigningScreen'; export { default as withNetInfo } from './withNetInfo'; export { default as withNeverRerender } from './withNeverRerender'; diff --git a/src/hoc/withDataInit.js b/src/hoc/withDataInit.js index 1c32bfa3283..54672c92d0a 100644 --- a/src/hoc/withDataInit.js +++ b/src/hoc/withDataInit.js @@ -39,6 +39,13 @@ import { } from '../redux/walletconnect'; import withHideSplashScreen from './withHideSplashScreen'; +const PromiseAllWithFails = async (promises) => ( + Promise.all(promises.map(promise => ( + (promise && promise.catch) + ? promise.catch(error => error) + : promise + )))); + export default Component => compose( connect(null, { clearIsWalletEmpty, @@ -80,8 +87,7 @@ export default Component => compose( const p6 = ownProps.nonceClearState(); const p7 = ownProps.requestsClearState(); const p8 = ownProps.uniswapClearState(); - const promises = [p1, p2, p3, p4, p5, p6, p7, p8]; - await Promise.all(promises.map(p => p.catch(e => e))); + return PromiseAllWithFails([p1, p2, p3, p4, p5, p6, p7, p8]); }, initializeAccountData: (ownProps) => async () => { try { @@ -98,8 +104,7 @@ export default Component => compose( const p4 = ownProps.walletConnectLoadState(); const p5 = ownProps.uniswapLoadState(); const p6 = ownProps.requestsLoadState(); - const promises = [p1, p2, p3, p4, p5, p6]; - await Promise.all(promises.map(p => p.catch(e => e))); + return PromiseAllWithFails([p1, p2, p3, p4, p5, p6]); }, refreshAccountData: (ownProps) => async () => { try { diff --git a/src/hoc/withIsWalletImporting.js b/src/hoc/withIsWalletImporting.js new file mode 100644 index 00000000000..1f689a15af6 --- /dev/null +++ b/src/hoc/withIsWalletImporting.js @@ -0,0 +1,6 @@ +import { connect } from 'react-redux'; +import { setIsWalletImporting } from '../redux/isWalletImporting'; + +const mapStateToProps = ({ isWalletImporting }) => isWalletImporting; + +export default Component => connect(mapStateToProps, { setIsWalletImporting })(Component); diff --git a/src/redux/isWalletImporting.js b/src/redux/isWalletImporting.js new file mode 100644 index 00000000000..a7719114db1 --- /dev/null +++ b/src/redux/isWalletImporting.js @@ -0,0 +1,22 @@ +import produce from 'immer'; + +// -- Constants --------------------------------------- // +const SET_IS_WALLET_IMPORTING = 'isWalletImporting/SET_IS_WALLET_IMPORTING'; + +export const setIsWalletImporting = payload => dispatch => ( + dispatch({ + payload, + type: SET_IS_WALLET_IMPORTING, + }) +); + +// -- Reducer ----------------------------------------- // +const INITIAL_STATE = { isImporting: false }; + +export default (state = INITIAL_STATE, action) => ( + produce(state, draft => { + if (action.type === SET_IS_WALLET_IMPORTING) { + draft.isImporting = action.payload; + } + }) +); diff --git a/src/redux/reducers.js b/src/redux/reducers.js index a3cc41f903c..3d481529cb6 100644 --- a/src/redux/reducers.js +++ b/src/redux/reducers.js @@ -5,6 +5,7 @@ import data from './data'; import imageDimensionsCache from './imageDimensionsCache'; import isWalletEmpty from './isWalletEmpty'; import isWalletEthZero from './isWalletEthZero'; +import isWalletImporting from './isWalletImporting'; import navigation from './navigation'; import nonce from './nonce'; import openFamilyTabs from './openFamilyTabs'; @@ -22,6 +23,7 @@ export default combineReducers({ imageDimensionsCache, isWalletEmpty, isWalletEthZero, + isWalletImporting, navigation, nonce, openFamilyTabs, diff --git a/src/screens/ImportSeedPhraseSheetWithData.js b/src/screens/ImportSeedPhraseSheetWithData.js index 1ac632d2fc6..0018dee9a2d 100644 --- a/src/screens/ImportSeedPhraseSheetWithData.js +++ b/src/screens/ImportSeedPhraseSheetWithData.js @@ -11,7 +11,7 @@ import { withState, } from 'recompact'; import { Alert } from '../components/alerts'; -import { withDataInit, withIsWalletEmpty } from '../hoc'; +import { withDataInit, withIsWalletEmpty, withIsWalletImporting } from '../hoc'; import { deviceUtils } from '../utils'; import ImportSeedPhraseSheet from './ImportSeedPhraseSheet'; import { isValidSeed as validateSeed } from '../helpers/validators'; @@ -35,9 +35,9 @@ const ConfirmImportAlert = onSuccess => ( const ImportSeedPhraseSheetWithData = compose( withDataInit, withIsWalletEmpty, + withIsWalletImporting, withNavigation, withState('clipboardContents', 'setClipboardContents', ''), - withState('isImporting', 'setIsImporting', false), withState('seedPhrase', 'setSeedPhrase', ''), withHandlers({ importSeedPhrase: ({ @@ -45,7 +45,7 @@ const ImportSeedPhraseSheetWithData = compose( isEmpty, navigation, seedPhrase, - setIsImporting, + setIsWalletImporting, }) => async () => { try { const address = await initializeWallet(seedPhrase.trim()); @@ -53,20 +53,20 @@ const ImportSeedPhraseSheetWithData = compose( analytics.track('Imported seed phrase', { hadPreviousAddressWithValue: isEmpty, }); - setIsImporting(false); + setIsWalletImporting(false); navigation.navigate('WalletScreen'); } else { - setIsImporting(false); + setIsWalletImporting(false); } } catch (error) { - setIsImporting(false); + setIsWalletImporting(false); console.error('error importing seed phrase: ', error); } }, }), withHandlers({ getClipboardContents: ({ setClipboardContents }) => async () => Clipboard.getString().then(setClipboardContents), - onImportSeedPhrase: ({ setIsImporting }) => () => ConfirmImportAlert(() => setIsImporting(true)), + onImportSeedPhrase: ({ setIsWalletImporting }) => () => ConfirmImportAlert(() => setIsWalletImporting(true)), onInputChange: ({ isImporting, setSeedPhrase }) => ({ nativeEvent }) => { if (!isImporting) { setSeedPhrase(nativeEvent.text); diff --git a/yarn.lock b/yarn.lock index 66e9565b42f..6099e48497c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -826,9 +826,9 @@ js-sha3 "0.5.7" "@ethersproject/properties@>5.0.0-beta.0": - version "5.0.0-beta.127" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.0-beta.127.tgz#ec2032675e909fa1d2e6adae09502271b2a702c6" - integrity sha512-zD14d+byTbdDRDPzHGkSW30bBtpFWaQpgzHh3ia6huJfr3qK8rVqGiDSYeNGJQdtdscss2l/F9yFuLd6ZdITPQ== + version "5.0.0-beta.128" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.0-beta.128.tgz#26e8a4cb95f0d048531f0a8da39773b16b4633b4" + integrity sha512-4ABgX2WmpQLlmbyR6EwxoT5YTRYxV6fGRtK+1nt48dvG2Y8FSkg33JvCfei3w432RjEEHEN5IOmTf+nTr9n6VA== dependencies: "@ethersproject/errors" ">5.0.0-beta.0" @@ -840,9 +840,9 @@ "@ethersproject/bytes" ">5.0.0-beta.0" "@ethersproject/strings@^5.0.0-beta.125": - version "5.0.0-beta.126" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.0-beta.126.tgz#5dc4452611d79bdaac46836fd9be5cc3f6ee4abf" - integrity sha512-DDIp4iY9tlnfdri1ObXFt65L0v4niQk1bZZnk9ItMokdjWfoEYVN/ym45FZPFepJWliY4HQQhv/LvPsO3iCJoA== + version "5.0.0-beta.127" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.0-beta.127.tgz#e07848b92cb1b615a11d7289449312c069a234e9" + integrity sha512-FKQDBKgcX7Bc0J45TIwwT4PTnE1TvtDRka3dAkH1VX4odnj6DzpZ99QdkhX4mBL2J+6/XK+trA7m/HTDx+5YqA== dependencies: "@ethersproject/bytes" ">5.0.0-beta.0" "@ethersproject/constants" ">5.0.0-beta.0" @@ -2648,9 +2648,9 @@ camelize@^1.0.0: integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= caniuse-lite@^1.0.30000980, caniuse-lite@^1.0.30000984: - version "1.0.30000985" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000985.tgz#0eb40f6c8a8c219155cbe43c4975c0efb4a0f77f" - integrity sha512-1ngiwkgqAYPG0JSSUp3PUDGPKKY59EK7NrGGX+VOxaKCNzRbNc7uXMny+c3VJfZxtoK3wSImTvG9T9sXiTw2+w== + version "1.0.30000987" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000987.tgz#bc6b47217afd8226a2b1964635c6bff62cdf5738" + integrity sha512-O3VrjtRMTxoU5Cn5/QSmXeIR1gkVps4j9jqfIm4FLaQ5JzqBlVjMUG1xWnoYFv8N+H3Lp++aa05TekyIbjHL7g== capture-exit@^1.2.0: version "1.2.0" @@ -3653,9 +3653,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.191: - version "1.3.200" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.200.tgz#78fb858b466269e8eb46d31a52562f00c865127f" - integrity sha512-PUurrpyDA74MuAjJRD+79ss5BqJlU3mdArRbuu4wO/dt6jc3Ic/6BDmFJxkdwbfq39cHf/XKm2vW98XSvut9Dg== + version "1.3.204" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.204.tgz#1ea5c6d495bab77995aa135dbcbc1d383dd4e21e" + integrity sha512-T0eXE6hfbtpzRUaI7aHI/HYJ29Ndk84aVSborRAmXfWvBvz2EuB2OWYUxNcUX9d+jtqEIjgZjWMdoxS0hp5j1g== elliptic@6.3.3: version "6.3.3" @@ -5180,9 +5180,9 @@ i18n-js@^3.0.11: integrity sha512-+m8jh84IIWlFwEJgwrWCkeIwIES9ilJKBOj5qx8ZTLLmlPz7bjKnCdxf254wRf6M4pkQHtgXGT9r9lGk0e9aug== i18next@^17.0.3: - version "17.0.6" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-17.0.6.tgz#01079cc2bcef408139ea8ce24d18ac0d512fbe85" - integrity sha512-bdNhzhcM6RG5m82RypVguCrAQNie/ycxW0Q5C6K9UDWD5hqApZfdJFbj4Ikz9jxIR+Ja1eg0yCQLhlCT+opwIg== + version "17.0.7" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-17.0.7.tgz#aae8591634b109c0ecec755b46c6414b0d743e07" + integrity sha512-fQn+gcyDaHb3qXIeahjCnGMsCeHaKveSORclang55stBjOL13oK7ZYxXVz1AaFV6p3SzOSu/KW+tgZcUuDdf6Q== dependencies: "@babel/runtime" "^7.3.1" @@ -8622,9 +8622,9 @@ postcss-html@^0.36.0: htmlparser2 "^3.10.0" postcss-jsx@^0.36.1: - version "0.36.2" - resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.2.tgz#34bcd6752426a60b8df73f069e7595383060a794" - integrity sha512-7B8a8a6YDOQFqMQ9UmOo+IPPb2i14Z57Fvc9cOI11B3bWMSY2O6r2XJ3tlcQhUhv93TeN0ntxehTaSWJDQavlg== + version "0.36.3" + resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.3.tgz#c91113eae2935a1c94f00353b788ece9acae3f46" + integrity sha512-yV8Ndo6KzU8eho5mCn7LoLUGPkXrRXRjhMpX4AaYJ9wLJPv099xbtpbRQ8FrPnzVxb/cuMebbPR7LweSt+hTfA== dependencies: "@babel/core" ">=7.2.2" @@ -8936,9 +8936,9 @@ qs@~6.5.2: integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== query-string@^6.4.2: - version "6.8.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.8.1.tgz#62c54a7ef37d01b538c8fd56f95740c81d438a26" - integrity sha512-g6y0Lbq10a5pPQpjlFuojfMfV1Pd2Jw9h75ypiYPPia3Gcq2rgkKiIwbkS6JxH7c5f5u/B/sB+d13PU+g1eu4Q== + version "6.8.2" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.8.2.tgz#36cb7e452ae11a4b5e9efee83375e0954407b2f6" + integrity sha512-J3Qi8XZJXh93t2FiKyd/7Ec6GNifsjKXUsVFkSBj/kjLsDylWhnCz4NT1bkPcKotttPW+QbKGqqPH8OoI2pdqw== dependencies: decode-uri-component "^0.2.0" split-on-first "^1.0.0" @@ -9095,9 +9095,9 @@ react-native-crypto@^2.1.2: public-encrypt "^4.0.0" react-native-device-info@^2.1.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/react-native-device-info/-/react-native-device-info-2.3.0.tgz#7b2a8baf8453324bd8d120ce46e5e2bb0181ccd4" - integrity sha512-ISEChH2zg4bRX8PL1cYoNWffJ7wmgYosKyJbkWyTxs8g+rpeGkmMf9Wo4COriAt1AJ2jC78IGhJYFzbIc+Przw== + version "2.3.1" + resolved "https://registry.yarnpkg.com/react-native-device-info/-/react-native-device-info-2.3.1.tgz#363267c4574dbd779290cdc06bb423f9c16d68d8" + integrity sha512-4kIBeBdYB/IwNjbSTEvfnWgFB4cXL0drvdXKfcAgfI5vxmsLElR5HI6t9fqVkPyMCiRtI7mvS6PbG2kjGdbQMw== react-native-dotenv@^0.2.0: version "0.2.0" @@ -10109,9 +10109,9 @@ sane@^4.0.3: walker "~1.0.5" sanitize-filename@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a" - integrity sha1-YS2hyWRz+gLczaktzVtKsWSmdyo= + version "1.6.2" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.2.tgz#01b4fc8809f14e9d22761fe70380fe7f3f902185" + integrity sha512-cmTzND7RMxUB+f7gI+4+KAVHWEg0lfXvQJdko+FXDP5bNbGIdx4KMP5pX6lv5jfT9jSf6OBbjyxjFtZQwYA/ig== dependencies: truncate-utf8-bytes "^1.0.0"