diff --git a/.env.review b/.env.review index 746182be2..5b8fabab1 100644 --- a/.env.review +++ b/.env.review @@ -1 +1,3 @@ ENV=review +CODEPUSH_KEY_ANDROID=SkyqwsFZDiT0ae_fRTqSE0TBPoAFBkM3IHh07 +CODEPUSH_KEY_IOS=WVafjCYZztL9aDlEwLSpiFCjzuGlMZ5oKCi1c diff --git a/App.tsx b/App.tsx index da5068e0c..c8b4e06bd 100644 --- a/App.tsx +++ b/App.tsx @@ -17,6 +17,7 @@ import { YellowBox, } from 'react-native'; import { Provider, observer } from 'mobx-react'; +import codePush from 'react-native-code-push'; import { SafeAreaProvider } from 'react-native-safe-area-context'; import { NavigationContainer } from '@react-navigation/native'; @@ -39,14 +40,15 @@ import ErrorBoundary from './src/common/components/ErrorBoundary'; import TosModal from './src/tos/TosModal'; import ThemedStyles from './src/styles/ThemedStyles'; import { StoresProvider } from './src/common/hooks/use-stores'; -import AppMessages from './AppMessages'; import i18n from './src/common/services/i18n.service'; import receiveShareService from './src/common/services/receive-share.service'; import AppInitManager from './AppInitManager'; import { WCContextProvider } from './src/blockchain/v2/walletconnect/WalletConnectContext'; import analyticsService from './src/common/services/analytics.service'; +import AppMessageProvider from 'AppMessageProvider'; import ExperimentsProvider from 'ExperimentsProvider'; +import { CODE_PUSH_KEY } from '~/config/Config'; YellowBox.ignoreWarnings(['']); @@ -100,12 +102,24 @@ class App extends Component { } RefreshControl.defaultProps.tintColor = ThemedStyles.getColor('IconActive'); RefreshControl.defaultProps.colors = [ThemedStyles.getColor('IconActive')]; + + // Check for codepush update and restart app immediately if necessary + codePush.sync( + CODE_PUSH_KEY + ? { + installMode: codePush.InstallMode.ON_NEXT_RESTART, // install updates on app restart + deploymentKey: CODE_PUSH_KEY, + } + : { + mandatoryInstallMode: codePush.InstallMode.IMMEDIATE, // install mandatory updates immediately + }, + ); } /** * On component did mount */ - async componentDidMount() { + componentDidMount() { // Register event listeners BackHandler.addEventListener('hardwareBackPress', this.onBackPress); Linking.addEventListener('url', this.handleOpenURL); @@ -185,21 +199,22 @@ class App extends Component { onStateChange={analyticsService.onNavigatorStateChange}> - - - - - - - - - - + + + + + + + + + + + diff --git a/AppInitManager.ts b/AppInitManager.ts index 488001afe..057c2e3ed 100644 --- a/AppInitManager.ts +++ b/AppInitManager.ts @@ -76,15 +76,23 @@ export default class AppInitManager { } } catch (err) { logService.exception('[App] Error initializing the app', err); - Alert.alert( - 'Error', - 'There was an error initializing the app.\n Do you want to copy the stack trace.', - [ - { text: 'Yes', onPress: () => Clipboard.setString(err.stack) }, - { text: 'No' }, - ], - { cancelable: false }, - ); + if (err instanceof Error) { + Alert.alert( + 'Error', + 'There was an error initializing the app.\n Do you want to copy the stack trace.', + [ + { + text: 'Yes', + onPress: () => { + if (err instanceof Error) + Clipboard.setString(err.stack || ''); + }, + }, + { text: 'No' }, + ], + { cancelable: false }, + ); + } } } }); diff --git a/AppMessageProvider.tsx b/AppMessageProvider.tsx new file mode 100644 index 000000000..14e272b45 --- /dev/null +++ b/AppMessageProvider.tsx @@ -0,0 +1,41 @@ +import React from 'react'; + +import { ThemeProvider } from 'styled-components'; +import { + ToastContext, + ToastProvider, +} from '@msantang78/react-native-styled-toast'; +import { registerToast } from 'AppMessages'; +import ThemedStyles from '~/styles/ThemedStyles'; + +export default function AppMessageProvider({ children }) { + const theme = React.useMemo(() => { + const bg = ThemedStyles.getColor('PrimaryBorder'); + + return { + space: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48], + colors: { + text: ThemedStyles.getColor('PrimaryText'), + background: bg, + border: bg, + muted: bg, + success: '#7DBE31', + error: '#FC0021', + info: '#00FFFF', + }, + }; + }, [ThemedStyles.theme]); + return ( + + + + {({ toast }) => { + registerToast(toast); + return <>; + }} + + {children} + + + ); +} diff --git a/AppMessages.tsx b/AppMessages.tsx index 855fc3899..a56afd588 100644 --- a/AppMessages.tsx +++ b/AppMessages.tsx @@ -1,150 +1,92 @@ -import React, { useCallback } from 'react'; -import FlashMessage, { showMessage } from 'react-native-flash-message'; -import { View, StyleSheet, Platform } from 'react-native'; - -import IconIon from 'react-native-vector-icons/Ionicons'; -import IconAnt from 'react-native-vector-icons/AntDesign'; -import IconMC from 'react-native-vector-icons/MaterialCommunityIcons'; -import type { MessageType, Icon } from 'react-native-flash-message'; import ThemedStyles from './src/styles/ThemedStyles'; +import { ToastConfig } from '@msantang78/react-native-styled-toast/dist/Toast'; + +let toast: undefined | ((config: ToastConfig) => void); + +export function registerToast(t) { + toast = t; +} + +type MessageType = 'success' | 'info' | 'warning' | 'danger'; + +function getIcon(type: MessageType): any { + switch (type) { + case 'success': + return { + iconColor: '#59A05E', + iconFamily: 'Ionicons', + iconName: 'md-checkmark', + }; + case 'warning': + return { + iconColor: '#D49538', + iconFamily: 'Ionicons', + iconName: 'ios-warning', + }; + case 'info': + return { + iconColor: '#5282A7', + iconFamily: 'EvilIcons', + iconName: 'exclamation', + }; + case 'danger': + return { + iconColor: '#CA4A34', + iconFamily: 'MaterialCommunityIcons', + iconName: 'alert-octagon', + }; + } + return {}; +} /** - * Show a notification message to the user + * Show a notification message to the user * @param message * @param type - * @param duration use 0 for permanent message + * @param duration + * @param subMessage + * @param shouldVibrate */ export const showNotification = ( message: string, type: MessageType = 'info', duration: number = 2800, - position: 'top' | 'bottom' | 'center' | undefined = 'bottom', + subMessage?: string, + shouldVibrate = false, + onPress?: () => void, ) => { - showMessage({ - floating: true, - position, - message, - icon: type, - duration, - backgroundColor: '#FFFFFF', - //@ts-ignore style parameter is not defined on the type - style: styles.container, - titleStyle: styles.title, - color: '#7D7D82', - type, - }); -}; + if (toast) { + toast({ + closeIconColor: ThemedStyles.getColor('SecondaryText'), + message, + onPress, + hideAccent: true, + shouldVibrate, + allowFontScaling: false, + // hideCloseIcon: true, + duration, + subMessage, + ...getIcon(type), + closeIconSize: 18, + messageProps: { + fontFamily: 'Roboto-Medium', + fontSize: 15, + }, + iconSize: 24, + toastStyles: { + borderRadius: 4, + }, + shadow: { + shadowColor: '#000000', + shadowOffset: { + width: 0, + height: 1, + }, + shadowOpacity: 0.5, + shadowRadius: 2, -/** - * Icon renderer - * @param icon - */ -const renderNotificationIcon = (icon: Icon = 'success') => { - const theme = ThemedStyles.style; - switch (icon) { - case 'success': - return ( - - - - ); - case 'info': - return ( - - - - ); - case 'warning': - return ( - - - - ); - case 'danger': - return ( - - - - ); + elevation: 4, + }, + }); } - return null; }; - -/** - * App messages component - */ -const AppMessages = () => { - const renderNotification = useCallback( - (message: any) => - message.renderCustomContent ? message.renderCustomContent() : null, - [], - ); - return ( - - ); -}; - -const styles = StyleSheet.create({ - info: { - height: '100%', - aspectRatio: 1, - justifyContent: 'center', - alignItems: 'center', - }, - success: { - height: '100%', - aspectRatio: 1, - justifyContent: 'center', - alignItems: 'center', - }, - danger: { - height: '100%', - aspectRatio: 1, - justifyContent: 'center', - alignItems: 'center', - }, - warning: { - height: '100%', - aspectRatio: 1, - justifyContent: 'center', - alignItems: 'center', - }, - title: { - fontSize: 17, - padding: 15, - paddingRight: 15, - marginRight: 55, - alignSelf: 'center', - flexWrap: 'wrap', - }, - container: { - shadowColor: 'black', - shadowOpacity: Platform.select({ ios: 0.2, android: 0.3 }), - shadowOffset: { width: 0, height: 5 }, - shadowRadius: 10, - elevation: 15, - alignItems: 'center', - minHeight: 70, - borderRadius: 0, - paddingHorizontal: 0, - paddingVertical: 0, - marginTop: 0, - marginLeft: 0, - marginRight: 0, - marginBottom: 0, - }, - messageHorizontalLine: { - marginLeft: -20, - marginRight: -20, - }, - messageVerticalLine: { - marginTop: -10, - marginBottom: -14, - }, -}); - -export default AppMessages; diff --git a/CHANGELOG.md b/CHANGELOG.md index 432ce25da..486e85f37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,82 @@ Minds Mobile +## 4.24.0 - 2022-05-19 + +### Changed + +- Regenerative Recommendations +- Latest posts prompt +- Friendly Captcha +- Channel contextual recommendations +- Save videos locally before uploading +- Video pause/resume functionality added to the composer +- Camera package updated +- Added android split-screen support +- Added CodePush support for faster updates +- Fix share videos to minds app (iOS) +- Fix the portrait feed showing scheduled posts +- Fix deep links and chat app detection on Android +- General bug fixing and improvements + +## 4.23.0 - 2022-04-04 + +### Changed + +- Fix hashtag navigation error +- Cleans up feature flag logic +- New toaster notifications +- Unverified email toaster added +- Improved transitions when opening multiple bottom sheets +- Fix Minds+ screen errors +- Fix some navigation issues with the interactions bottom sheets +- Fix onboarding tag selector visual an functional issues +- Fix posts visibility option when creating a post +- Fix groups posts visible on the main newsfeed +- Added custom API URL to dev tools +- Makes dev tools accessible on production mode by tapping multiple times hidden parts of the app +- Fix the auto login password reset flow is completed +- Fix group's search issues +- Adds a password show option to all the password fields of the app +- Standardize the user lists components +- Update the local storage package +- Fix the delete post error for admins when deleting a remind +- Improves the UX on feeds by loading next page before we reach the end +- Fix notification count issues +- Enable react-freeze, that improves the performance by freezing screens that are not visible +- Fix loading state indicators in comments +- Fix password confirmation when changing email +- Improved UX for onboarding channel setup +- Better rate limit message for the user when resetting the password +- Allow to verify email only once +- Fix trending analytics screen errors +- Remove full screen view for NSFW images when forbidden +- Improve validation/error messages on the change password screen + +## 4.22.3 - 2022-03-18 + +### Changed + +- Fix crash when translating post +- Fix issues switching users +- Fix some onboarding layout problems +- Fix symbols not allowed in username input + +## 4.22.2 - 2022-03-15 + +### Changed + +- Fix push notification not opening app on Android 12 +- Fix cache issues + +## 4.22.1 - 2022-03-11 + +### Changed + +- Fix a crash on some Android 12 devices when receiving a push notification +- Fix missing NSFW settings on Android +- Fix blurred NSFW images after open them + ## 4.22.0 - 2022-03-09 ### Changed diff --git a/ExperimentsProvider.tsx b/ExperimentsProvider.tsx index f7f8a5358..cbf99e5bf 100644 --- a/ExperimentsProvider.tsx +++ b/ExperimentsProvider.tsx @@ -23,6 +23,17 @@ export const growthbook = new GrowthBook({ }, }); +/** + * Return whether a feature has a given variation state. + * @param { string } featureKey - growthbook feature key. + * @param { string|number|boolean } variation - variation to check, e.g. 'on' or 'off'. + * @returns { boolean } - true if params reflect current variation. + */ +export function hasVariation(featureKey: string, variation: string = 'on') { + const featureResult = growthbook.feature(featureKey); + return featureResult[variation]; +} + /** * Update growthbook's attributes and features */ diff --git a/README.md b/README.md index cb17b6e6c..805df898e 100644 --- a/README.md +++ b/README.md @@ -14,13 +14,13 @@ Clone locale\ ## Branch Structure -| Branch | | -|-----------|------------------------------------------------------------------------------------------------------------------------------------| -| master | Approved code ready to merged into the next stable release. All tests should pass and be in a 'ready' state | -| stable/* | Stable builds, inherited from `release/*` branches. Fastlane automatically deploys these builds. | -| test/* | Release candidate builds, inherited from `release/*` branches. Fastlane automatically deploys these builds. | -| release/* | WIP builds. Run `fastlane run increment_version_number` upon creating the branch. | -| feat/* | New branches should be made for each Gitlab issue. Merge requests should be opened pointing towards the respective release branch. | +| Branch | | +| ---------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| master | Approved code ready to merged into the next stable release. All tests should pass and be in a 'ready' state | +| stable/\* | Stable builds, inherited from `release/*` branches. Fastlane automatically deploys these builds. | +| test/\* | Release candidate builds, inherited from `release/*` branches. Fastlane automatically deploys these builds. | +| release/\* | WIP builds. Run `fastlane run increment_version_number` upon creating the branch. | +| feat/\* | New branches should be made for each Gitlab issue. Merge requests should be opened pointing towards the respective release branch. | ## Increasing the version number @@ -57,11 +57,13 @@ Clone locale\ ## Testing e2e (macOS) Install the detox cli + - `brew tap wix/brew` - `brew install applesimutils` - `yarn global add detox-cli` Run the tests + - `detox build -c ios.sim.debug` - `detox test -c ios.sim.debug` @@ -79,21 +81,21 @@ You can use -c ios.sim.release for e2e test a production build #### Build -1) Build the app +1. Build the app `cd android && fastlane assemble_build && cd ..` -2) Push to s3 +2. Push to s3 `aws s3 cp android/app/build/outputs/apk/release/app-release.apk s3://minds-repo/android/Minds-stable-4-8-2.apk` -3) Update the releases.json +3. Update the releases.json `yarn release-json android/app/build/outputs/apk/release/app-release.apk` -4) Verify the release name is correct in ./releases.json +4. Verify the release name is correct in ./releases.json -6) Upload the releases.json changes +5. Upload the releases.json changes `aws s3 cp releases.json s3://minds-repo/android/releases/releases.json` @@ -109,5 +111,43 @@ Note: You have to update the change-log for the version! Upload the file to s3 and that is it. +## Running Webdriverio tests on BrowserStack: + +### Features: + +- Platform: iOS & Android +- Frontend Framework: WebdriverIO Node.js +- Frontend Testing Framework: Jasmine +- Reporter: Spec +- Integrations: BrowserStack Real Devices, CI (TBD) & Suite Setup (TBD) + +### Dependencies: + +#### _Pre-requisites_: Install latest version of Node and create environment variables. + +#### _Node_: https://nodejs.org/en/download/ + +#### _Environment variables for WebdriverIO Tests_: + +USERNAME & PASSWORD + +#### _Environment variables for BrowserStack Connection_: + +BROWSERSTACK_USERNAME, BROWSERSTACK_ACCESS_KEY, BROWSERSTACK_IOS_APP_ID & BROWSERSTACK_ANDROID_APP_ID + +### Run Command: + +#### Run this command within the project to install all package.json dependencies: + +``` +yarn +``` + +#### Run the command below to execute automation on BrowserStack iOS & Android real devices respectively: + +``` +yarn run test:real:ios +yarn run test:real:android +``` -### _Copyright Minds 2018_ +##### _Copyright Minds 2022_ diff --git a/__mocks__/AppMessageProvider.tsx b/__mocks__/AppMessageProvider.tsx new file mode 100644 index 000000000..c1a214db9 --- /dev/null +++ b/__mocks__/AppMessageProvider.tsx @@ -0,0 +1,3 @@ +export default function AppMessageProvider({ children }) { + return children; +} diff --git a/__mocks__/@unimodules/core.js b/__mocks__/expo-modules-core.js similarity index 88% rename from __mocks__/@unimodules/core.js rename to __mocks__/expo-modules-core.js index a7d0826ab..b7360cfc6 100644 --- a/__mocks__/@unimodules/core.js +++ b/__mocks__/expo-modules-core.js @@ -12,6 +12,8 @@ export const NativeModulesProxy = { }, }; +export const createPermissionHook = jest.fn(); + export const EventEmitter = require('eventemitter3'); export const Platform = require('react-native').Platform; diff --git a/__mocks__/react-native-mmkv-storage.js b/__mocks__/react-native-mmkv-storage.js new file mode 100644 index 000000000..bfc248e97 --- /dev/null +++ b/__mocks__/react-native-mmkv-storage.js @@ -0,0 +1,51 @@ +export default { + Loader: () => ({ + withInstanceID: () => ({ + setProcessingMode: jest.fn(), + withEncryption: jest.fn(), + initialize: () => ({ + setItem: jest.fn(), + getItem: jest.fn(), + setStringAsync: jest.fn(), + getStringAsync: jest.fn(), + setIntAsync: jest.fn(), + getIntAsync: jest.fn(), + setBoolAsync: jest.fn(), + getBoolAsync: jest.fn(), + + setMapAsync: jest.fn(), + + getMapAsync: jest.fn(), + + setArrayAsync: jest.fn(), + + getArrayAsync: jest.fn(), + + getMultipleItemsAsync: jest.fn(), + + clearStore: jest.fn(), + + clearMemoryCache: jest.fn(), + + removeItem: jest.fn(), + + setString: jest.fn(), + + getString: jest.fn(), + setInt: jest.fn(), + getInt: jest.fn(), + + setBool: jest.fn(), + getBool: jest.fn(), + setMap: jest.fn(), + getMap: jest.fn(), + setArray: jest.fn(), + getArray: jest.fn(), + getMultipleItems: jest.fn(), + getAllMMKVInstanceIDs: jest.fn(), + getCurrentMMKVInstanceIDs: jest.fn(), + getKey: jest.fn(), + }), + }), + }), +}; diff --git a/__mocks__/react-native-share-menu.js b/__mocks__/react-native-share-menu.js index adc942ea3..cb9813044 100644 --- a/__mocks__/react-native-share-menu.js +++ b/__mocks__/react-native-share-menu.js @@ -1,4 +1,5 @@ export default { - decrshareSingleypt: jest.fn(), - open: jest.fn() -}; \ No newline at end of file + rshareSingle: jest.fn(), + open: jest.fn(), + addNewShareListener: jest.fn(), +}; diff --git a/__tests__/App.js b/__tests__/App.js index 4d5a71ea7..4d42b11cc 100644 --- a/__tests__/App.js +++ b/__tests__/App.js @@ -5,12 +5,10 @@ import { BackHandler } from 'react-native'; // Note: test renderer must be required after react-native. import renderer from 'react-test-renderer'; import { getStores } from '../AppStores'; +import { View } from 'react-native'; jest.mock('react-native-orientation-locker', () => ({ lockToPortrait: jest.fn(), })); -jest.mock('react-native-reanimated', () => - require('react-native-reanimated/mock'), -); jest.mock('../src/blockchain/v2/walletconnect/modal/registry'); jest.mock( @@ -18,6 +16,29 @@ jest.mock( () => 'TransakWidget', ); +jest.mock('react-native-code-push', () => { + const cp = () => app => app; + Object.assign(cp, { + InstallMode: {}, + CheckFrequency: {}, + SyncStatus: {}, + UpdateState: {}, + DeploymentStatus: {}, + DEFAULT_UPDATE_DIALOG: {}, + + allowRestart: jest.fn(), + checkForUpdate: jest.fn(() => Promise.resolve(null)), + disallowRestart: jest.fn(), + getCurrentPackage: jest.fn(() => Promise.resolve(null)), + getUpdateMetadata: jest.fn(() => Promise.resolve(null)), + notifyAppReady: jest.fn(() => Promise.resolve()), + restartApp: jest.fn(), + sync: jest.fn(() => Promise.resolve(1)), + clearUpdates: jest.fn(), + }); + return cp; +}); + // mock backhandler BackHandler.addEventListener = jest.fn(); jest.mock('../src/common/services/log.service', () => {}); diff --git a/__tests__/activity/components/ActivityScreen.js b/__tests__/activity/components/ActivityScreen.js index 1fbb0ae8d..799f96603 100644 --- a/__tests__/activity/components/ActivityScreen.js +++ b/__tests__/activity/components/ActivityScreen.js @@ -71,9 +71,12 @@ describe('Activity screen component', () => { useRoute.mockReturnValue({ params: {} }); NavigationService.getCurrentState.mockReturnValue({ params: {} }); + const entity = activitiesServiceFaker().load(1).activities[0]; + entity.can = jest.fn(() => true); + const route = { routeName: 'some', - params: { entity: activitiesServiceFaker().load(1).activities[0] }, + params: { entity }, }; entitiesService.single.mockResolvedValue( diff --git a/__tests__/activity/components/__snapshots__/ActivityScreen.js.snap b/__tests__/activity/components/__snapshots__/ActivityScreen.js.snap index 67884c33c..3d0215413 100644 --- a/__tests__/activity/components/__snapshots__/ActivityScreen.js.snap +++ b/__tests__/activity/components/__snapshots__/ActivityScreen.js.snap @@ -887,12 +887,6 @@ exports[`Activity screen component renders correctly 1`] = ` "width": 20, }, Object {}, - Array [ - undefined, - Object { - "transform": Array [], - }, - ], ] } > @@ -991,12 +985,6 @@ exports[`Activity screen component renders correctly 1`] = ` "width": 20, }, Object {}, - Array [ - undefined, - Object { - "transform": Array [], - }, - ], ] } > @@ -1908,6 +1896,41 @@ exports[`Activity screen component renders correctly 1`] = ` "allow_comments": true, "attachment_guid": false, "blurb": false, + "can": [MockFunction] { + "calls": Array [ + Array [ + "view", + true, + ], + Array [ + "vote", + ], + Array [ + "vote", + ], + Array [ + "remind", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + ], + }, "comments:count": undefined, "containerObj": undefined, "container_guid": "activityguid0", @@ -2016,6 +2039,41 @@ exports[`Activity screen component renders correctly 1`] = ` "allow_comments": true, "attachment_guid": false, "blurb": false, + "can": [MockFunction] { + "calls": Array [ + Array [ + "view", + true, + ], + Array [ + "vote", + ], + Array [ + "vote", + ], + Array [ + "remind", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + ], + }, "comments:count": undefined, "containerObj": undefined, "container_guid": "activityguid0", @@ -2124,6 +2182,41 @@ exports[`Activity screen component renders correctly 1`] = ` "allow_comments": true, "attachment_guid": false, "blurb": false, + "can": [MockFunction] { + "calls": Array [ + Array [ + "view", + true, + ], + Array [ + "vote", + ], + Array [ + "vote", + ], + Array [ + "remind", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + ], + }, "comments:count": undefined, "containerObj": undefined, "container_guid": "activityguid0", @@ -2232,6 +2325,41 @@ exports[`Activity screen component renders correctly 1`] = ` "allow_comments": true, "attachment_guid": false, "blurb": false, + "can": [MockFunction] { + "calls": Array [ + Array [ + "view", + true, + ], + Array [ + "vote", + ], + Array [ + "vote", + ], + Array [ + "remind", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + ], + }, "comments:count": undefined, "containerObj": undefined, "container_guid": "activityguid0", @@ -2355,6 +2483,41 @@ exports[`Activity screen component renders correctly 1`] = ` "allow_comments": true, "attachment_guid": false, "blurb": false, + "can": [MockFunction] { + "calls": Array [ + Array [ + "view", + true, + ], + Array [ + "vote", + ], + Array [ + "vote", + ], + Array [ + "remind", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + Object { + "type": "return", + "value": true, + }, + ], + }, "comments:count": undefined, "containerObj": undefined, "container_guid": "activityguid0", diff --git a/__tests__/activity/components/actions/ThumbDownAction.js b/__tests__/activity/components/actions/ThumbDownAction.js index d745b98f4..25ca4a131 100644 --- a/__tests__/activity/components/actions/ThumbDownAction.js +++ b/__tests__/activity/components/actions/ThumbDownAction.js @@ -45,6 +45,7 @@ describe('Thumb action component', () => { }; entity.toggleVote = jest.fn(); + entity.can = jest.fn(() => true); screen = shallow( , diff --git a/__tests__/activity/components/actions/ThumbUpAction.js b/__tests__/activity/components/actions/ThumbUpAction.js index ec94ad853..6703e930f 100644 --- a/__tests__/activity/components/actions/ThumbUpAction.js +++ b/__tests__/activity/components/actions/ThumbUpAction.js @@ -23,6 +23,7 @@ describe('Thumb action component', () => { let activityResponse = activitiesServiceFaker().load(1); entity = ActivityModel.create(activityResponse.activities[0]); + entity.can = jest.fn(() => true); screen = shallow(); }); diff --git a/__tests__/auth/RegisterForm.js b/__tests__/auth/RegisterForm.js index aff16b1ff..91c7c6eff 100644 --- a/__tests__/auth/RegisterForm.js +++ b/__tests__/auth/RegisterForm.js @@ -41,7 +41,6 @@ describe('RegisterScreen component', () => { 'You should accept the terms and conditions', 'info', 3000, - 'top', ); }); @@ -62,10 +61,9 @@ describe('RegisterScreen component', () => { await fireEvent.press(button); expect(showNotification).toBeCalledWith( - 'Incorrect password. Please try again.', - 'warning', - 2000, - 'top', + 'Password must match the criteria', + 'info', + 2500, ); }); diff --git a/__tests__/auth/__snapshots__/LoginForm.js.snap b/__tests__/auth/__snapshots__/LoginForm.js.snap index fdeabdb48..5d5a6ab08 100644 --- a/__tests__/auth/__snapshots__/LoginForm.js.snap +++ b/__tests__/auth/__snapshots__/LoginForm.js.snap @@ -9,401 +9,479 @@ exports[`LoginForm component should renders correctly 1`] = ` } > - + - + + + Username + + + + - Username - + testID="usernameInput" + textContentType="username" + underlineColorAndroid="transparent" + value="" + /> - + + + - - - - - - + > - + + + + Password + + + + - Password - + ] + } + testID="userPasswordInput" + textContentType="password" + underlineColorAndroid="transparent" + value="" + /> + - + > +  + - -  - - - + + + + + + + /> - + + Login + - - - - Login - - - - - + + Forgot your password? + + + - Forgot your password? - - - - - - - Reset Password - - - + Reset Password + + + + - -  - + +  + + - - - - + + + Enter your channel name below to start the password recovery process. + + - Enter your channel name below to start the password recovery process. - - - - + - + + + Username + + + + - Username - + textContentType="username" + underlineColorAndroid="transparent" + value="" + /> - - - + + + + + + - + + Continue + - - - - Continue - - - - + + `; diff --git a/__tests__/auth/__snapshots__/LoginScreen.js.snap b/__tests__/auth/__snapshots__/LoginScreen.js.snap index 621211c3e..4f15905eb 100644 --- a/__tests__/auth/__snapshots__/LoginScreen.js.snap +++ b/__tests__/auth/__snapshots__/LoginScreen.js.snap @@ -76,6 +76,7 @@ exports[`LoginScreen component should renders correctly 1`] = ` Object { "alignItems": "center", "flexDirection": "row", + "justifyContent": "space-between", "paddingHorizontal": 16, }, Object { @@ -97,7 +98,9 @@ exports[`LoginScreen component should renders correctly 1`] = ` Array [ Object { "fontSize": 20, - "marginLeft": 28, + "marginLeft": 16, + "position": "absolute", + "width": "100%", }, Object { "paddingVertical": 12, @@ -119,88 +122,87 @@ exports[`LoginScreen component should renders correctly 1`] = ` > Login - + + - - -  - - +  + @@ -214,155 +216,18 @@ exports[`LoginScreen component should renders correctly 1`] = ` } > - - - - - Username - - - - - - - - - - + + + - Password - + ] + } + > + Username + + - - + + + + + + + + + + + + Password + + + + + + + + + > +  + - -  - - - + + + + + + + + + + + Login + + + + + - - - - - - - - - - Login - - - + Forgot your password? + - - - - Forgot your password? - - - - - - - Reset Password - - - + Reset Password + + + + - -  - + +  + + - - - - + + + Enter your channel name below to start the password recovery process. + + - Enter your channel name below to start the password recovery process. - - - - + - + + + Username + + + + - Username - + textContentType="username" + underlineColorAndroid="transparent" + value="" + /> - - - + + + + + + - + + Continue + - - - - Continue - - - - + + `; diff --git a/__tests__/blogs/BlogCard.js b/__tests__/blogs/BlogCard.js index 10e233c27..291193a93 100644 --- a/__tests__/blogs/BlogCard.js +++ b/__tests__/blogs/BlogCard.js @@ -3,7 +3,7 @@ import React from 'react'; import { Platform, Linking } from 'react-native'; import { shallow } from 'enzyme'; import BlogCard from '../../src/blogs/BlogCard'; -import blogFakeFactory from '../../__mocks__/fake/blogs/BlogFactory' +import blogFakeFactory from '../../__mocks__/fake/blogs/BlogFactory'; import BlogModel from '../../src/blogs/BlogModel'; // Note: test renderer must be required after react-native. import renderer from 'react-test-renderer'; @@ -17,28 +17,23 @@ jest.mock('../../src/newsfeed/activity/Actions', () => 'Actions'); * Tests */ describe('blog card component', () => { - it('should renders correctly', () => { - const blogEntity = BlogModel.create(blogFakeFactory(1)); - - const blog = renderer.create( - - ).toJSON(); + const blog = renderer.create().toJSON(); expect(blog).toMatchSnapshot(); }); - it('should nav to blog', async (done) => { - + it('should nav to blog', async done => { const blogEntity = BlogModel.create(blogFakeFactory(1)); + blogEntity.can = () => true; - const navigation = {push: jest.fn()}; + const navigation = { push: jest.fn() }; try { const wrapper = shallow( - + , ); Platform.OS = 'ios'; @@ -47,10 +42,10 @@ describe('blog card component', () => { wrapper.instance().navToBlog(); // expect fn to be called once - expect(navigation.push).toBeCalledWith('BlogView', {blog: blogEntity}); + expect(navigation.push).toBeCalledWith('BlogView', { blog: blogEntity }); done(); - } catch(e) { + } catch (e) { done.fail(e); } }); -}); \ No newline at end of file +}); diff --git a/__tests__/blogs/BlogsViewScreen.js b/__tests__/blogs/BlogsViewScreen.js index 164aab199..408c59fb4 100644 --- a/__tests__/blogs/BlogsViewScreen.js +++ b/__tests__/blogs/BlogsViewScreen.js @@ -47,7 +47,9 @@ describe('blog view screen component', () => { let store, user, route, - navigation = {}; + navigation = { + goBack: jest.fn(), + }; beforeEach(() => { NavigationService.getCurrentState.mockClear(); diff --git a/__tests__/blogs/__snapshots__/BlogsViewScreen.js.snap b/__tests__/blogs/__snapshots__/BlogsViewScreen.js.snap index 8078970ab..81aa6e1f7 100644 --- a/__tests__/blogs/__snapshots__/BlogsViewScreen.js.snap +++ b/__tests__/blogs/__snapshots__/BlogsViewScreen.js.snap @@ -69,29 +69,6 @@ exports[`blog view screen component should renders correctly 1`] = ` } /> - - + diff --git a/__tests__/common/BaseModel.js b/__tests__/common/BaseModel.js deleted file mode 100644 index a2c9f11a0..000000000 --- a/__tests__/common/BaseModel.js +++ /dev/null @@ -1,23 +0,0 @@ -import BaseModel from '../../src/common/BaseModel'; -import featuresService from '../../src/common/services/features.service'; - -describe('base model', () => { - beforeEach(() => {}); - - it('should set and validate permissions', () => { - featuresService.features = { permissions: true }; - - const data = { - permissions: ['permissions1', 'permissions2', 'permissions3'], - }; - - const model = new BaseModel({}); - model.setPermissions(data); - - // should validate permissions - expect(model.can('permissions1')).toBe(true); - expect(model.can('permissions2')).toBe(true); - expect(model.can('permissions3')).toBe(true); - expect(model.can('permissions4')).toBe(false); - }); -}); diff --git a/__tests__/common/services/api.service.js b/__tests__/common/services/api.service.js index d5b79ebac..5a93789ca 100644 --- a/__tests__/common/services/api.service.js +++ b/__tests__/common/services/api.service.js @@ -30,7 +30,6 @@ var mock = new MockAdapter(axios); const axiosInstance = axios.create(); // const axiosMock = new MockAdapter(axios); -ApiService.prototype.tryToRelog = jest.fn().mockImplementation(() => false); const api = new ApiService(null, axiosInstance); /** diff --git a/__tests__/common/services/image-picker.service.js b/__tests__/common/services/image-picker.service.js index c553b05e5..7b206bd61 100644 --- a/__tests__/common/services/image-picker.service.js +++ b/__tests__/common/services/image-picker.service.js @@ -1,10 +1,9 @@ -import { Platform, Alert } from 'react-native'; import ImagePicker from 'react-native-image-crop-picker'; import service from '../../../src/common/services/image-picker.service'; -import i18n from '../../../src/common/services/i18n.service'; import androidPermissions from '../../../src/common/services/permissions.service'; +jest.mock('../../../AppMessages', () => ({})); jest.mock('../../../src/common/services/permissions.service'); jest.mock('../../../src/common/services/i18n.service', () => ({ t: jest.fn(), diff --git a/__tests__/discovery/v2/trends/item-partials/__snapshots__/Partials.js.snap b/__tests__/discovery/v2/trends/item-partials/__snapshots__/Partials.js.snap index c17dfbda1..abd538013 100644 --- a/__tests__/discovery/v2/trends/item-partials/__snapshots__/Partials.js.snap +++ b/__tests__/discovery/v2/trends/item-partials/__snapshots__/Partials.js.snap @@ -77,29 +77,6 @@ exports[`Partials tests renders correctly HeroPartial 1`] = ` } /> - - `; diff --git a/__tests__/notifications/__snapshots__/NotificationsScreen.js.snap b/__tests__/notifications/__snapshots__/NotificationsScreen.js.snap index a5cda46b0..6376a5313 100644 --- a/__tests__/notifications/__snapshots__/NotificationsScreen.js.snap +++ b/__tests__/notifications/__snapshots__/NotificationsScreen.js.snap @@ -35,28 +35,12 @@ exports[`Notifications Screen Component renders correctly 1`] = ` "tabPress", [Function], ], - Array [ - "tabPress", - [Function], - ], - Array [ - "tabPress", - [Function], - ], ], "results": Array [ Object { "type": "return", "value": undefined, }, - Object { - "type": "return", - "value": undefined, - }, - Object { - "type": "return", - "value": undefined, - }, ], }, "navigate": [MockFunction], @@ -77,7 +61,7 @@ exports[`Notifications Screen Component renders correctly 1`] = ` "loadMailNotificationsSettings": [Function], "loadPushNotificationsSettings": [Function], "loadUnreadCount": [Function], - "loaded": true, + "loaded": false, "mailsNotificationsSettings": Array [], "markAsRead": [Function], "offset": "", @@ -88,7 +72,9 @@ exports[`Notifications Screen Component renders correctly 1`] = ` "setFilter": [Function], "setLoaded": [Function], "setOffset": [Function], + "setSilentRefresh": [Function], "setUnread": [Function], + "silentRefresh": false, "startPollCount": [Function], "stopPollCount": [Function], "unlisten": [Function], @@ -121,6 +107,7 @@ exports[`Notifications Screen Component renders correctly 1`] = ` refreshing={false} removeClippedSubviews={false} renderItem={[Function]} + scrollEnabled={true} scrollEventThrottle={50} stickyHeaderHiddenOnScroll={true} stickyHeaderIndices={ @@ -269,6 +256,8 @@ exports[`Notifications Screen Component renders correctly 1`] = ` onStartShouldSetResponder={[Function]} > + + + + - + diff --git a/android/app/src/main/java/com/minds/mobile/MainActivity.java b/android/app/src/main/java/com/minds/mobile/MainActivity.java index b11d563ee..aca345df3 100644 --- a/android/app/src/main/java/com/minds/mobile/MainActivity.java +++ b/android/app/src/main/java/com/minds/mobile/MainActivity.java @@ -1,5 +1,8 @@ package com.minds.mobile; +import expo.modules.ReactActivityDelegateWrapper; +import com.facebook.react.ReactActivityDelegate; + import android.os.Bundle; import com.zoontek.rnbootsplash.RNBootSplash; import com.facebook.react.ReactActivity; @@ -18,14 +21,6 @@ public class MainActivity extends ReactActivity { private PermissionListener listener; - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - Intent intent = new Intent("onConfigurationChanged"); - intent.putExtra("newConfig", newConfig); - this.sendBroadcast(intent); - } - /** * Returns the name of the main component registered from JavaScript. This is used to schedule * rendering of the component. @@ -40,14 +35,11 @@ public void invokeDefaultOnBackPressed() { moveTaskToBack(true); } - @Override + @Override protected ReactActivityDelegate createReactActivityDelegate() { - return new ReactActivityDelegate(this, getMainComponentName()) { - @Override - protected ReactRootView createRootView() { - return new RNGestureHandlerEnabledRootView(MainActivity.this); - } - }; + return new ReactActivityDelegateWrapper(this, + new ReactActivityDelegate(this, getMainComponentName()) + ); } @Override diff --git a/android/app/src/main/java/com/minds/mobile/MainApplication.java b/android/app/src/main/java/com/minds/mobile/MainApplication.java index 409ea0c00..f0c6a46e2 100644 --- a/android/app/src/main/java/com/minds/mobile/MainApplication.java +++ b/android/app/src/main/java/com/minds/mobile/MainApplication.java @@ -1,6 +1,8 @@ package com.minds.mobile; -import com.minds.mobile.generated.BasePackageList; +import android.content.res.Configuration; +import expo.modules.ApplicationLifecycleDispatcher; +import expo.modules.ReactNativeHostWrapper; import android.app.Application; @@ -21,10 +23,6 @@ import java.util.List; import java.util.Arrays; -import org.unimodules.adapters.react.ModuleRegistryAdapter; -import org.unimodules.adapters.react.ReactModuleRegistryProvider; -import org.unimodules.core.interfaces.SingletonModule; - import javax.annotation.Nullable; import java.lang.reflect.InvocationTargetException; import com.minds.mobile.CustomErrorScreen; @@ -35,12 +33,11 @@ import com.minds.mobile.CustomMMKVJSIModulePackage; import com.facebook.react.bridge.JSIModulePackage; import org.wonday.orientation.OrientationActivityLifecycle; +import com.microsoft.codepush.react.CodePush; public class MainApplication extends Application implements ShareApplication, ReactApplication { - private final ReactModuleRegistryProvider mModuleRegistryProvider = new ReactModuleRegistryProvider(new BasePackageList().getPackageList(), null); - private final ReactNativeHost mReactNativeHost = - new ReactNativeHost(this) { + new ReactNativeHostWrapper(this, new ReactNativeHost(this) { @Override public boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; @@ -57,24 +54,19 @@ protected List getPackages() { List packages = new PackageList(this).getPackages(); packages.add(new RNNotificationsPackage(this.getApplication())); - // Add unimodules - List unimodules = Arrays.asList( - new ModuleRegistryAdapter(mModuleRegistryProvider) - ); - packages.addAll(unimodules); return packages; } @Override - protected String getJSMainModuleName() { - return "index"; + public String getJSBundleFile() { + return CodePush.getJSBundleFile(); } @Override - protected @Nullable String getBundleAssetName() { - return "app.bundle"; + protected String getJSMainModuleName() { + return "index"; } - }; + }); @Override public ReactNativeHost getReactNativeHost() { @@ -88,6 +80,13 @@ public void onCreate() { initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); ReactNativeExceptionHandlerModule.replaceErrorScreenActivityClass(CustomErrorScreen.class); registerActivityLifecycleCallbacks(OrientationActivityLifecycle.getInstance()); + ApplicationLifecycleDispatcher.onApplicationCreate(this); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig); } /** diff --git a/android/app/src/main/java/com/minds/mobile/generated/BasePackageList.java b/android/app/src/main/java/com/minds/mobile/generated/BasePackageList.java deleted file mode 100644 index 89dc3d186..000000000 --- a/android/app/src/main/java/com/minds/mobile/generated/BasePackageList.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.minds.mobile.generated; - -import java.util.Arrays; -import java.util.List; -import org.unimodules.core.interfaces.Package; - -public class BasePackageList { - public List getPackageList() { - return Arrays.asList( - new expo.modules.application.ApplicationPackage(), - new expo.modules.av.AVPackage(), - new expo.modules.constants.ConstantsPackage(), - new expo.modules.errorrecovery.ErrorRecoveryPackage(), - new expo.modules.filesystem.FileSystemPackage(), - new expo.modules.font.FontLoaderPackage(), - new expo.modules.imageloader.ImageLoaderPackage(), - new expo.modules.imagemanipulator.ImageManipulatorPackage(), - new expo.modules.keepawake.KeepAwakePackage(), - new expo.modules.lineargradient.LinearGradientPackage() - ); - } -} diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 2f2e89872..a305399f0 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1,4 +1,5 @@ Minds 81109256529 + _C083_CqL7CmKwASrv6Xrj1wqH7erJMhIBnRQ diff --git a/android/build.gradle b/android/build.gradle index fa351d908..5cc19dbae 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -11,7 +11,7 @@ buildscript { supportLibVersion = "30.0.0" androidXCore = "1.5.0" glideVersion = "4.9.0" - kotlinVersion = '1.5.20' + kotlinVersion = '1.5.21' ndkVersion = "21.4.7075529" } @@ -22,8 +22,8 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:4.2.2' - classpath 'com.google.gms:google-services:4.3.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.0" + classpath 'com.google.gms:google-services:4.3.3' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } @@ -48,7 +48,7 @@ allprojects { url("$rootDir/../node_modules/jsc-android/dist") } google() - jcenter() + mavenCentral() maven { url "https://www.jitpack.io" } maven { url 'https://maven.google.com' } jcenter() diff --git a/android/gradle.properties b/android/gradle.properties index b1159bfe0..929820602 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -37,10 +37,10 @@ systemProp.org.gradle.internal.http.socketTimeout=180000 # Disable vision camera frame processors disableFrameProcessors=true -versionName=4.22.0 +versionName=4.24.0 # CUSTOM -versionCode=1050000133 +versionCode=1050000141 # PLAY STORE (Keep double hash for the CI) -## versionCode=310130 +## versionCode=310141 diff --git a/android/settings.gradle b/android/settings.gradle index 5b4f6441b..b47ccaa8d 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,5 +1,4 @@ rootProject.name = 'Minds' -apply from: '../node_modules/react-native-unimodules/gradle.groovy'; includeUnimodulesProjects() include ':react-native-vector-icons' project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') include ':@react-native-community_cameraroll' @@ -19,4 +18,8 @@ include ':reactnativenotifications' project(':reactnativenotifications').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notifications/android/app') apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) -include ':app' +include ':app', ':react-native-code-push' +project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app') + +apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle") +useExpoModules(); diff --git a/e2e/test/conf/wdio.android.conf.js b/e2e/test/conf/wdio.android.conf.js new file mode 100644 index 000000000..271fea77f --- /dev/null +++ b/e2e/test/conf/wdio.android.conf.js @@ -0,0 +1,70 @@ +require('dotenv').config(); +var browserstack = require('browserstack-local'); + +exports.config = { + user: process.env.BROWSERSTACK_USERNAME, + key: process.env.BROWSERSTACK_ACCESS_KEY, + + updateJob: false, + specs: ['./e2e/test/specs/login.spec.js'], + exclude: [], + services: ['browserstack'], + + capabilities: [ + { + project: 'Minds Android WebdriverIO Test Project', + build: 'Minds Android Build', + name: 'smoke_test', + device: 'Google Pixel 6', + os_version: '12.0', + app: process.env.BROWSERSTACK_ANDROID_APP_ID, + autoGrantPermissions: 'true', + 'browserstack.local': true, + 'browserstack.debug': true, + }, + ], + + logLevel: 'info', + coloredLogs: true, + screenshotPath: './errorShots/', + baseUrl: '', + waitforTimeout: 30000, + connectionRetryTimeout: 90000, + connectionRetryCount: 3, + + framework: 'jasmine', + jasmineOpts: { + defaultTimeoutInterval: 30000, + }, + + // Code to start browserstack local before start of test + onPrepare: (config, capabilities) => { + console.log('Connecting local...'); + return new Promise((resolve, reject) => { + exports.bs_local = new browserstack.Local(); + exports.bs_local.start({ key: exports.config.key }, error => { + if (error) { + return reject(error); + } + console.log('Connected. Now testing...'); + + resolve(); + }); + }); + }, + + // Code to stop browserstack local after end of test + onComplete: (capabilties, specs) => { + console.log('Closing local tunnel...'); + return new Promise((resolve, reject) => { + exports.bs_local.stop(error => { + if (error) { + return reject(error); + } + console.log('Stopped BrowserStackLocal...'); + + resolve(); + }); + }); + }, +}; diff --git a/e2e/test/conf/wdio.ios.conf.js b/e2e/test/conf/wdio.ios.conf.js new file mode 100644 index 000000000..5bc314bd8 --- /dev/null +++ b/e2e/test/conf/wdio.ios.conf.js @@ -0,0 +1,70 @@ +require('dotenv').config(); +var browserstack = require('browserstack-local'); + +exports.config = { + user: process.env.BROWSERSTACK_USERNAME, + key: process.env.BROWSERSTACK_ACCESS_KEY, + + updateJob: false, + specs: ['./e2e/test/specs/login.spec.js'], + exclude: [], + services: ['browserstack'], + + capabilities: [ + { + project: 'Minds iOS WebdriverIO Test Project', + build: 'Minds iOS Build', + name: 'smoke_test', + device: 'iPhone 13', + os_version: '15.0', + app: process.env.BROWSERSTACK_IOS_APP_ID, + autoAcceptAlerts: 'true', + 'browserstack.local': true, + 'browserstack.debug': true, + }, + ], + + logLevel: 'info', + coloredLogs: true, + screenshotPath: './errorShots/', + baseUrl: '', + waitforTimeout: 30000, + connectionRetryTimeout: 90000, + connectionRetryCount: 3, + + framework: 'jasmine', + jasmineOpts: { + defaultTimeoutInterval: 30000, + }, + + // Code to start browserstack local before start of test + onPrepare: (config, capabilities) => { + console.log('Connecting local...'); + return new Promise((resolve, reject) => { + exports.bs_local = new browserstack.Local(); + exports.bs_local.start({ key: exports.config.key }, error => { + if (error) { + return reject(error); + } + console.log('Connected. Now testing...'); + + resolve(); + }); + }); + }, + + // Code to stop browserstack local after end of test + onComplete: (capabilties, specs) => { + console.log('Closing local tunnel...'); + return new Promise((resolve, reject) => { + exports.bs_local.stop(error => { + if (error) { + return reject(error); + } + console.log('Stopped BrowserStackLocal...'); + + resolve(); + }); + }); + }, +}; diff --git a/e2e/test/pageobjects/login.page.js b/e2e/test/pageobjects/login.page.js new file mode 100644 index 000000000..aad7f11fe --- /dev/null +++ b/e2e/test/pageobjects/login.page.js @@ -0,0 +1,26 @@ +require('dotenv').config(); +import Page from './page'; + +class LoginPage extends Page { + /** + * define elements + */ + get validUser() { + return process.env.USERNAME; + } + get validPassword() { + return process.env.PASSWORD; + } + /** + * define or overwrite page methods + */ + open(path) { + super.open(path); + } + + async login(username, password) { + await super.login(username, password); + } +} + +export default new LoginPage(); diff --git a/e2e/test/pageobjects/page.js b/e2e/test/pageobjects/page.js new file mode 100644 index 000000000..331a5465c --- /dev/null +++ b/e2e/test/pageobjects/page.js @@ -0,0 +1,60 @@ +/* eslint-disable no-undef */ +export default class Page { + /** + * define elements + */ + get maxTimeout() { + return 30000; + } + get loginButton() { + return this.selectElement('text', 'Login'); + } + get usernameField() { + return this.selectElement('id', 'usernameInput'); + } + get passwordField() { + return this.selectElement('id', 'userPasswordInput'); + } + get loginButtonAfterCredentials() { + return this.selectElement('id', 'loginButton'); + } + get homeButton() { + return this.selectElement('id', 'Menu tab button'); + } + /** + * define or overwrite page methods + */ + open(path) { + browser.url(path); + } + + selectElement(type, text) { + if (browser.isAndroid && type === 'id') { + const selector = 'new UiSelector().resourceId("' + text + '")'; + return $(`android=${selector}`); + } else if (browser.isAndroid && type === 'text') { + const selector = + 'new UiSelector().text("' + + text + + '").className("android.widget.TextView")'; + return $(`android=${selector}`); + } else { + return $(`~${text}`); + } + } + + async login(username, password) { + await this.loginButton.waitForDisplayed(); + await this.loginButton.click(); + await this.usernameField.waitForDisplayed(); + await this.usernameField.setValue(username); + await this.passwordField.waitForDisplayed(); + await this.passwordField.setValue(password); + await this.loginButtonAfterCredentials.click(); + await this.homeButton.waitForDisplayed({ timeout: this.maxTimeout }); + } + + logout() { + // Logout function to be defined. + } +} diff --git a/e2e/test/specs/login.spec.js b/e2e/test/specs/login.spec.js new file mode 100644 index 000000000..fa3d723df --- /dev/null +++ b/e2e/test/specs/login.spec.js @@ -0,0 +1,22 @@ +import LoginPage from '../pageobjects/login.page'; + +describe('Login Page Test Cases', () => { + // Before Each method - updates settings. + beforeEach('Update App Settings...', async () => { + //driver.updateSettings({snapshotMaxDepth: 5000}); + }); + + // Test Case to successfully login a valid user. + it('Should successfully login a valid user..', async () => { + await LoginPage.loginButton.waitForDisplayed(); + await LoginPage.login(LoginPage.validUser, LoginPage.validPassword); + await LoginPage.homeButton.waitForDisplayed(); + const homeButtonDisplayed = LoginPage.homeButton.isDisplayed(); + expect(homeButtonDisplayed).toBeTruthy('Login was not successful!'); + }); + + // After All method - closes the mobile app. + afterAll('Close the browser...', async () => { + //browser.closeApp(); + }); +}); diff --git a/index.js b/index.js index 8f1e756ce..dc5b36305 100644 --- a/index.js +++ b/index.js @@ -10,12 +10,22 @@ import React from 'react'; // trackAllPureComponents: true, // }); // } -import { AppRegistry } from 'react-native'; +import { AppRegistry, Platform } from 'react-native'; import reanimated from 'react-native-reanimated'; import App from './App'; -import { enableScreens } from 'react-native-screens'; +import { enableFreeze } from 'react-native-screens'; -enableScreens(); +enableFreeze(true); + +if (Platform.OS === 'ios') { + //TODO: remove when Intl is implemented on Hermes engine (iOS) + require('@formatjs/intl-getcanonicallocales/polyfill').default; + require('@formatjs/intl-locale/polyfill').default; + require('@formatjs/intl-pluralrules/polyfill').default; + require('@formatjs/intl-pluralrules/locale-data/en').default; + require('@formatjs/intl-numberformat/polyfill').default; + require('@formatjs/intl-numberformat/locale-data/en').default; +} // // grab this text blob, and put it in a file named packager/modulePaths.js // console.log(`module.exports = ${JSON.stringify(loadedModuleNames.sort())};`); diff --git a/ios/ImageNotification/Info.plist b/ios/ImageNotification/Info.plist index f14c536fe..422ed9dc7 100644 --- a/ios/ImageNotification/Info.plist +++ b/ios/ImageNotification/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 4.22.0 + 4.24.0 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSExtension diff --git a/ios/Minds-tvOS/Info.plist b/ios/Minds-tvOS/Info.plist index bdbafdcc2..d75653dcd 100644 --- a/ios/Minds-tvOS/Info.plist +++ b/ios/Minds-tvOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 4.22.0 + 4.24.0 CFBundleSignature ???? CFBundleVersion diff --git a/ios/Minds-tvOSTests/Info.plist b/ios/Minds-tvOSTests/Info.plist index c20cb0c3e..c8b21a0de 100644 --- a/ios/Minds-tvOSTests/Info.plist +++ b/ios/Minds-tvOSTests/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 4.22.0 + 4.24.0 CFBundleSignature ???? CFBundleVersion diff --git a/ios/Minds.xcodeproj/project.pbxproj b/ios/Minds.xcodeproj/project.pbxproj index 51ace4914..55cf2e5d2 100644 --- a/ios/Minds.xcodeproj/project.pbxproj +++ b/ios/Minds.xcodeproj/project.pbxproj @@ -13,7 +13,6 @@ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 1AA59E37AB3047CFBD86BE17 /* Roboto-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1130D1F2C2E04310B09E2143 /* Roboto-Italic.ttf */; }; - 2474BF73E490B0A62432D098 /* libPods-Minds-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 106FAF9188DA77EC9F0B7390 /* libPods-Minds-tvOSTests.a */; }; 286EDEC924F96D240054AA85 /* ReactShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 286EDEC824F96D240054AA85 /* ReactShareViewController.swift */; }; 28B61F20242C070D00550028 /* BootSplash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 28B61F1F242C070D00550028 /* BootSplash.storyboard */; }; 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; @@ -21,12 +20,17 @@ 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 2DCD954D1E0B4F2C00145EB5 /* MindsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* MindsTests.m */; }; 2F0CB44F2DED46AD90ACAB77 /* Roboto-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 729486A08ED94889AEF5E356 /* Roboto-BlackItalic.ttf */; }; - 3D85A426C07CCAFB05737497 /* libPods-Minds.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 90C96DA9A0358A616F70FECB /* libPods-Minds.a */; }; 3DA2BBCAEB564997AFD1C084 /* Roboto-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8B643CFCAA3F4577B09A2534 /* Roboto-Medium.ttf */; }; - 41DC92D343B7A7654791E738 /* libPods-Share.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE2AEF8A488E5028571CFA3 /* libPods-Share.a */; }; 48CAA0973AD04D1A9053E464 /* Roboto-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 75FAB4811732472D8C17DC7B /* Roboto-Bold.ttf */; }; + 490B2484B99FA64E99E7D890 /* libPods-Minds-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BE3CF86570FD355D7891B46F /* libPods-Minds-tvOS.a */; }; + 5085FE0043FE51E8DA96A784 /* libPods-Minds-MindsTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E3686C11FF05046E5F91F8C2 /* libPods-Minds-MindsTests.a */; }; + 77E277B2C8699D3E1FD84909 /* libPods-Minds.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E81E5F3882C3CEF9C66F24C6 /* libPods-Minds.a */; }; + 7E995000E76319A71DCCD0F0 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9362380F89F5D347440F1C3 /* ExpoModulesProvider.swift */; }; + 85BE2BC5C8A0313ED7E37322 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8F6EF68D15D4B9C75C0FF0F /* ExpoModulesProvider.swift */; }; A50188A89F8B46A8A07DF06C /* Roboto-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 09A1906E337F47559DC79E93 /* Roboto-BoldItalic.ttf */; }; B080D11FCFB44B31B8AA0E13 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 37DF9BB306F046229D6C90DA /* libz.tbd */; }; + C2E0B5612BEC5A1C486AC0E1 /* libPods-Share.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D3C47793194EE85EEE593EC /* libPods-Share.a */; }; + CFB8C27088B9CC88292112D2 /* libPods-Minds-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EF2BBB6E1A975188D314B1D4 /* libPods-Minds-tvOSTests.a */; }; D72BE5F925EEFB5C00C10FD7 /* mute.aiff in Resources */ = {isa = PBXBuildFile; fileRef = D72BE5F825EEFB5C00C10FD7 /* mute.aiff */; }; D7AF6A2A265FEDF800AE0794 /* NotificationService.m in Sources */ = {isa = PBXBuildFile; fileRef = D7AF6A29265FEDF800AE0794 /* NotificationService.m */; }; D7AF6A2E265FEDF800AE0794 /* ImageNotification.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = D7AF6A26265FEDF800AE0794 /* ImageNotification.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; @@ -38,10 +42,8 @@ D7E64A4D24F5C266005C259F /* Share.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = D7E64A4324F5C266005C259F /* Share.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; D8D2687AD1684A69B25EABFB /* Roboto-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AF49184C3B7B4F3880BE848F /* Roboto-Light.ttf */; }; DDCDA3D26013483999518551 /* Roboto-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5E29162356AA4F08BB78B216 /* Roboto-ThinItalic.ttf */; }; - F26DA01EE49167EF3491E0F2 /* libPods-Minds-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 656DFFF46EFDDDE607EE06B8 /* libPods-Minds-tvOS.a */; }; F5974A9182A84FDFBB21A8F3 /* Roboto-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1FDD531A5CCB46F89DED8B17 /* Roboto-Black.ttf */; }; F82709059E5746EF863ADD14 /* Roboto-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3C3FF91BE82D4802BE675819 /* Roboto-Thin.ttf */; }; - FE2C78DC93CDDBB43CC70DD6 /* libPods-Minds-MindsTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6C7C66D6490618415801135 /* libPods-Minds-MindsTests.a */; }; FE6E8EAA158246D09E0FEA9D /* Roboto-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2CD2622D204E4B0286943196 /* Roboto-MediumItalic.ttf */; }; FFEB1A966BF04513973FCA99 /* Roboto-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 73818081AF2E4726B1E7FBBC /* Roboto-LightItalic.ttf */; }; /* End PBXBuildFile section */ @@ -97,10 +99,8 @@ 00E356EE1AD99517003FC87E /* MindsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MindsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 00E356F21AD99517003FC87E /* MindsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MindsTests.m; sourceTree = ""; }; - 04CCCA82D07FD12FD7FB5B22 /* Pods-Minds.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds.debug.xcconfig"; path = "Target Support Files/Pods-Minds/Pods-Minds.debug.xcconfig"; sourceTree = ""; }; 09A1906E337F47559DC79E93 /* Roboto-BoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-BoldItalic.ttf"; path = "../src/assets/fonts/Roboto/Roboto-BoldItalic.ttf"; sourceTree = ""; }; - 0B8B210B5588851DAEA99C13 /* Pods-Minds.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds.release.xcconfig"; path = "Target Support Files/Pods-Minds/Pods-Minds.release.xcconfig"; sourceTree = ""; }; - 106FAF9188DA77EC9F0B7390 /* libPods-Minds-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Minds-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 0CA7BD84798C8286FD476F03 /* Pods-Share.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Share.release.xcconfig"; path = "Target Support Files/Pods-Share/Pods-Share.release.xcconfig"; sourceTree = ""; }; 1130D1F2C2E04310B09E2143 /* Roboto-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Italic.ttf"; path = "../src/assets/fonts/Roboto/Roboto-Italic.ttf"; sourceTree = ""; }; 129023260E8A42FF9C601292 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* Minds.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Minds.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -109,8 +109,6 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Minds/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Minds/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Minds/main.m; sourceTree = ""; }; - 18B1648E71B5268788F79AD0 /* Pods-Minds-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-Minds-tvOSTests/Pods-Minds-tvOSTests.release.xcconfig"; sourceTree = ""; }; - 1D63BCA2FB1A864AF47F3243 /* Pods-Minds-MindsTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds-MindsTests.release.xcconfig"; path = "Target Support Files/Pods-Minds-MindsTests/Pods-Minds-MindsTests.release.xcconfig"; sourceTree = ""; }; 1FDD531A5CCB46F89DED8B17 /* Roboto-Black.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Black.ttf"; path = "../src/assets/fonts/Roboto/Roboto-Black.ttf"; sourceTree = ""; }; 267E732FD84A4504BA57C548 /* Fontisto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Fontisto.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf"; sourceTree = ""; }; 286EDEC824F96D240054AA85 /* ReactShareViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ReactShareViewController.swift; path = "../../node_modules/react-native-share-menu/ios/ReactShareViewController.swift"; sourceTree = ""; }; @@ -122,27 +120,28 @@ 3B12186C131C4F45A20FC8D8 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; }; 3C3FF91BE82D4802BE675819 /* Roboto-Thin.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Thin.ttf"; path = "../src/assets/fonts/Roboto/Roboto-Thin.ttf"; sourceTree = ""; }; 3C5E8F6E4B334FFBB16040A2 /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = ""; }; + 3EA54BB38C35C12C2A1186F7 /* Pods-Minds.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds.release.xcconfig"; path = "Target Support Files/Pods-Minds/Pods-Minds.release.xcconfig"; sourceTree = ""; }; 4AEB0062FAE04A63B6114F7F /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; }; + 4D3C47793194EE85EEE593EC /* libPods-Share.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Share.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 507ED6F83A904030B363B7BF /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; }; - 5CE2AEF8A488E5028571CFA3 /* libPods-Share.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Share.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5160148104919E36390F2F17 /* Pods-Minds-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-Minds-tvOSTests/Pods-Minds-tvOSTests.release.xcconfig"; sourceTree = ""; }; 5E29162356AA4F08BB78B216 /* Roboto-ThinItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-ThinItalic.ttf"; path = "../src/assets/fonts/Roboto/Roboto-ThinItalic.ttf"; sourceTree = ""; }; - 656DFFF46EFDDDE607EE06B8 /* libPods-Minds-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Minds-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 7115FAB9D40CBC2AA78FC5B1 /* Pods-Minds-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds-tvOS.release.xcconfig"; path = "Target Support Files/Pods-Minds-tvOS/Pods-Minds-tvOS.release.xcconfig"; sourceTree = ""; }; 729486A08ED94889AEF5E356 /* Roboto-BlackItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-BlackItalic.ttf"; path = "../src/assets/fonts/Roboto/Roboto-BlackItalic.ttf"; sourceTree = ""; }; 73818081AF2E4726B1E7FBBC /* Roboto-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-LightItalic.ttf"; path = "../src/assets/fonts/Roboto/Roboto-LightItalic.ttf"; sourceTree = ""; }; - 74C808AA298A455EA4BE9FA1 /* Pods-Share.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Share.release.xcconfig"; path = "Target Support Files/Pods-Share/Pods-Share.release.xcconfig"; sourceTree = ""; }; 75FAB4811732472D8C17DC7B /* Roboto-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Bold.ttf"; path = "../src/assets/fonts/Roboto/Roboto-Bold.ttf"; sourceTree = ""; }; 787E0BE22C954FC5AA66A9C9 /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; }; 83F383987437412091619595 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; }; 8B643CFCAA3F4577B09A2534 /* Roboto-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Medium.ttf"; path = "../src/assets/fonts/Roboto/Roboto-Medium.ttf"; sourceTree = ""; }; - 90C96DA9A0358A616F70FECB /* libPods-Minds.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Minds.a"; sourceTree = BUILT_PRODUCTS_DIR; }; A19E1A09322941E3A3DEB34B /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; }; - AD32B8D249E3469BB4B498BB /* Pods-Share.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Share.debug.xcconfig"; path = "Target Support Files/Pods-Share/Pods-Share.debug.xcconfig"; sourceTree = ""; }; + A604E340C0E733EA0B07E26D /* Pods-Minds-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-Minds-tvOS/Pods-Minds-tvOS.debug.xcconfig"; sourceTree = ""; }; AF49184C3B7B4F3880BE848F /* Roboto-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Light.ttf"; path = "../src/assets/fonts/Roboto/Roboto-Light.ttf"; sourceTree = ""; }; AF88048DF32544AF9BBF87EF /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; }; + B1A36CC0F2A5CFB318BF3DE1 /* Pods-Minds-MindsTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds-MindsTests.release.xcconfig"; path = "Target Support Files/Pods-Minds-MindsTests/Pods-Minds-MindsTests.release.xcconfig"; sourceTree = ""; }; B370BDA97DD845B5BDA08834 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; }; + B59E1998F463B6BDC99AAC94 /* Pods-Share.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Share.debug.xcconfig"; path = "Target Support Files/Pods-Share/Pods-Share.debug.xcconfig"; sourceTree = ""; }; + BDD750D6C3EE0D7886A31572 /* Pods-Minds-MindsTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds-MindsTests.debug.xcconfig"; path = "Target Support Files/Pods-Minds-MindsTests/Pods-Minds-MindsTests.debug.xcconfig"; sourceTree = ""; }; + BE3CF86570FD355D7891B46F /* libPods-Minds-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Minds-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; BFA6449C294D4B2FA6E84139 /* Roboto-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Regular.ttf"; path = "../src/assets/fonts/Roboto/Roboto-Regular.ttf"; sourceTree = ""; }; - C38D1CAB30AA7618D7EADE0A /* Pods-Minds-MindsTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds-MindsTests.debug.xcconfig"; path = "Target Support Files/Pods-Minds-MindsTests/Pods-Minds-MindsTests.debug.xcconfig"; sourceTree = ""; }; C8BCF958B14D4858AB34647A /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; }; D72521D82367A1FF00F95DC2 /* Minds.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Minds.entitlements; path = Minds/Minds.entitlements; sourceTree = ""; }; D72BE5F825EEFB5C00C10FD7 /* mute.aiff */ = {isa = PBXFileReference; lastKnownFileType = audio.aiff; name = mute.aiff; path = "../node_modules/react-native-silent-switch/mute.aiff"; sourceTree = ""; }; @@ -160,15 +159,20 @@ D7E64A4824F5C266005C259F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; D7E64A4A24F5C266005C259F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D7E64A5524F5C445005C259F /* Share.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Share.entitlements; sourceTree = ""; }; + D8F6EF68D15D4B9C75C0FF0F /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-Minds-MindsTests/ExpoModulesProvider.swift"; sourceTree = ""; }; D9E376C2870E44E28C59FC94 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; }; - DDDA41ADA72B11C062FA4272 /* Pods-Minds-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-Minds-tvOS/Pods-Minds-tvOS.debug.xcconfig"; sourceTree = ""; }; + DBB517791817E95B9D7267DA /* Pods-Minds.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds.debug.xcconfig"; path = "Target Support Files/Pods-Minds/Pods-Minds.debug.xcconfig"; sourceTree = ""; }; DE2209E216E44B24A4EA55AC /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; + E23D5867D1D4A336DF45DE9D /* Pods-Minds-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-Minds-tvOSTests/Pods-Minds-tvOSTests.debug.xcconfig"; sourceTree = ""; }; + E3686C11FF05046E5F91F8C2 /* libPods-Minds-MindsTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Minds-MindsTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + E3695A07079C305A7BEF2BE8 /* Pods-Minds-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds-tvOS.release.xcconfig"; path = "Target Support Files/Pods-Minds-tvOS/Pods-Minds-tvOS.release.xcconfig"; sourceTree = ""; }; + E81E5F3882C3CEF9C66F24C6 /* libPods-Minds.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Minds.a"; sourceTree = BUILT_PRODUCTS_DIR; }; E8EE368DB28048A4805CD7A9 /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; }; EA396FA4D42D40E1B2959EF0 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; - F5FF790D16784AA71F63EB43 /* Pods-Minds-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Minds-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-Minds-tvOSTests/Pods-Minds-tvOSTests.debug.xcconfig"; sourceTree = ""; }; - F6C7C66D6490618415801135 /* libPods-Minds-MindsTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Minds-MindsTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + EF2BBB6E1A975188D314B1D4 /* libPods-Minds-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Minds-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + F9362380F89F5D347440F1C3 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-Minds/ExpoModulesProvider.swift"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -176,7 +180,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FE2C78DC93CDDBB43CC70DD6 /* libPods-Minds-MindsTests.a in Frameworks */, + 5085FE0043FE51E8DA96A784 /* libPods-Minds-MindsTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -185,7 +189,7 @@ buildActionMask = 2147483647; files = ( B080D11FCFB44B31B8AA0E13 /* libz.tbd in Frameworks */, - 3D85A426C07CCAFB05737497 /* libPods-Minds.a in Frameworks */, + 77E277B2C8699D3E1FD84909 /* libPods-Minds.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -193,7 +197,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F26DA01EE49167EF3491E0F2 /* libPods-Minds-tvOS.a in Frameworks */, + 490B2484B99FA64E99E7D890 /* libPods-Minds-tvOS.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -201,7 +205,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2474BF73E490B0A62432D098 /* libPods-Minds-tvOSTests.a in Frameworks */, + CFB8C27088B9CC88292112D2 /* libPods-Minds-tvOSTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -216,7 +220,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 41DC92D343B7A7654791E738 /* libPods-Share.a in Frameworks */, + C2E0B5612BEC5A1C486AC0E1 /* libPods-Share.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -263,11 +267,11 @@ ED297162215061F000B7C4FE /* JavaScriptCore.framework */, ED2971642150620600B7C4FE /* JavaScriptCore.framework */, 37DF9BB306F046229D6C90DA /* libz.tbd */, - 90C96DA9A0358A616F70FECB /* libPods-Minds.a */, - F6C7C66D6490618415801135 /* libPods-Minds-MindsTests.a */, - 656DFFF46EFDDDE607EE06B8 /* libPods-Minds-tvOS.a */, - 106FAF9188DA77EC9F0B7390 /* libPods-Minds-tvOSTests.a */, - 5CE2AEF8A488E5028571CFA3 /* libPods-Share.a */, + E81E5F3882C3CEF9C66F24C6 /* libPods-Minds.a */, + E3686C11FF05046E5F91F8C2 /* libPods-Minds-MindsTests.a */, + BE3CF86570FD355D7891B46F /* libPods-Minds-tvOS.a */, + EF2BBB6E1A975188D314B1D4 /* libPods-Minds-tvOSTests.a */, + 4D3C47793194EE85EEE593EC /* libPods-Share.a */, ); name = Frameworks; sourceTree = ""; @@ -329,6 +333,7 @@ 2D16E6871FA4F8E400B85C8A /* Frameworks */, FE1DBD94E1B49F8F110400B4 /* Pods */, 6006E6B399BD4F298868E2D2 /* Resources */, + CDF17B6FF82DEF1EA073F658 /* ExpoModulesProviders */, ); indentWidth = 2; sourceTree = ""; @@ -348,6 +353,31 @@ name = Products; sourceTree = ""; }; + 92711B7B4F7BF882553FA0C7 /* Minds */ = { + isa = PBXGroup; + children = ( + F9362380F89F5D347440F1C3 /* ExpoModulesProvider.swift */, + ); + name = Minds; + sourceTree = ""; + }; + A0EF3A0655872F97ECADE0F9 /* MindsTests */ = { + isa = PBXGroup; + children = ( + D8F6EF68D15D4B9C75C0FF0F /* ExpoModulesProvider.swift */, + ); + name = MindsTests; + sourceTree = ""; + }; + CDF17B6FF82DEF1EA073F658 /* ExpoModulesProviders */ = { + isa = PBXGroup; + children = ( + 92711B7B4F7BF882553FA0C7 /* Minds */, + A0EF3A0655872F97ECADE0F9 /* MindsTests */, + ); + name = ExpoModulesProviders; + sourceTree = ""; + }; D7AF6A27265FEDF800AE0794 /* ImageNotification */ = { isa = PBXGroup; children = ( @@ -374,16 +404,16 @@ FE1DBD94E1B49F8F110400B4 /* Pods */ = { isa = PBXGroup; children = ( - 04CCCA82D07FD12FD7FB5B22 /* Pods-Minds.debug.xcconfig */, - 0B8B210B5588851DAEA99C13 /* Pods-Minds.release.xcconfig */, - C38D1CAB30AA7618D7EADE0A /* Pods-Minds-MindsTests.debug.xcconfig */, - 1D63BCA2FB1A864AF47F3243 /* Pods-Minds-MindsTests.release.xcconfig */, - DDDA41ADA72B11C062FA4272 /* Pods-Minds-tvOS.debug.xcconfig */, - 7115FAB9D40CBC2AA78FC5B1 /* Pods-Minds-tvOS.release.xcconfig */, - F5FF790D16784AA71F63EB43 /* Pods-Minds-tvOSTests.debug.xcconfig */, - 18B1648E71B5268788F79AD0 /* Pods-Minds-tvOSTests.release.xcconfig */, - AD32B8D249E3469BB4B498BB /* Pods-Share.debug.xcconfig */, - 74C808AA298A455EA4BE9FA1 /* Pods-Share.release.xcconfig */, + DBB517791817E95B9D7267DA /* Pods-Minds.debug.xcconfig */, + 3EA54BB38C35C12C2A1186F7 /* Pods-Minds.release.xcconfig */, + BDD750D6C3EE0D7886A31572 /* Pods-Minds-MindsTests.debug.xcconfig */, + B1A36CC0F2A5CFB318BF3DE1 /* Pods-Minds-MindsTests.release.xcconfig */, + A604E340C0E733EA0B07E26D /* Pods-Minds-tvOS.debug.xcconfig */, + E3695A07079C305A7BEF2BE8 /* Pods-Minds-tvOS.release.xcconfig */, + E23D5867D1D4A336DF45DE9D /* Pods-Minds-tvOSTests.debug.xcconfig */, + 5160148104919E36390F2F17 /* Pods-Minds-tvOSTests.release.xcconfig */, + B59E1998F463B6BDC99AAC94 /* Pods-Share.debug.xcconfig */, + 0CA7BD84798C8286FD476F03 /* Pods-Share.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -395,12 +425,12 @@ isa = PBXNativeTarget; buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "MindsTests" */; buildPhases = ( - 2ABEB05D0EA07DB0C0B72C80 /* [CP] Check Pods Manifest.lock */, + A098E584B186C76C6A270217 /* [CP] Check Pods Manifest.lock */, 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, 00E356EC1AD99517003FC87E /* Resources */, - CE956339EE80A652573AB2A8 /* [CP] Embed Pods Frameworks */, - DA2A3B9D7CE9C4121B8559E6 /* [CP] Copy Pods Resources */, + C874345D2A38EC0535D5670F /* [CP] Embed Pods Frameworks */, + D395FC0EDEEA4D63B3044527 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -416,7 +446,7 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Minds" */; buildPhases = ( - 318E58E639171A8A441FA90B /* [CP] Check Pods Manifest.lock */, + C2E9656C5B48447EECBD7F59 /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, @@ -424,8 +454,8 @@ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, DF23D9AE37694D50863E721D /* Upload Debug Symbols to Sentry */, D7E64A4E24F5C266005C259F /* Embed App Extensions */, - 6764FB3E16B50D5EC63061E5 /* [CP] Embed Pods Frameworks */, - 0957E7014521472C6F2F9F9C /* [CP] Copy Pods Resources */, + 7A44C06BDBD06E189E9B34F6 /* [CP] Embed Pods Frameworks */, + DFD4942A02231907BB2C4995 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -442,7 +472,7 @@ isa = PBXNativeTarget; buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Minds-tvOS" */; buildPhases = ( - 38E74F8A6BEB616B0836E383 /* [CP] Check Pods Manifest.lock */, + 15D2EE14149ED61D2000B696 /* [CP] Check Pods Manifest.lock */, FD10A7F122414F3F0027D42C /* Start Packager */, 2D02E4771E0B4A5D006451C7 /* Sources */, 2D02E4781E0B4A5D006451C7 /* Frameworks */, @@ -462,7 +492,7 @@ isa = PBXNativeTarget; buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Minds-tvOSTests" */; buildPhases = ( - A0CFCBD18768C319CE2654D7 /* [CP] Check Pods Manifest.lock */, + 4A3A48A22457BD37AECDCE84 /* [CP] Check Pods Manifest.lock */, 2D02E48C1E0B4A5D006451C7 /* Sources */, 2D02E48D1E0B4A5D006451C7 /* Frameworks */, 2D02E48E1E0B4A5D006451C7 /* Resources */, @@ -498,12 +528,12 @@ isa = PBXNativeTarget; buildConfigurationList = D7E64A5124F5C266005C259F /* Build configuration list for PBXNativeTarget "Share" */; buildPhases = ( - 77DF04C51953FD90C211888D /* [CP] Check Pods Manifest.lock */, + 1DD9800297619D6ECCB1640A /* [CP] Check Pods Manifest.lock */, D7E64A3F24F5C266005C259F /* Sources */, D7E64A4024F5C266005C259F /* Frameworks */, D7E64A4124F5C266005C259F /* Resources */, 286EDECA24F96E530054AA85 /* Bundle React Native code and images */, - C077A0BCAAE4EF9D09201782 /* [CP] Copy Pods Resources */, + BBA69B97E8603C177246FC0D /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -663,84 +693,7 @@ shellPath = /bin/sh; shellScript = "export NODE_BINARY=node\nif [ \"${CONFIGURATION}\" = \"Release\" ]; then\n export SENTRY_PROPERTIES=sentry.properties\n\n ../node_modules/@sentry/cli/bin/sentry-cli react-native xcode ../node_modules/react-native/scripts/react-native-xcode.sh\nelse \n ../node_modules/react-native/scripts/react-native-xcode.sh\nfi\n"; }; - 0957E7014521472C6F2F9F9C /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Minds/Pods-Minds-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", - "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/Base.lproj/LaunchScreen.storyboard", - "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/ColorCollectionViewCell.xib", - "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/EmojiCollectionViewCell.xib", - "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/icomoon.ttf", - "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/LaunchScreen.storyboard", - "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/PhotoCropEditorBorder.png", - "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/PhotoCropEditorBorder@2x.png", - "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/PhotoCropEditorBorder@3x.png", - "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/PhotoEditorViewController.xib", - "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/StickerCollectionViewCell.xib", - "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/StickersViewController.xib", - "${PODS_CONFIGURATION_BUILD_DIR}/react-native-image-filter-kit/bundle.bundle", - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/LaunchScreen.storyboardc", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ColorCollectionViewCell.nib", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EmojiCollectionViewCell.nib", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/icomoon.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/PhotoCropEditorBorder.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/PhotoCropEditorBorder@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/PhotoCropEditorBorder@3x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/PhotoEditorViewController.nib", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/StickerCollectionViewCell.nib", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/StickersViewController.nib", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/bundle.bundle", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Minds/Pods-Minds-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 286EDECA24F96E530054AA85 /* Bundle React Native code and images */ = { + 15D2EE14149ED61D2000B696 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -748,17 +701,21 @@ inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); - name = "Bundle React Native code and images"; + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Minds-tvOS-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nexport NODE_BINARY=\"node\"\n\nexport ENTRY_FILE=index.share.js\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 2ABEB05D0EA07DB0C0B72C80 /* [CP] Check Pods Manifest.lock */ = { + 1DD9800297619D6ECCB1640A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -773,50 +730,46 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Minds-MindsTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Share-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { + 286EDECA24F96E530054AA85 /* Bundle React Native code and images */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( ); - name = "Bundle React Native Code And Images"; + name = "Bundle React Native code and images"; + outputFileListPaths = ( + ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export SENTRY_PROPERTIES=sentry.properties\nexport NODE_BINARY=node\n../node_modules/@sentry/cli/bin/sentry-cli react-native xcode ../node_modules/react-native/scripts/react-native-xcode.sh"; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nexport NODE_BINARY=\"node\"\n\nexport ENTRY_FILE=index.share.js\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; }; - 318E58E639171A8A441FA90B /* [CP] Check Pods Manifest.lock */ = { + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Bundle React Native Code And Images"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Minds-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "export SENTRY_PROPERTIES=sentry.properties\nexport NODE_BINARY=node\n../node_modules/@sentry/cli/bin/sentry-cli react-native xcode ../node_modules/react-native/scripts/react-native-xcode.sh"; }; - 38E74F8A6BEB616B0836E383 /* [CP] Check Pods Manifest.lock */ = { + 4A3A48A22457BD37AECDCE84 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -831,14 +784,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Minds-tvOS-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Minds-tvOSTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 6764FB3E16B50D5EC63061E5 /* [CP] Embed Pods Frameworks */ = { + 7A44C06BDBD06E189E9B34F6 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -860,7 +813,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Minds/Pods-Minds-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 77DF04C51953FD90C211888D /* [CP] Check Pods Manifest.lock */ = { + A098E584B186C76C6A270217 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -875,36 +828,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Share-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - A0CFCBD18768C319CE2654D7 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Minds-tvOSTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Minds-MindsTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C077A0BCAAE4EF9D09201782 /* [CP] Copy Pods Resources */ = { + BBA69B97E8603C177246FC0D /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -981,7 +912,29 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Share/Pods-Share-resources.sh\"\n"; showEnvVarsInLog = 0; }; - CE956339EE80A652573AB2A8 /* [CP] Embed Pods Frameworks */ = { + C2E9656C5B48447EECBD7F59 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Minds-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + C874345D2A38EC0535D5670F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1003,13 +956,14 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Minds-MindsTests/Pods-Minds-MindsTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - DA2A3B9D7CE9C4121B8559E6 /* [CP] Copy Pods Resources */ = { + D395FC0EDEEA4D63B3044527 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Minds-MindsTests/Pods-Minds-MindsTests-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle", "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", @@ -1044,6 +998,7 @@ ); name = "[CP] Copy Pods Resources"; outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", @@ -1094,6 +1049,85 @@ shellPath = /bin/sh; shellScript = "\n\nif [ \"${CONFIGURATION}\" = \"Release\" ]; then\n export SENTRY_PROPERTIES=sentry.properties\n ../node_modules/@sentry/cli/bin/sentry-cli upload-dsym\nfi\n"; }; + DFD4942A02231907BB2C4995 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Minds/Pods-Minds-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", + "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/Base.lproj/LaunchScreen.storyboard", + "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/ColorCollectionViewCell.xib", + "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/EmojiCollectionViewCell.xib", + "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/icomoon.ttf", + "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/LaunchScreen.storyboard", + "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/PhotoCropEditorBorder.png", + "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/PhotoCropEditorBorder@2x.png", + "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/PhotoCropEditorBorder@3x.png", + "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/PhotoEditorViewController.xib", + "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/StickerCollectionViewCell.xib", + "${PODS_ROOT}/iOSPhotoEditor/Photo Editor/Photo Editor/StickersViewController.xib", + "${PODS_CONFIGURATION_BUILD_DIR}/react-native-image-filter-kit/bundle.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/LaunchScreen.storyboardc", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ColorCollectionViewCell.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EmojiCollectionViewCell.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/icomoon.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/PhotoCropEditorBorder.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/PhotoCropEditorBorder@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/PhotoCropEditorBorder@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/PhotoEditorViewController.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/StickerCollectionViewCell.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/StickersViewController.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/bundle.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Minds/Pods-Minds-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; FD10A7F022414F080027D42C /* Start Packager */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1140,6 +1174,7 @@ buildActionMask = 2147483647; files = ( 00E356F31AD99517003FC87E /* MindsTests.m in Sources */, + 85BE2BC5C8A0313ED7E37322 /* ExpoModulesProvider.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1150,6 +1185,7 @@ 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, D7BBF56424F5D94F005E4A2C /* File.swift in Sources */, 13B07FC11A68108700A75B9A /* main.m in Sources */, + 7E995000E76319A71DCCD0F0 /* ExpoModulesProvider.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1226,7 +1262,7 @@ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C38D1CAB30AA7618D7EADE0A /* Pods-Minds-MindsTests.debug.xcconfig */; + baseConfigurationReference = BDD750D6C3EE0D7886A31572 /* Pods-Minds-MindsTests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -1250,7 +1286,7 @@ }; 00E356F71AD99517003FC87E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D63BCA2FB1A864AF47F3243 /* Pods-Minds-MindsTests.release.xcconfig */; + baseConfigurationReference = B1A36CC0F2A5CFB318BF3DE1 /* Pods-Minds-MindsTests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -1271,7 +1307,7 @@ }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 04CCCA82D07FD12FD7FB5B22 /* Pods-Minds.debug.xcconfig */; + baseConfigurationReference = DBB517791817E95B9D7267DA /* Pods-Minds.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -1303,7 +1339,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0B8B210B5588851DAEA99C13 /* Pods-Minds.release.xcconfig */; + baseConfigurationReference = 3EA54BB38C35C12C2A1186F7 /* Pods-Minds.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -1336,7 +1372,7 @@ }; 2D02E4971E0B4A5E006451C7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DDDA41ADA72B11C062FA4272 /* Pods-Minds-tvOS.debug.xcconfig */; + baseConfigurationReference = A604E340C0E733EA0B07E26D /* Pods-Minds-tvOS.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; @@ -1364,7 +1400,7 @@ }; 2D02E4981E0B4A5E006451C7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7115FAB9D40CBC2AA78FC5B1 /* Pods-Minds-tvOS.release.xcconfig */; + baseConfigurationReference = E3695A07079C305A7BEF2BE8 /* Pods-Minds-tvOS.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; @@ -1392,7 +1428,7 @@ }; 2D02E4991E0B4A5E006451C7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F5FF790D16784AA71F63EB43 /* Pods-Minds-tvOSTests.debug.xcconfig */; + baseConfigurationReference = E23D5867D1D4A336DF45DE9D /* Pods-Minds-tvOSTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NONNULL = YES; @@ -1419,7 +1455,7 @@ }; 2D02E49A1E0B4A5E006451C7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 18B1648E71B5268788F79AD0 /* Pods-Minds-tvOSTests.release.xcconfig */; + baseConfigurationReference = 5160148104919E36390F2F17 /* Pods-Minds-tvOSTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NONNULL = YES; @@ -1617,7 +1653,7 @@ }; D7E64A4F24F5C266005C259F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AD32B8D249E3469BB4B498BB /* Pods-Share.debug.xcconfig */; + baseConfigurationReference = B59E1998F463B6BDC99AAC94 /* Pods-Share.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -1653,7 +1689,7 @@ }; D7E64A5024F5C266005C259F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 74C808AA298A455EA4BE9FA1 /* Pods-Share.release.xcconfig */; + baseConfigurationReference = 0CA7BD84798C8286FD476F03 /* Pods-Share.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; diff --git a/ios/Minds/AppDelegate.h b/ios/Minds/AppDelegate.h index 2726d5e13..27129e6ca 100644 --- a/ios/Minds/AppDelegate.h +++ b/ios/Minds/AppDelegate.h @@ -6,9 +6,10 @@ */ #import +#import #import -@interface AppDelegate : UIResponder +@interface AppDelegate : EXAppDelegateWrapper @property (nonatomic, strong) UIWindow *window; diff --git a/ios/Minds/AppDelegate.m b/ios/Minds/AppDelegate.m index ce7c78c28..973cc7c83 100644 --- a/ios/Minds/AppDelegate.m +++ b/ios/Minds/AppDelegate.m @@ -13,20 +13,12 @@ #import #import #import +#import -#import -#import -#import #import #import "ReactNativeExceptionHandler.h" #import "Orientation.h" - -@interface AppDelegate () - -@property (nonatomic, strong) UMModuleRegistryAdapter *moduleRegistryAdapter; - -@end - +#import #ifdef FB_SONARKIT_ENABLED #import #import @@ -53,21 +45,20 @@ - (UIInterfaceOrientationMask)application:(UIApplication *)application supported - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - self.moduleRegistryAdapter = [[UMModuleRegistryAdapter alloc] initWithModuleRegistryProvider:[[UMModuleRegistryProvider alloc] init]]; [Orientation setOrientation:UIInterfaceOrientationMaskPortrait]; #ifdef FB_SONARKIT_ENABLED InitializeFlipper(application); #endif NSDictionary *initialProperties = arguments(); - RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; - RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge + RCTBridge *bridge = [self.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions]; + RCTRootView *rootView = [self.reactDelegate createRootViewWithBridge:bridge moduleName:@"Minds" initialProperties:initialProperties]; rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - UIViewController *rootViewController = [UIViewController new]; + UIViewController *rootViewController = [self.reactDelegate createRootViewController]; rootViewController.view = rootView; self.window.rootViewController = rootViewController; [self.window makeKeyAndVisible]; @@ -99,14 +90,9 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( // [ReactNativeExceptionHandler releaseExceptionHold]; when you are done to release the UI lock. }]; - return YES; -} + [super application:application didFinishLaunchingWithOptions:launchOptions]; -- (NSArray> *)extraModulesForBridge:(RCTBridge *)bridge -{ - NSArray> *extraModules = [_moduleRegistryAdapter extraModulesForBridge:bridge]; - // If you'd like to export some custom RCTBridgeModules that are not Expo modules, add them here! - return extraModules; + return YES; } - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge diff --git a/ios/Minds/Info.plist b/ios/Minds/Info.plist index fa03a9b70..c4f579042 100644 --- a/ios/Minds/Info.plist +++ b/ios/Minds/Info.plist @@ -2,6 +2,8 @@ + CodePushDeploymentKey + FxvJT6OhtBM6PAQZ9iTtrkqT-vMavQQq-BfbJ CFBundleDevelopmentRegion en CFBundleDisplayName @@ -19,7 +21,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 4.22.0 + 4.24.0 CFBundleSignature ???? UIStatusBarStyle diff --git a/ios/MindsTests/Info.plist b/ios/MindsTests/Info.plist index 137d399ed..9144826d6 100644 --- a/ios/MindsTests/Info.plist +++ b/ios/MindsTests/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 4.22.0 + 4.24.0 CFBundleSignature ???? CFBundleVersion diff --git a/ios/Podfile b/ios/Podfile index c31611f76..36f8f36f3 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,6 +1,6 @@ +require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") require_relative '../node_modules/react-native/scripts/react_native_pods' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' -require_relative '../node_modules/react-native-unimodules/cocoapods.rb' install! 'cocoapods', :deterministic_uuids => false @@ -8,15 +8,21 @@ install! 'cocoapods', $RNFirebaseAsStaticFramework = true -platform :ios, '11.0' +platform :ios, '12.0' target 'Minds' do + use_expo_modules! + post_integrate do |installer| + begin + expo_patch_react_imports!(installer) + rescue => e + Pod::UI.warn e + end + end config = use_native_modules! use_react_native!(:path => config["reactNativePath"], :hermes_enabled => true) - use_unimodules! - # use_frameworks! :linkage => :static pod 'RNPhotoEditor', :path => '../node_modules/react-native-photo-editor/ios' diff --git a/ios/Podfile.lock b/ios/Podfile.lock index b9fb2a017..4ff42f6e2 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,44 +1,42 @@ PODS: + - Base64 (1.1.2) - Bolts/Tasks (1.9.0) - boost (1.76.0) - CocoaAsyncSocket (7.6.5) + - CodePush (7.0.4): + - Base64 (~> 1.1) + - JWT (~> 3.0.0-beta.12) + - React-Core + - SSZipArchive (~> 2.2.2) - DoubleConversion (1.1.6) - - EXApplication (3.2.0): - - UMCore - - EXAV (9.2.3): + - EXApplication (4.0.2): + - ExpoModulesCore + - EXAV (10.2.1): + - ExpoModulesCore + - ReactCommon/turbomodule/core + - EXConstants (13.0.2): - ExpoModulesCore - - UMCore - - EXConstants (11.0.2): + - EXErrorRecovery (3.0.5): - ExpoModulesCore - - UMCore - - EXErrorRecovery (2.2.0): - - UMCore - - EXFileSystem (11.1.3): + - EXFileSystem (13.1.4): - ExpoModulesCore - - UMCore - - EXFont (9.2.1): + - EXFont (10.0.5): - ExpoModulesCore - - UMCore - - EXImageLoader (2.2.0): + - EXImageLoader (3.1.1): - ExpoModulesCore - React-Core - - UMCore - - EXImageManipulator (9.2.2): + - EXImageManipulator (10.2.1): + - EXImageLoader + - ExpoModulesCore + - EXKeepAwake (10.0.2): + - ExpoModulesCore + - Expo (44.0.6): + - ExpoModulesCore + - ExpoLinearGradient (11.0.3): - ExpoModulesCore - - UMCore - - EXKeepAwake (9.2.0): - - UMCore - - EXLinearGradient (9.2.0): - - UMCore - - ExpoModulesCore (0.2.0): - - ExpoModulesCore/Core (= 0.2.0) - - ExpoModulesCore/Interfaces (= 0.2.0) - - UMCore - - ExpoModulesCore/Core (0.2.0): - - UMCore - - ExpoModulesCore/Interfaces (0.2.0): - - ExpoModulesCore/Core - - UMCore + - ExpoModulesCore (0.6.5): + - React-Core + - ReactCommon/turbomodule/core - FBLazyVector (0.66.3) - FBReactNativeSpec (0.66.3): - RCT-Folly (= 2021.06.28.00-v2) @@ -115,6 +113,8 @@ PODS: - glog (0.3.5) - hermes-engine (0.9.0) - iOSPhotoEditor (0.5) + - JWT (3.0.0-beta.14): + - Base64 (~> 1.1.2) - libevent (2.1.12) - libwebp (1.2.1): - libwebp/demux (= 1.2.1) @@ -373,14 +373,14 @@ PODS: - React - react-native-measure-text-size (1.0.0): - React-Core - - react-native-mmkv-storage (0.6.8): + - react-native-mmkv-storage (0.6.12): - MMKV (= 1.2.10) - React-Core - react-native-month-year-picker (1.8.0): - React - react-native-netinfo (5.9.10): - React-Core - - react-native-notifications (3.0.0): + - react-native-notifications (3.0.2): - React - react-native-orientation-locker (1.3.1): - React-Core @@ -485,7 +485,7 @@ PODS: - SDWebImageWebPCoder (~> 0.6.1) - RNFS (2.18.0): - React - - RNGestureHandler (1.10.3): + - RNGestureHandler (2.4.1): - React-Core - RNImageColors (1.3.1): - React-Core @@ -507,16 +507,14 @@ PODS: - RNPhotoEditor (1.0.12): - iOSPhotoEditor - React - - RNReanimated (2.4.1): + - RNReanimated (2.8.0): - DoubleConversion - FBLazyVector - FBReactNativeSpec - glog - - hermes-engine - RCT-Folly - RCTRequired - RCTTypeSafety - - React - React-callinvoker - React-Core - React-Core/DevSupport @@ -536,7 +534,7 @@ PODS: - React-RCTText - ReactCommon/turbomodule/core - Yoga - - RNScreens (3.8.0): + - RNScreens (3.10.2): - React-Core - React-RCTImage - RNSentry (2.6.0): @@ -567,16 +565,9 @@ PODS: - SnowplowTracker (2.2.2): - FMDB (~> 2.7) - SocketRocket (0.6.0) + - SSZipArchive (2.2.3) - TOCropViewController (2.6.0) - - UMAppLoader (2.2.0) - - UMCore (7.1.2) - - UMReactNativeAdapter (6.3.9): - - ExpoModulesCore - - React-Core - - UMCore - - UMTaskManagerInterface (6.2.0): - - UMCore - - VisionCamera (2.12.0): + - VisionCamera (2.13.1): - React - React-callinvoker - React-Core @@ -586,6 +577,7 @@ PODS: DEPENDENCIES: - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - CodePush (from `../node_modules/react-native-code-push`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - EXApplication (from `../node_modules/expo-application/ios`) - EXAV (from `../node_modules/expo-av/ios`) @@ -596,7 +588,8 @@ DEPENDENCIES: - EXImageLoader (from `../node_modules/expo-image-loader/ios`) - EXImageManipulator (from `../node_modules/expo-image-manipulator/ios`) - EXKeepAwake (from `../node_modules/expo-keep-awake/ios`) - - EXLinearGradient (from `../node_modules/expo-linear-gradient/ios`) + - Expo (from `../node_modules/expo/ios`) + - ExpoLinearGradient (from `../node_modules/expo-linear-gradient/ios`) - ExpoModulesCore (from `../node_modules/expo-modules-core/ios`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) @@ -701,15 +694,12 @@ DEPENDENCIES: - "RNSnowplowTracker (from `../node_modules/@snowplow/react-native-tracker`)" - RNSVG (from `../node_modules/react-native-svg`) - RNVectorIcons (from `../node_modules/react-native-vector-icons`) - - UMAppLoader (from `../node_modules/unimodules-app-loader/ios`) - - "UMCore (from `../node_modules/@unimodules/core/ios`)" - - "UMReactNativeAdapter (from `../node_modules/@unimodules/react-native-adapter/ios`)" - - UMTaskManagerInterface (from `../node_modules/unimodules-task-manager-interface/ios`) - VisionCamera (from `../node_modules/react-native-vision-camera`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: trunk: + - Base64 - Bolts - CocoaAsyncSocket - Flipper @@ -724,6 +714,7 @@ SPEC REPOS: - FMDB - fmt - hermes-engine + - JWT - libevent - libwebp - MMKV @@ -734,12 +725,15 @@ SPEC REPOS: - Sentry - SnowplowTracker - SocketRocket + - SSZipArchive - TOCropViewController - YogaKit EXTERNAL SOURCES: boost: :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + CodePush: + :path: "../node_modules/react-native-code-push" DoubleConversion: :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" EXApplication: @@ -760,7 +754,9 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-image-manipulator/ios" EXKeepAwake: :path: "../node_modules/expo-keep-awake/ios" - EXLinearGradient: + Expo: + :path: "../node_modules/expo/ios" + ExpoLinearGradient: :path: "../node_modules/expo-linear-gradient/ios" ExpoModulesCore: :path: "../node_modules/expo-modules-core/ios" @@ -921,14 +917,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-svg" RNVectorIcons: :path: "../node_modules/react-native-vector-icons" - UMAppLoader: - :path: "../node_modules/unimodules-app-loader/ios" - UMCore: - :path: "../node_modules/@unimodules/core/ios" - UMReactNativeAdapter: - :path: "../node_modules/@unimodules/react-native-adapter/ios" - UMTaskManagerInterface: - :path: "../node_modules/unimodules-task-manager-interface/ios" VisionCamera: :path: "../node_modules/react-native-vision-camera" Yoga: @@ -940,21 +928,24 @@ CHECKOUT OPTIONS: :git: https://github.com/prscX/photo-editor SPEC CHECKSUMS: + Base64: cecfb41a004124895a7bcee567a89bae5a89d49b Bolts: ac6567323eac61e203f6a9763667d0f711be34c8 boost: a7c83b31436843459a1961bfd74b96033dc77234 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 + CodePush: b51b7ac64c07d4eacfc8cc5750a1dd28adbf2528 DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 - EXApplication: 9ff2a206009d6e55bca6c20b3f33d07986b51ef3 - EXAV: 67bcc1d0afeb1fab854b206c84b9f2afbd61d0cd - EXConstants: 4cb52b6d8f636c767104a44bf7db3873e9c01a6f - EXErrorRecovery: 404d827bc7d42f306c062d58a60b06afc4d082b3 - EXFileSystem: 0a04aba8da751b9ac954065911bcf166503f8267 - EXFont: 9846ba1bb6f5f5aed44e20eea3ac70693323832d - EXImageLoader: d3531a3fe530b22925c19977cb53bb43e3821fe6 - EXImageManipulator: c9af8e8dc6543fdca23693eae280e388b2f93fb0 - EXKeepAwake: f4105ef469be7b283f66ce2d7234bb71ac80cd26 - EXLinearGradient: f9ea3259f096b27008860ca50764184225dc71c9 - ExpoModulesCore: 2734852616127a6c1fc23012197890a6f3763dc7 + EXApplication: 54fe5bd6268d697771645e8f1aef8b806a65247a + EXAV: b9ed0c201092244c46aa78f907f5c66176bed236 + EXConstants: 88bf79622fbd9b476c96d8ec57fe97ca44fe8e3c + EXErrorRecovery: b0d7582714a2cc896e94a2308a356f94dbf14ef7 + EXFileSystem: 08a3033ac372b6346becf07839e1ccef26fb1058 + EXFont: 2597c10ac85a69d348d44d7873eccf5a7576ef5e + EXImageLoader: 347b72c2ec2df65120ccec40ea65a4c4f24317ff + EXImageManipulator: 60d1bf3f1d7709453b1feb38adf8594b7f58710f + EXKeepAwake: bf48d7f740a5cd2befed6cf9a49911d385c6c47d + Expo: 534e51e607aba8229293297da5585f4b26f50fa1 + ExpoLinearGradient: fd591c223c81f6779036ed4cef4deb20ecb87c50 + ExpoModulesCore: 32c0ccb47f477d330ee93db72505380adf0de09a FBLazyVector: de148e8310b8b878db304ceea2fec13f2c02e3a0 FBReactNativeSpec: 6192956c9e346013d5f1809ba049af720b11c6a4 Flipper: a8ba108d0222a569c0b7b8762f3920ac7dca7d4b @@ -971,6 +962,7 @@ SPEC CHECKSUMS: glog: 5337263514dd6f09803962437687240c5dc39aa4 hermes-engine: bf7577d12ac6ccf53ab8b5af3c6ccf0dd8458c5c iOSPhotoEditor: 0f36d2c064d2999b7f4cd20c9db679581d24f7bf + JWT: ef71dfb03e1f842081e64dc42eef0e164f35d251 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc lottie-ios: 48fac6be217c76937e36e340e2d09cf7b10b7f5f @@ -1002,10 +994,10 @@ SPEC CHECKSUMS: react-native-cookies: cd92f3824ed1e32a20802e8185101e14bb5b76da react-native-image-filter-kit: d79137549eb44f8215b7f2be5e77213f605e2c92 react-native-measure-text-size: df17d060f981d8ec652aa3118e37322bd7019bd5 - react-native-mmkv-storage: 97ec49dd76cd9823120376677f59f34508ebf708 + react-native-mmkv-storage: 88bcb10bbe85a8122061d17d03abcc64a02fe1c9 react-native-month-year-picker: 2f00a9c261a86a39e14cafd02f4c319ac0fe7fe6 react-native-netinfo: 30fb89fa913c342be82a887b56e96be6d71201dd - react-native-notifications: b67765827723f605d9267922977c8b0ad93e96ee + react-native-notifications: a6ffe0a53e17a3b60fe71cdea6483c122ae058c0 react-native-orientation-locker: 998c0744e26624407dac068c04c605b4af7304a2 react-native-performance: 6bd6cfac80594775fb782405fceaaf206becf53b react-native-randombytes: b6677f7d495c27e9ee0dbd77ebc97b3c59173729 @@ -1034,15 +1026,15 @@ SPEC CHECKSUMS: RNDeviceInfo: 0400a6d0c94186d1120c3cbd97b23abc022187a9 RNFastImage: 811ade1ec186fa437ff92bd189dd6721c0ed11d9 RNFS: 3ab21fa6c56d65566d1fb26c2228e2b6132e5e32 - RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211 + RNGestureHandler: 4f4986408310a43f1606c391f38f76e0d6e790d5 RNImageColors: 5bb550d397934b18a55b8beec2af683bb9432898 RNImageCropPicker: 448d3c6e923fde3466b49caf3c2457c2a0ba02dd RNInAppBrowser: 3ff3a3b8f458aaf25aaee879d057352862edf357 RNLocalize: 7c7aeda16c01db7a0918981c14875c0a53be9b79 RNPermissions: c46788f4cd402287425983e04a4c9bb4356036eb RNPhotoEditor: 2a4c8501057612652c0badcd5e23c435d5c2c8cd - RNReanimated: d41fa04bb5d2057d3115db666d3a73a7cbc90b79 - RNScreens: 6e1ea5787989f92b0671049b808aef64fa1ef98c + RNReanimated: 58b57be69a237fb02ec8099d25171057638cf41a + RNScreens: d6da2b9e29cf523832c2542f47bf1287318b1868 RNSentry: a2b02b326ae4fce91ce7c57d3f7dcf8df4f72269 RNShare: edd621a71124961e29a7ba43a84bd1c6f9980d88 RNSharedElement: 87baf6d04da5b068f000dd8c953d28a1196999c0 @@ -1055,15 +1047,12 @@ SPEC CHECKSUMS: Sentry: 89d26e036063b9cb9caa59b6951dd2f8277aa13b SnowplowTracker: 2eee2d6606a60db98f7c4e1515499bb216b6c8ad SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 + SSZipArchive: 62d4947b08730e4cda640473b0066d209ff033c9 TOCropViewController: 3105367e808b7d3d886a74ff59bf4804e7d3ab38 - UMAppLoader: 21af63390e55c82e037fb9752d93114a80ecf16e - UMCore: ce3a4faa010239063b8343895b29a6d97b01069d - UMReactNativeAdapter: d03cefd0e4e4179ab8c490408589f1c8a6c8b785 - UMTaskManagerInterface: 2be431101b73604e64fbfffcf759336f9d8fccbb - VisionCamera: e3f4eea37f32f9a2ab40ce560940174a5258abaf + VisionCamera: 2103a8a09baa162a77951037b66d47c0926c48d9 Yoga: 32a18c0e845e185f4a2a66ec76e1fd1f958f22fa YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: a0d2f52c6578f0a95a860c82fd1c798e456d97b0 +PODFILE CHECKSUM: 136d8d4317f5c084b85a9581df180d278e8c28a5 -COCOAPODS: 1.11.2 +COCOAPODS: 1.11.3 diff --git a/ios/Share/Info.plist b/ios/Share/Info.plist index 7b6e15058..1e7fc1a15 100644 --- a/ios/Share/Info.plist +++ b/ios/Share/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 4.22.0 + 4.24.0 CFBundleVersion $(CURRENT_PROJECT_VERSION) HostAppBundleIdentifier @@ -47,6 +47,8 @@ NSExtensionActivationSupportsWebURLWithMaxCount 1 + NSExtensionActivationSupportsMovieWithMaxCount + 1 NSExtensionMainStoryboard diff --git a/ios/releases.json b/ios/releases.json index 4baa92e8e..04c8f739d 100644 --- a/ios/releases.json +++ b/ios/releases.json @@ -1,739 +1,246 @@ { "versions": [ { - "version": "4.14.2", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-14-2.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.14.2", - "changelog": ["Fix push notification settings"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "4ae478c5ac2f5dd7e1d3ae92a9220aee" - }, - { - "type": "sha256", - "value": "54cc3df1d8b52f0a632c97ee6fef320bd5530bf4d1c91fee8dad1f49bd17a2c3" - }, - { - "type": "sha512", - "value": "d58327863afb4816a1c22b4bdb77bc355bfb1f1e1553cf53e16b872dad97b30e51597e7372207647cf37ba1b808ecee11cf4f1e85be1efb906fbbd6bdff16c1a" - } - ] - }, - { - "version": "4.14.0", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-14-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.14.0", + "version": "4.23.0", + "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-23-0.apk", + "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.23.0", "changelog": [ - "New notifications", - "Interaction details", - "Translation support added to comments", - "Bug fixing" + "Fix hashtag navigation error", + "Cleans up feature flag logic", + "New toaster notifications", + "Unverified email toaster added", + "Improved transitions when opening multiple bottom sheets", + "Fix Minds+ screen errors", + "Fix some navigation issues with the interactions bottom sheets", + "Fix onboarding tag selector visual an functional issues", + "Fix posts visibility option when creating a post", + "Fix groups posts visible on the main newsfeed", + "Added custom API URL to dev tools", + "Makes dev tools accessible on production mode by tapping multiple times hidden parts of the app", + "Fix the auto login password reset flow is completed", + "Fix group's search issues", + "Adds a password show option to all the password fields of the app", + "Standardize the user lists components", + "Update the local storage package", + "Fix the delete post error for admins when deleting a remind", + "Improves the UX on feeds by loading next page before we reach the end", + "Fix notification count issues", + "Enable react-freeze, that improves the performance by freezing screens that are not visible", + "Fix loading state indicators in comments", + "Fix password confirmation when changing email", + "Improved UX for onboarding channel setup", + "Better rate limit message for the user when resetting the password", + "Allow to verify email only once", + "Fix trending analytics screen errors", + "Remove full screen view for NSFW images when forbidden", + "Improve validation/error messages on the change password screen" ], "unstable": false, "hashes": [ { "type": "md5", - "value": "5c5890d618ff759e09d11e29770acf63" + "value": "50463d824e742027ed108e3bf9062c87" }, { "type": "sha256", - "value": "e110bcece4dd068ee2db7bb8198ac5043736a5646ca86bd451dc5bb6ff187ba7" + "value": "19dbbb9ee7ac86c6d64ab953c8e953d4e4804f886e501f9182bdb9a5459d8b81" }, { "type": "sha512", - "value": "60ea30d61b7ec1a4250b942b26d5b42e7e5d9729d84c7db70d845b93422b6eb51806c30058bbce4ec22b1677fcd6b2e9166e119ae55f311e77ff4bb1e82b6025" + "value": "2a8f3ed10d9a7ff12208cc84daf50900c3aa28a3f93c56add86ff5d9f2ae62f3fce6d64b4ab56d32a030548d9ef4ff8c4b5ccb70cdc05ae3186a9e9be4f32be5" } ] }, { - "version": "4.13.0", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-13-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.13.0", + "version": "4.22.3", + "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-22-3.apk", + "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.22.3", "changelog": [ - "Performance improvements", - "Media attachment can now be edited on comments", - "Allow exporting legacy wallets more than once", - "Scroll added to the main menu for small screens", - "Bug fixing" + "Fix crash when translating post", + "Fix issues switching users", + "Fix some onboarding layout problems", + "Fix symbols not allowed in username input" ], "unstable": false, "hashes": [ { "type": "md5", - "value": "a2e4530a1d71f29eb66c7e37b1074dd7" + "value": "5bcca7bcdabdf153e05bb2b0d21457db" }, { "type": "sha256", - "value": "02db2c461bc45f8724a4e94ce63b5d4aa77866b0425ecc3946803035cb2434de" + "value": "198aa642961d1571a8531e078a13cadc15f5b740261e8233a5c86d05bd832e02" }, { "type": "sha512", - "value": "e0d5236c5e566c4cb7b843ef90724e1d3d3052399103dffbc79343e9300d47a717a7ef8d733197048269050931f040811f267ffacce54583f4b0d6a28bd5a24c" + "value": "b601349e623117f1f9075dc90d87de72bfaee652ea66cc364fc59a5aad5752728f12a8a053d13a9bb827ad41de325ccd2b4aaf89ffc4cbaa33aa3c6ffd96bdc5" } ] }, { - "version": "4.11.1", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-11-1.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.11.1", - "changelog": ["Bug fixing"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "edd596a263e1ad75cddb261543fb5f23" - }, - { - "type": "sha256", - "value": "81415860567bfb44d632a8a7cd39421c32dd3846c4ce506e9e26dd44de620321" - }, - { - "type": "sha512", - "value": "873da1a3ae6f2e2ea0bc6ead2920794dd3b672261f63d4432621347c2842a42e840f4f849c5574e98a9feaa9ea09266e95ddfa713a077db562c3f5c8146ed545" - } - ] - }, - { - "version": "4.11.0", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-11-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.11.0", + "version": "4.22.0", + "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-22-0.apk", + "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.22.0", "changelog": [ - "Channel screen styling improvements", - "Updated react-native to 0.64", - "Bug fixing" + "Twitter sync added", + "Channel recommendations added to the feed", + "Top/Latest feed", + "Login/Register creative/UX", + "Adds support for Blurhash in SmartImage (blurred placeholder while loading images)", + "Add top discovery tab and add collapsible header to the discovery screen", + "Bottom sheets can now be closed with the back button on Android devices", + "Updates the camera package, disable frame processors (improve performance), and bump android target SDK", + "Use growthbook react and use new event for experiments", + "Development tools implemented: Analog to the growthbook chrome extension and to manage canary/staging options in dev mode", + "Fix comments count propagation (replies)", + "Standardize the keyboard handling", + "Update reanimated library to 2.4.1", + "Fix group deep linking and in-app linking", + "Fix Billing settings", + "Fix devices sleeps recording a video", + "Fix portrait bar initial load", + "Fix CI for play store deployment and update Fastlane", + "Fix tokens transactions list date localization", + "Fix notifications blurred thumbnail error", + "Fix share post option (Android)", + "Fix missing translations", + "Fix growthbook attribute on logout", + "Fix the feed pagination and update safe area package", + "Fix make admin options in groups", + "Fix notifications settings fail to load", + "Removes legacy storage and code cleanup", + "Fix remove pin option in main newsfeed", + "Fix Activity indicator position and topbar border", + "Fix android build error (due to photo editor package)", + "Refactor and remove old composer code", + "Fix comment report navigation", + "Fix phone verification textbox reachability", + "Adds support for spec tests in components folder", + "Fix share to minds image preview on android", + "Fix share to minds on iOS", + "Fix social compass sliders on iOS" ], "unstable": false, "hashes": [ { "type": "md5", - "value": "3efa64bcbec29196d42fb01c8c1acbf4" - }, - { - "type": "sha256", - "value": "bab57ae5ae1afe149eda3bfc5b15cb54b24449fdf6a7d9d8705709518957a93c" - }, - { - "type": "sha512", - "value": "4928f967e9bef4f490a0e8e7715d7940b4475555295d92af4b303c7d153a44e1122b1226fd51d7eaa9ce1c91ac5201b6c877e382631581f3e6d769da9390bc2c" - } - ] - }, - { - "version": "4.9.1", - "href": "https://cdn-assets.minds.com/android/Minds-stable-4-9-1.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.9.1", - "changelog": ["Bug fixing"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "4e667ba7b4c5985e35a5ecc85184b492" - }, - { - "type": "sha256", - "value": "cfe9c4909a555a4544944ca3758d97bbf178fc3772f2f103014088446f776979" - }, - { - "type": "sha512", - "value": "7a15a6f644731f0d8137942eef7336c8cf83abfc0d66d7d87e26520839457ea54673f2fe41483923aa137b8b4fc787e3641cd74024b0cb25c7dc9a0243351827" - } - ] - }, - { - "version": "4.9.0", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-9-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.9.0", - "changelog": ["Changelog here"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "b15445bab1cb64d97ee89cd0fc67860d" - }, - { - "type": "sha256", - "value": "81934c74c56815400fce7c45ce9e7669b54256a5e792d73e19e19388434d6a09" - }, - { - "type": "sha512", - "value": "7db6056d0febcf0773f02271434faebeaa23d3b677ee0b2e0751374870b4eef536853806de5746843c3e6585467ee7b3faddf5ffa0ec6b86cd570a0684702c20" - } - ] - }, - { - "version": "4.8.2", - "href": "https://cdn-assets.minds.com/android/Minds-stable-4-8-2.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.8.2", - "changelog": ["Changelog here"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "64c926619a11b49e73e5ab3ab1f8928f" - }, - { - "type": "sha256", - "value": "602c32a79caa1037c2f42c3daec34b57b569914b3c7a7d4f05aa4b9a8b544035" - }, - { - "type": "sha512", - "value": "4a4f56acff8a88f3750ba8c878fb8525033cf84ea1df7a80aa083a680c4978154ab289dfa57ddf650b0bcf580408c748a66b91976d5039852fc4539acb6d9d64" - } - ] - }, - { - "version": "4.8.1", - "href": "https://cdn-assets.minds.com/android/Minds-stable-4-8-1.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.8.1", - "changelog": ["Bug fixing"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "f3b781744e43eafb3a4480b32dec96f9" - }, - { - "type": "sha256", - "value": "9f5de53dc3767c48314f80e34b04e0af9166c0c7b33093756ebcf1f45dceac27" - }, - { - "type": "sha512", - "value": "da6b718adf98a5ec71f71f9a6fee1d990dd20906afddde19c11c611738fa8152ace99816b737c274bbaddc7c92062cfcb721582f2342a63aef069bc932e7a983" - } - ] - }, - { - "version": "4.8.0", - "href": "https://cdn-assets.minds.com/android/Minds-stable-4-8-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.8.0", - "changelog": ["Comments and boost screen redesign", "Bug fixing"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "ce6b2b023ae4e74efb48f007f6277b4b" - }, - { - "type": "sha256", - "value": "baf15bbfc0d8218a5d6bbe0af3df1740f8fb59ef9b4753ca1ff7a3278c00401d" - }, - { - "type": "sha512", - "value": "3f2bfad2e387d4ba0683273324d7ade53900876d5ee1b77d5a2b33f642ae89371b7d1d0c9c84b85b5bfcf9184eb1c900b6b95b6a5bf0d467d23249009ed0e779" - } - ] - }, - { - "version": "4.7.1", - "href": "https://cdn-assets.minds.com/android/Minds-stable-4-7-1.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.7.1", - "changelog": ["Fixes media upload errors", "Email verification banner"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "161e0db23445b705e0ffab726bda95e9" - }, - { - "type": "sha256", - "value": "3d50c3c841bffb14b29d027ca7b3632a4333dcb57e5f21c57c6e7e96e9c93f17" - }, - { - "type": "sha512", - "value": "24d009f68ac2d7fcd971aa729075cd20929f25e0226d8eae60046b95ae69593cc5f97ecf4ca302c6848aa35a63b104ee6bb7e31f71a268a4d945f0adfd1ca2b9" - } - ] - }, - { - "version": "4.7.0", - "href": "https://cdn-assets.minds.com/android/Minds-stable-4-7-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.7.0", - "changelog": [ - "Data saver", - "Posts restyled", - "Improved channel header", - "New onboarding", - "Bug fixing" - ], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "5309e5ac74fae2346fe7004c8430e355" - }, - { - "type": "sha256", - "value": "99c5d52cc906d4a84492da8a9b5da4585643fbd58122fb754c99406c898f111c" - }, - { - "type": "sha512", - "value": "e275ba988698f0db372197cd675c8f0b561825418efee8779b4ef9c3d61b05b8233a0560b857f5d791aabc5301f81eb2c91fc10ffe776fc50804c9e7cc1ee3b7" - } - ] - }, - { - "version": "4.6.0", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-6-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.6.0", - "changelog": [ - "New onboarding", - "New theme palette", - "Search in channels", - "Remind/Quote", - "Membership tab in channel screen", - "Support for hashtags in posts text" - ], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "90356578f6337a381b408468b5cb0022" - }, - { - "type": "sha256", - "value": "2d354325b4b8e733618811761304d4764390109011d469ef9e606ca4a422054c" - }, - { - "type": "sha512", - "value": "a75ddc1db05fa0e4e314bb823b5ae6686cb795a4d1caabed54ba82e37a700c67332288592ba98faa9a4e9d35f757a83d61fc1fbec8c00e04749fd3420f4f1033" - } - ] - }, - { - "version": "4.5.1", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-5-1.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.5.1", - "changelog": ["Bug fixing"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "b29f52c4c76b3d11b9b7506053515f22" - }, - { - "type": "sha256", - "value": "179aeb16ead5859a99bddc02cbe2e4e8e63a7467dbab35c968c21d4d99a4e253" - }, - { - "type": "sha512", - "value": "036fb426bf97169a65a72c04e82e87664c4c5317cf6b70691c953fd996ee52037fa119a184988a71ce5c1b6cb3b7dd8fd3bb69d399bc81dea5ff8832ab434d98" - } - ] - }, - { - "version": "4.5.0", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-5-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.5.0", - "changelog": [ - "New portrait media feed.", - "New login and register screens", - "Post to Permaweb", - "Image editor", - "Referrals", - "Analytics", - "Improved video player controls and logic", - "Improved comments UI", - "Deep linking", - "New JS engine", - "Smaller APK", - "Many bug fixes and other improvements" - ], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "9def6b3419a6112d4d7fc3d0705c2b63" - }, - { - "type": "sha256", - "value": "fd619b4c4291394e160dc5630fb19a9b13e8a39ec5ebe0d62641bb40507713c4" - }, - { - "type": "sha512", - "value": "5896c56ce6b7310ff3f76714254a4b6ce65f61f8e4e16dd67a5556134d938b56cc52ea84908e19fd0ede213398fb94902ef6934f9a674d3c9a5bde79056622bc" - } - ] - }, - { - "version": "4.4.2", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-4-2.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.4.2", - "changelog": ["Bug fixes"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "da43017104c5ef935cc3658f5eaaf340" + "value": "079a1e586081c9d66b533fc5a7188df2" }, { "type": "sha256", - "value": "c69834c049ac3b992b95931353896f48fda8b944052527d3889595d76f0e17b3" + "value": "5666e0c94c658093bfd666a934653589d6eaeff09186d46f594015a312ec0058" }, { "type": "sha512", - "value": "c89cf5442764e952d523badd99ead4af5051950d50d187c77a0330c3f72311c3cbe8c4316a6fd62dbd3d3b8c890e06c157848559dea55ba6523a3ddc71fc783b" + "value": "9d8904d9c19d0415f64fda1260d87fff8c038e2e107fb314de892699ffc097bba4fc3ecc5b019506a41ca2fa8ee7abf4cca8e993f27e806746b451cbd0493f7f" } ] }, { - "version": "4.4.1", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-4-1.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.4.1", + "version": "4.20.1", + "href": "https://cdn-assets.minds.com/android/Minds-stable-4-20-1.apk", + "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.20.1", "changelog": ["Bug fixing"], "unstable": false, "hashes": [ { "type": "md5", - "value": "7502aeafaffe7067ad3a4ab1238d9f1d" + "value": "a65341a02eb7d99c74660630c97dfef5" }, { "type": "sha256", - "value": "e12ef0f6651c24929ee394d49ea462307822dcc614c6e5a14f7fcdbbff6aa80e" + "value": "0310a27daac0e8427713510c74288d1d264555f8abc6a3fa7032cd13130a78d8" }, { "type": "sha512", - "value": "8a01e8c8980b8702e9e01924ee2034d40cde2e24edc122d09f49b97762d1cb86db669a86108f352e9d57b94938714cca965b615a178c5f189d1b2b77f14406b5" + "value": "946a18de8bb64e2d4a966ea49ad5db6cf6975309f28d7e04d5f6b7b43876e91d6287c91b01f032a2618e799b9610d0a22ce595ca1dc0aea02e5bb544c92f9aaa" } ] }, { - "version": "4.4.0", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-4-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.4.0", + "version": "4.19.1", + "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-19-1.apk", + "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.19.1", "changelog": [ - "New side menu", - "New video player", - "Video auto-play support added", - "Better support for portrait content", - "Hold tap to copy the text of a post", - "Search bar enhancement", - "Improved post compose screen", - "Many UI improvement and bug fixes" + "Fix unresponsive UI in some Android devices", + "Fix discovery visual errors" ], "unstable": false, "hashes": [ { "type": "md5", - "value": "1b2de257983afebd7af65d9cab19346f" + "value": "a486e2d72abcaaba6f401df4da3a42b4" }, { "type": "sha256", - "value": "76e8cf9e792123aa09c5cb4d8b397436e1eb1eb17f5de90af80f9ff56ba32437" + "value": "9b939ac18c1a1ae2700ff5a63028dd29cd16719e7c7d97844a148626f3f6608f" }, { "type": "sha512", - "value": "8a91e9f6bd07a30077fc8548527472aaeb38dac62a9dc3f04196b9c64bea9725f010496ae3346eeb7007ab2c3bfd76422b8e16df4d2f1ec15055e209f3505980" + "value": "ae8ad4aa92e3ce4213c13b56b18e4e0216415d25b9ba7160fdb5e02de5315cab141a6581a5a6e9c574a30574de8548d93ed0b7c14a4dcde8f49759cc4a72282d" } ] }, { - "version": "4.2.1", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-2-1.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.2.1", - "changelog": ["Bug fixing"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "19d999928d067e7531a2ab15bfb509db" - }, - { - "type": "sha256", - "value": "9b3898ac341f3cf22b8bc69195fe23fb3ba71cf65a8a4705f012b9744004c491" - }, - { - "type": "sha512", - "value": "14a3668e7b52ba57428e36dc9d7416a20e8fcfb4bab1b6b27d385ea45bd9b2a57a1574d5b75607ba6127624e784c7e7a176cbba1b5fe28c72f7aa25d81b69684" - } - ] - }, - { - "version": "4.2.0", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-2-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.2.0", - "changelog": ["Full-screen post swiper", "New discovery", "Bug fixing"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "7fbdada7371d73c8e845cb0b1cb4fb62" - }, - { - "type": "sha256", - "value": "1ed115c755262559d659e3f5e57124af908945998b2e172701445b3e5c94aebb" - }, - { - "type": "sha512", - "value": "7b2e32b1785602f901fa3798f49f80b6113b71ce129eae20d9a8d3dd134da25d4c5ccb4657becc662a760ad6d39db84a1349a87659a537412fbec1ead2d71f76" - } - ] - }, - { - "version": "4.1.1", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-1-1.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.1.1", - "changelog": ["Bug fixing"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "c9e387468e94de7749a887a6651ef94f" - }, - { - "type": "sha256", - "value": "48511f4f4820b108b437f3265cb234d41cc4a3789403c8122463ec1675427631" - }, - { - "type": "sha512", - "value": "d0f74f1a1a8d15e26d3e4cd0cb2082014afc4a9bfae5838735dc2226c33d212eba1a7c60aecf317b98bf2ea420a24d23aa4c15af17b4fe084252d777ea55e307" - } - ] - }, - { - "version": "4.1.0", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-1-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.1.0", - "changelog": ["New compose screen", "Swipe navigation", "Bug fixing"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "80b95e962dc45521c6a51b7c9595b835" - }, - { - "type": "sha256", - "value": "cf2eddf52503f836d4569be1e5bfd124aae1c208a84a6b5c65bb77e10722da92" - }, - { - "type": "sha512", - "value": "73aa34d6cf4356e0d8c2a392b39bc863c8f45a1eb5eb34a3d8be3224820881f9e2ee893df5d37466b0bb4aab25caea5c4dd19d46ce829bafd15c35eacd400efc" - } - ] - }, - { - "version": "4.0.3", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-0-3.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.0.3", - "changelog": ["Bug fixing"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "636eab40382a9dbc6ba35ef7fb0c136f" - }, - { - "type": "sha256", - "value": "04feb1c473ed38422b5b99132dc60967de0655ea8ed2904e24b66cfec39cc8e1" - }, - { - "type": "sha512", - "value": "b2bd9cfca5b5dd8f8e921c39159cf3c33a637ea315622f5856aafff19b8c1d8589913a9859ffb14171ec9b572807dd697cc761724a08439ef470c2b1e7d3cab9" - } - ] - }, - { - "version": "4.0.2", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-0-2.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.0.2", - "changelog": ["Bug fixing"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "7a12ed209f11406b36955661ef4839a0" - }, - { - "type": "sha256", - "value": "7f3455f74f548c8999a40f4cada55baab41bb4f96ffd259b21c8ecf43a93d0fe" - }, - { - "type": "sha512", - "value": "d614fcfdccf9e90d583eccab011ee3096be5ea58c10daf5c171cb8c54efbd4b228871e97072685ca06b0b626edf0d4f6d9226bbbc9cbe6644a9168d1c48150e5" - } - ] - }, - { - "version": "4.0.1", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-0-1.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.0.1", - "changelog": ["Bug fixing"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "0ed9d9fbf4f8e76a105fabe389cd14c9" - }, - { - "type": "sha256", - "value": "3d60ca7cd38ac7876c0adf68a563ca4c1586e6227eb3f5132f58942cfcee7bfe" - }, - { - "type": "sha512", - "value": "a1bea4a5d06404e9631a5aa3b9944ca6be83d4a734a335d38e0da14225a5c8dd89237ceac8513c538777d2530b358d65b69752d3d62287904cfdedbb7d1d46ed" - } - ] - }, - { - "version": "4.0.0", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-0-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.0.0", - "changelog": ["Dark theme", "Performance improvements", "Bug fixes"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "ca4aa8a8b6335085a346750cd425c30f" - }, - { - "type": "sha256", - "value": "7d77f074df3b0a71d69a8461aad2641657ef943b0a68f2c22851d619dade6dd4" - }, - { - "type": "sha512", - "value": "6acaed136a090cd7e13812f9b5ac3336e6ca88950f8115a29c0691f7c0e779fb2a5b7e74ff45c52417bb26f005b435f61e061c1f9f0853ac76b954bf49dc76fe" - } - ] - }, - { - "version": "3.15.1", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-3-15-1.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v3.15.1", - "changelog": ["New Onboarding", "Bug fixes"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "cb074faeca700b836655ad0fd0d854bb" - }, - { - "type": "sha256", - "value": "97e0f6721abce3fbff40ec78b6d833b08aa8e20e88ee800d286010348a61e363" - }, - { - "type": "sha512", - "value": "1e2dd0fccf7b9c375e84a5ea75c040c691f34175271a644d982de3fc7d1831c9fe1ce641f1f73367959ae0ebe4da9a67d52cdf7a91cd9a5a18547cea0c131fc2" - } - ] - }, - { - "version": "3.15.0", - "href": "https://cdn-assets.minds.com/mobile/Minds-stable-3-15-0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v3.15.0", - "changelog": ["New login and register screens", "Bug fixes"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "0b41d23037645b7f3eb033c1f617da6a" - }, - { - "type": "sha256", - "value": "f069afcaef9527921fff54194734b62da77756610228a7590a98e29d6f159462" - }, - { - "type": "sha512", - "value": "0e6606c99855e173ddc1e62d716684a920e7cec4433bdce8495e0216fa3c0e61cb5ff1abd9dd5cb265764f81bfb6518a37764a645f02350083cc44cb19c60f43" - } - ] - }, - { - "version": "3.14.0", - "timestamp": 1576783681, - "href": "https://cdn-assets.minds.com/android/minds-3_14_0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v3.14.0", - "changelog": ["Updated translations", "Slovak added", "Bug Fixes"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "51752323a92a4a8199f2f8d716e99f2c" - }, - { - "type": "sha256", - "value": "476b1f623dc8d6e6d5e86e0d4c3c865a872a3b2958ad57034e944cb5d8477064" - }, - { - "type": "sha512", - "value": "f57d69ae5f25394fdeb40fbdae48001712780302c02f899a6cf9d5c481ecec59eaf8381ae0f3a8738b6cbb614a062e9fd9ad1ec1af3850fcecb3051eaac3a842" - } - ] - }, - { - "version": "3.12.1", - "timestamp": 1576077180, - "href": "https://cdn-assets.minds.com/android/minds-3_12_1.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v3.12.1", - "changelog": ["Bug Fixes"], - "unstable": false, - "hashes": [ - { - "type": "md5", - "value": "5113756e870324c67ce8fec8787653a7" - }, - { - "type": "sha256", - "value": "feae8d372c93da18103e268a4bd192c7fd03b94f3dee8deaeb15f9442c4c7742" - }, - { - "type": "sha512", - "value": "66f465155f45a837fedafa9918d6f9bcaba64e272b9d33720ae379f714ab25b3d631f0d5ff455985cc0ca4b417b8e7f054db4c548e1241cbf6655e277434043c" - } - ] - }, - { - "version": "3.12.0", - "timestamp": 1575340091, - "href": "https://cdn-assets.minds.com/android/minds-3_12_0.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v3.12.0", + "version": "4.19.0", + "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-19-0.apk", + "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.19.0", "changelog": [ - "React Native updated v0.61.4", - "Code clean up and performance improvements", - "Jitsi SDK updated", - "Fixed push notification router for iOS", - "New gathering screen", - "Bug Fixes" + "Improved multi-user transitions", + "New welcome, login, and register screens", + "Improves error handling on the login screen", + "New camera with zoom, HDR, and low light modes", + "Help & support added.", + "Improved UI consistency", + "Improved 2FA settings screen", + "Fix camera issues", + "Fix push notification navigation and un-registering", + "Fix link navigation in the blog viewer", + "Fix issues with the android back button", + "Fix data saver crash", + "Compress the images to improve the upload speed", + "General bug fixing" ], "unstable": false, "hashes": [ { "type": "md5", - "value": "5f8ec4ec9b893f12505bd5e3f7392713" + "value": "b252a344ab667e13d88a6152e4ff4105" }, { "type": "sha256", - "value": "2b94fccf353c107ce1db8d74fcceec48f4de88176572fff1a69b66dbab949699" + "value": "531fd437372eeba831151aba13c13cad058351ad0872c6e340c7675a956c8fdc" }, { "type": "sha512", - "value": "365a7ff04d301300cbd31d36598ce35032dd71fea74591781cb5987cfb375d80d93973e90f4efd9342ccd6546af6f1fe0be5caecac175e292fcf7cdcaec37253" + "value": "303cbd90c0f913b30cb3fcabda4033b6b0f112067fa8126249b6fa95538935d3ccb37b10174e11f8b4bb6c1df72337f5940eaa2a75f933ba4f29dd7c5ee4d844" } ] }, { - "version": "3.10.1", - "timestamp": 1569966871, - "href": "https://cdn-assets.minds.com/android/minds-3_10_1.apk", - "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v3.10.1", + "version": "4.18.0", + "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-18-0.apk", + "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.18.0", "changelog": [ - "Eth and credit card support on wire", - "Post scheduler", - "Bug fixes" + "Multi-user support", + "New camera with zoom, HDR, and low light modes.", + "Improved channel screen design", + "2FA modals", + "Bug fixing" ], "unstable": false, "hashes": [ { "type": "md5", - "value": "c7e591eb0b532dc01ad671b12e3f571a" + "value": "86a5bd35f85caf2e6c5f1045f455616e" }, { "type": "sha256", - "value": "bbb976fedc0ee15569d05b106db2bd8d624f5e18e558a27be53a4d8119e4eb54" + "value": "3c8a0763fb9b10b03bcdce7e5fc5dcb3a407ccd9839071c6e1ac2944cca96eb5" }, { "type": "sha512", - "value": "6eb5be8849206f45469038ca4380e407915ff4a5bd6f848ac87728dcb9496bdc32454141ca4d91132aab4fc0f93763600e2da3f04acf2d6ee04a41229da35c3f" + "value": "4786a0b4f4fd679186be5d7d0622aee32175c288640f2d000d112d142819359875168c3256326e8cc2d58a5d9a85e2b792b2cd2b00c845b9f7e5ec5b83f354d6" } ] } diff --git a/locales/aa.json b/locales/aa.json index 5b1758e52..bcce7bc24 100644 --- a/locales/aa.json +++ b/locales/aa.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ae.json b/locales/ae.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ae.json +++ b/locales/ae.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/af.json b/locales/af.json index 9f708e75f..968ccd306 100644 --- a/locales/af.json +++ b/locales/af.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ak.json b/locales/ak.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/ak.json +++ b/locales/ak.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/am.json b/locales/am.json index 9410ce8f8..76b23aa40 100644 --- a/locales/am.json +++ b/locales/am.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/an.json b/locales/an.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/an.json +++ b/locales/an.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ar.json b/locales/ar.json index acda31d9c..201f0b903 100644 --- a/locales/ar.json +++ b/locales/ar.json @@ -492,7 +492,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "تعليقات", "like": "التصويت", "tag": "الوسوم", diff --git a/locales/arn.json b/locales/arn.json index 9410ce8f8..76b23aa40 100644 --- a/locales/arn.json +++ b/locales/arn.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/as.json b/locales/as.json index 9410ce8f8..76b23aa40 100644 --- a/locales/as.json +++ b/locales/as.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ast.json b/locales/ast.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ast.json +++ b/locales/ast.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/az.json b/locales/az.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/az.json +++ b/locales/az.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/be.json b/locales/be.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/be.json +++ b/locales/be.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/bg.json b/locales/bg.json index 5c1f8875f..8d18562ac 100644 --- a/locales/bg.json +++ b/locales/bg.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/bn.json b/locales/bn.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/bn.json +++ b/locales/bn.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/bo.json b/locales/bo.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/bo.json +++ b/locales/bo.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/bs.json b/locales/bs.json index 8788a122f..cf240d257 100644 --- a/locales/bs.json +++ b/locales/bs.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ca.json b/locales/ca.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/ca.json +++ b/locales/ca.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/cs.json b/locales/cs.json index ce53e64d5..3ad88ca1a 100644 --- a/locales/cs.json +++ b/locales/cs.json @@ -375,7 +375,7 @@ "rewardsSummary": "Včera jste vydělali {{amount}} tokenů." }, "notificationSettings": { - "enableDisable": "Povolit a zakázat push oznámení", + "all": "Povolit a zakázat push oznámení", "comment": "Komentáře", "like": "Lajky", "tag": "Označení", diff --git a/locales/cy.json b/locales/cy.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/cy.json +++ b/locales/cy.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/da.json b/locales/da.json index 1b8f45ca9..58fc19975 100644 --- a/locales/da.json +++ b/locales/da.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/de.json b/locales/de.json index 206f62900..2fcecd437 100644 --- a/locales/de.json +++ b/locales/de.json @@ -492,7 +492,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "Kommentare", "like": "Stimmen", "tag": "Erwähnungen", diff --git a/locales/ee.json b/locales/ee.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ee.json +++ b/locales/ee.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/el.json b/locales/el.json index 10890d328..280212b13 100644 --- a/locales/el.json +++ b/locales/el.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/en.json b/locales/en.json index 183f1cc27..43e952061 100644 --- a/locales/en.json +++ b/locales/en.json @@ -75,7 +75,8 @@ "requestNewPassword": "To request a new password, enter your username", "requestNewPasswordSuccess": "We have sent an unlock code to your registered email address.", "invalidGrant": "Incorrect username/password. Please try again.", - "invalidPassword": "Incorrect password. Please try again.", + "invalidPassword": "Incorrect password", + "invalidPasswordDescription": "Password must match the criteria", "confirmPasswordError": "Passwords should match", "termsAcceptedError": "You should accept the terms and conditions", "promotions": "Receive exclusive promotions from Minds", @@ -103,6 +104,7 @@ "followInstuctions": "Follow the instructions contained within to continue the reset process.", "sendAgain": "Send email again", "waitMoment": "You have to wait 10 seconds after last time you've requested the email", + "rateLimit": "Too many attempts, please try again later", "newPassword": "Create a new password. You’ll use this to access your account." }, "multiUser": { @@ -322,7 +324,8 @@ }, "fabSend": "Send Tip", "fabPay": "Tip", - "share": "Share Channel" + "share": "Share Channel", + "userHasntPostedYet": "@{{username}} hasn't posted anything yet" }, "discovery": { "title": "Discovery", @@ -368,6 +371,7 @@ "enableConversations": "Enable conversations" }, "messenger": { + "errorDirectMessage": "Error sending direct message", "typeYourMessage": "Type your message...", "invited": "Invited", "invite": "Invite", @@ -392,7 +396,8 @@ "latestAction": "Enable Latest Posts", "topTitle": "Top posts enabled", "topDesc": "Priotitize the most engaged with posts at the top your newsfeed", - "topAction": "Enable Top Posts" + "topAction": "Enable Top Posts", + "seeLatestTitle": "See {{count}} latest posts" }, "comments": { "successRemoving": "Comment removed", @@ -511,7 +516,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", @@ -572,7 +577,7 @@ "label": "Terrorism" }, "2": { - "label": "Paedophilia" + "label": "Sexualization of minors" }, "3": { "label": "Extortion" @@ -584,7 +589,7 @@ "label": "Revenge Porn" }, "6": { - "label": "Sex trafficking" + "label": "Trafficking" } } }, @@ -609,7 +614,7 @@ } }, "3": { - "label": "Encourages or incites violence" + "label": "Incitement to violence" }, "4": { "label": "Harassment" @@ -618,13 +623,13 @@ "label": "Personal and confidential information" }, "7": { - "label": "Impersonates" + "label": "Impersonation" }, "8": { "label": "Spam" }, "10": { - "label": "Infringes my copyright" + "label": "Intellectual Property Violation" }, "11": { "label": "Another reason" @@ -639,7 +644,7 @@ "label": "Trademark infringement" }, "16": { - "label": "Token manipulation" + "label": "Inauthentic engagement" } }, "DMCA": "Please submit a DMCA notice to copyright@minds.com.", @@ -650,6 +655,7 @@ }, "settings": { "submit": "Submit", + "boostConsole": "Boost Console", "chooseBrowser": "Choose Browser", "chooseBrowserDescription": "Please choose where you want to open the external links.", "chooseBrowserHint": "This option can be changed from the settings", @@ -672,7 +678,7 @@ "deactivate": "Deactivate Account", "logout": "Logout", "errorSaving": "Error saving setting, please try again", - "passwordChanged": "Password changed succesfully.", + "passwordChanged": "Password changed successfully.", "keyGenerated": "Keys regenerated successfully!", "pushNotification": "Push Notifications", "regenerateKey": "Regenerate messenger keys", @@ -685,7 +691,7 @@ "network": "Network", "security": "Security", "billing": "Billing", - "invalidPassword": "Incorrect password", + "invalidPassword": "Insecure password", "passwordsNotMatch": "Passwords should match", "passwordFormatMinCharacters": "8 or more characters", "passwordFormatSpecialCharacters": "At least 1 special character", @@ -942,6 +948,7 @@ "phoneNumber": "Phone Number", "weJustSentCode": "We just sent the code to {{phone}} in order to verify that your number is correct.", "confirmationCode": "Confirmation Code", + "confirmationCodeInvalid": "Please enter a code", "welcomeNew": "Welcome to the Minds Community!", "welcomePrivacy": "Your privacy is our priority. You are free to provide as much or as little information as you wish for better recommendations and to connect with people in your local area.", "welcomeLater": "No thanks, I’ll do it later", @@ -968,7 +975,6 @@ "connectBank": "Connect Bank", "buyTokens": "Buy Tokens", "onboardingCompleted": "Now you can earn tokens", - "improvedExperience": "Your feed should be livelier!", "mustVerify": "Before you can start earning or purchase tokens, it is important that we can simply verify your uniqueness. The less tokens spammers take, the more that are left for you! To learn about how we keep your data private,", "codeSent": "Verification code sent to" }, @@ -1259,7 +1265,8 @@ "confirm": "Please confirm your email address.", "sendAgain": "Click here to send again.", "confirmNote": "Note: If you change your email address, it will need to be confirmed again.", - "sent": "Email sent" + "sent": "Email sent", + "alreadyConfirmed": "Email address already confirmed" }, "subtype": { "image": "image", @@ -1576,6 +1583,7 @@ "enabled": "Enabled", "copyToClipboard": "Copy to Clipboard", "emptyList": "Sorry the list is empty", + "nothingToSee": "Nothing to see here", "and": "and", "others": "others", "newMoment": "New Moment", diff --git a/locales/eo.json b/locales/eo.json index 9410ce8f8..76b23aa40 100644 --- a/locales/eo.json +++ b/locales/eo.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/es.json b/locales/es.json index f21b0c1ec..375fcd4e4 100644 --- a/locales/es.json +++ b/locales/es.json @@ -492,7 +492,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "Comentarios", "like": "Votos", "tag": "etiquetas", @@ -763,7 +763,7 @@ "a": "ADMIN DE CONTENTO", "a1": "Contenido reportado", "b": "CONTENCIA DE PAID", - "b1": "Gestión de niveles de suscripción", + "b1": "Membrecías", "b2": "Vista previa", "c": "CUENTA", "c2": "Borrar Canal", diff --git a/locales/et.json b/locales/et.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/et.json +++ b/locales/et.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/eu.json b/locales/eu.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/eu.json +++ b/locales/eu.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/fa.json b/locales/fa.json index 9410ce8f8..76b23aa40 100644 --- a/locales/fa.json +++ b/locales/fa.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/fi.json b/locales/fi.json index 9410ce8f8..76b23aa40 100644 --- a/locales/fi.json +++ b/locales/fi.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/fil.json b/locales/fil.json index 9410ce8f8..76b23aa40 100644 --- a/locales/fil.json +++ b/locales/fil.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/fj.json b/locales/fj.json index 9410ce8f8..76b23aa40 100644 --- a/locales/fj.json +++ b/locales/fj.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/fo.json b/locales/fo.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/fo.json +++ b/locales/fo.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/fr.json b/locales/fr.json index b4513c637..4ba30ddea 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -492,7 +492,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "Commentaires", "like": "Votes", "tag": "Tags", diff --git a/locales/frp.json b/locales/frp.json index 9410ce8f8..76b23aa40 100644 --- a/locales/frp.json +++ b/locales/frp.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ga.json b/locales/ga.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/ga.json +++ b/locales/ga.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/gd.json b/locales/gd.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/gd.json +++ b/locales/gd.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/got.json b/locales/got.json index 9410ce8f8..76b23aa40 100644 --- a/locales/got.json +++ b/locales/got.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/haw.json b/locales/haw.json index 9410ce8f8..76b23aa40 100644 --- a/locales/haw.json +++ b/locales/haw.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/he.json b/locales/he.json index 29b8465b8..63a956a73 100644 --- a/locales/he.json +++ b/locales/he.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/hi.json b/locales/hi.json index 15c9edd22..0daa9be5e 100644 --- a/locales/hi.json +++ b/locales/hi.json @@ -492,7 +492,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "टिप्पणियाँ", "like": "वोट", "tag": "टैग", diff --git a/locales/hr.json b/locales/hr.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/hr.json +++ b/locales/hr.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/hu.json b/locales/hu.json index d20a69127..6f30eadd5 100644 --- a/locales/hu.json +++ b/locales/hu.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/hy.json b/locales/hy.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/hy.json +++ b/locales/hy.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/it.json b/locales/it.json index 261af6546..8112a083a 100644 --- a/locales/it.json +++ b/locales/it.json @@ -492,7 +492,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "Commenti", "like": "Voti", "tag": "Tag", diff --git a/locales/ja.json b/locales/ja.json index f9c8a1762..0c03f29ec 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -492,7 +492,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "コメント", "like": "投票", "tag": "タグ", diff --git a/locales/ka.json b/locales/ka.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ka.json +++ b/locales/ka.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/kk.json b/locales/kk.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/kk.json +++ b/locales/kk.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ko.json b/locales/ko.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/la.json b/locales/la.json index 9410ce8f8..76b23aa40 100644 --- a/locales/la.json +++ b/locales/la.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/lt.json b/locales/lt.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/lt.json +++ b/locales/lt.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/mt.json b/locales/mt.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/mt.json +++ b/locales/mt.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/my.json b/locales/my.json index 9410ce8f8..76b23aa40 100644 --- a/locales/my.json +++ b/locales/my.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ne.json b/locales/ne.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/ne.json +++ b/locales/ne.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/nl.json b/locales/nl.json index 0bc9bc995..23c22d05c 100644 --- a/locales/nl.json +++ b/locales/nl.json @@ -375,7 +375,7 @@ "rewardsSummary": "Je hebt gisteren {{amount}} tokens verdiend." }, "notificationSettings": { - "enableDisable": "Push-meldingen in- en uitschakelen", + "all": "Push-meldingen in- en uitschakelen", "comment": "Opmerkingen", "like": "Stemming", "tag": "Labels", diff --git a/locales/no.json b/locales/no.json index 87b1fc9bf..46115a4a7 100644 --- a/locales/no.json +++ b/locales/no.json @@ -375,7 +375,7 @@ "rewardsSummary": "Du har tjent {{amount}} tokens i går." }, "notificationSettings": { - "enableDisable": "Aktiver og deaktiver push-meldinger", + "all": "Aktiver og deaktiver push-meldinger", "comment": "Kommentarer", "like": "Stemmer", "tag": "Tagger", diff --git a/locales/ny.json b/locales/ny.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ny.json +++ b/locales/ny.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/pa.json b/locales/pa.json index 9410ce8f8..76b23aa40 100644 --- a/locales/pa.json +++ b/locales/pa.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/pl.json b/locales/pl.json index 331c328d9..877b08792 100644 --- a/locales/pl.json +++ b/locales/pl.json @@ -375,7 +375,7 @@ "rewardsSummary": "Wczoraj zdobyłeś {{amount}} tokenów." }, "notificationSettings": { - "enableDisable": "Włącz i wyłącz powiadomienia push", + "all": "Włącz i wyłącz powiadomienia push", "comment": "Komentarze", "like": "Głosy", "tag": "Tagi", diff --git a/locales/pt.json b/locales/pt.json index c82b912db..2840c1a9f 100644 --- a/locales/pt.json +++ b/locales/pt.json @@ -492,7 +492,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "Comentários", "like": "Votos", "tag": "Etiquetas", diff --git a/locales/ro.json b/locales/ro.json index 405b78616..0a9b0d51a 100644 --- a/locales/ro.json +++ b/locales/ro.json @@ -375,7 +375,7 @@ "rewardsSummary": "Ai câștigat {{amount}} jetoane ieri." }, "notificationSettings": { - "enableDisable": "Activează și dezactivează notificările push", + "all": "Activează și dezactivează notificările push", "comment": "Comentarii", "like": "Voturi", "tag": "Etichete", diff --git a/locales/ru.json b/locales/ru.json index 039e96c40..3ef96beb3 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -492,7 +492,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "Комментарии", "like": "Лайки", "tag": "Теги", diff --git a/locales/sk.json b/locales/sk.json index f3396627e..a54bd0cbc 100644 --- a/locales/sk.json +++ b/locales/sk.json @@ -301,7 +301,7 @@ "rewardsStateDecrease1": "Váš multiplikátor denných tokenových odmien sa znížil na {{multiplier}}x" }, "notificationSettings": { - "enableDisable": "Zapnúť/vypnúť upozornenia", + "all": "Zapnúť/vypnúť upozornenia", "comment": "Komentáre", "like": "Hlasy", "tag": "Označenia", diff --git a/locales/sq.json b/locales/sq.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/sq.json +++ b/locales/sq.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/sr.json b/locales/sr.json index 30ff49bf1..6b650ae83 100644 --- a/locales/sr.json +++ b/locales/sr.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ss.json b/locales/ss.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ss.json +++ b/locales/ss.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/su.json b/locales/su.json index 9410ce8f8..76b23aa40 100644 --- a/locales/su.json +++ b/locales/su.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/sv.json b/locales/sv.json index 87081d811..e4d988122 100644 --- a/locales/sv.json +++ b/locales/sv.json @@ -375,7 +375,7 @@ "rewardsSummary": "Du tjänade {{amount}} tokens igår." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Kommentarer", "like": "Omröstning", "tag": "Taggar", diff --git a/locales/sw.json b/locales/sw.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/sw.json +++ b/locales/sw.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/syc.json b/locales/syc.json index 9410ce8f8..76b23aa40 100644 --- a/locales/syc.json +++ b/locales/syc.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ta.json b/locales/ta.json index 4bf2cc8f9..436d9463f 100644 --- a/locales/ta.json +++ b/locales/ta.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/tay.json b/locales/tay.json index 9410ce8f8..76b23aa40 100644 --- a/locales/tay.json +++ b/locales/tay.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/te.json b/locales/te.json index 9410ce8f8..76b23aa40 100644 --- a/locales/te.json +++ b/locales/te.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/tg.json b/locales/tg.json index 9410ce8f8..76b23aa40 100644 --- a/locales/tg.json +++ b/locales/tg.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/th.json b/locales/th.json index 5d0aff4ba..30f55fba0 100644 --- a/locales/th.json +++ b/locales/th.json @@ -492,7 +492,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "ความคิดเห็น", "like": "โหวต", "tag": "แท็ก", diff --git a/locales/ti.json b/locales/ti.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ti.json +++ b/locales/ti.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/tk.json b/locales/tk.json index 9410ce8f8..76b23aa40 100644 --- a/locales/tk.json +++ b/locales/tk.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/tl.json b/locales/tl.json index 9410ce8f8..76b23aa40 100644 --- a/locales/tl.json +++ b/locales/tl.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/tn.json b/locales/tn.json index 9410ce8f8..76b23aa40 100644 --- a/locales/tn.json +++ b/locales/tn.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/tr.json b/locales/tr.json index 63ae7d1db..a7697af2a 100644 --- a/locales/tr.json +++ b/locales/tr.json @@ -375,7 +375,7 @@ "rewardsSummary": "Dün {{amount}} token kazandınız." }, "notificationSettings": { - "enableDisable": "Anlık bildirimleri aç veya kapat", + "all": "Anlık bildirimleri aç veya kapat", "comment": "Yorumlar", "like": "Oylar", "tag": "Etiketler", diff --git a/locales/ts.json b/locales/ts.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ts.json +++ b/locales/ts.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/tt.json b/locales/tt.json index 9410ce8f8..76b23aa40 100644 --- a/locales/tt.json +++ b/locales/tt.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ty.json b/locales/ty.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ty.json +++ b/locales/ty.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/tzl.json b/locales/tzl.json index 9410ce8f8..76b23aa40 100644 --- a/locales/tzl.json +++ b/locales/tzl.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ug.json b/locales/ug.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ug.json +++ b/locales/ug.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/uk.json b/locales/uk.json index f07f5bd80..1e1a66d0d 100644 --- a/locales/uk.json +++ b/locales/uk.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Коментарі", "like": "Голоси", "tag": "Мітки", diff --git a/locales/ur.json b/locales/ur.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ur.json +++ b/locales/ur.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/uz.json b/locales/uz.json index 9410ce8f8..76b23aa40 100644 --- a/locales/uz.json +++ b/locales/uz.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/ve.json b/locales/ve.json index 9410ce8f8..76b23aa40 100644 --- a/locales/ve.json +++ b/locales/ve.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/vec.json b/locales/vec.json index 9410ce8f8..76b23aa40 100644 --- a/locales/vec.json +++ b/locales/vec.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/vi.json b/locales/vi.json index 7e2c297e3..c67b8dc30 100644 --- a/locales/vi.json +++ b/locales/vi.json @@ -492,7 +492,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "Bình luận", "like": "Bỏ phiếu", "tag": "Thẻ", diff --git a/locales/vls.json b/locales/vls.json index 3119fe261..66cb3ef8f 100644 --- a/locales/vls.json +++ b/locales/vls.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/wa.json b/locales/wa.json index 9410ce8f8..76b23aa40 100644 --- a/locales/wa.json +++ b/locales/wa.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/wo.json b/locales/wo.json index 9410ce8f8..76b23aa40 100644 --- a/locales/wo.json +++ b/locales/wo.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/xh.json b/locales/xh.json index 9410ce8f8..76b23aa40 100644 --- a/locales/xh.json +++ b/locales/xh.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/yi.json b/locales/yi.json index 9410ce8f8..76b23aa40 100644 --- a/locales/yi.json +++ b/locales/yi.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/yo.json b/locales/yo.json index 9410ce8f8..76b23aa40 100644 --- a/locales/yo.json +++ b/locales/yo.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/zea.json b/locales/zea.json index 9410ce8f8..76b23aa40 100644 --- a/locales/zea.json +++ b/locales/zea.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/locales/zh.json b/locales/zh.json index aed94dae8..eb4dea86f 100644 --- a/locales/zh.json +++ b/locales/zh.json @@ -492,7 +492,7 @@ } }, "notificationSettings": { - "enableDisable": "Enable Push Notifications", + "all": "Enable Push Notifications", "comment": "评论", "like": "投票", "tag": "标签", diff --git a/locales/zu.json b/locales/zu.json index 9410ce8f8..76b23aa40 100644 --- a/locales/zu.json +++ b/locales/zu.json @@ -375,7 +375,7 @@ "rewardsSummary": "You earned {{amount}} tokens yesterday." }, "notificationSettings": { - "enableDisable": "Enable and disable push notifications", + "all": "Enable and disable push notifications", "comment": "Comments", "like": "Votes", "tag": "Tags", diff --git a/package.json b/package.json index bbf14b81c..e5d558093 100644 --- a/package.json +++ b/package.json @@ -20,15 +20,22 @@ "postinstall": "jetify; patch-package;", "release-json": "node tasks/generate_release_json.js", "prepare": "husky install", - "check-prettier-version": "prettier -v" + "check-prettier-version": "prettier -v", + "test:real:ios": "wdio run e2e/test/conf/wdio.ios.conf.js", + "test:real:android": "wdio run e2e/test/conf/wdio.android.conf.js" }, "dependencies": { "@bigbee.dev/react-native-measure-text-size": "^1.0.0", "@flyerhq/react-native-android-uri-path": "^2.3.0", + "@formatjs/intl-getcanonicallocales": "^1.9.1", + "@formatjs/intl-locale": "^2.4.46", + "@formatjs/intl-numberformat": "^7.4.2", + "@formatjs/intl-pluralrules": "^4.3.2", "@gorhom/bottom-sheet": "^4.1.5", "@gorhom/portal": "^1.0.12", "@growthbook/growthbook-react": "^0.8.0", "@msantang78/react-native-pager": "^0.2.4", + "@msantang78/react-native-styled-toast": "^1.3.2", "@react-native-clipboard/clipboard": "^1.7.0", "@react-native-community/art": "^1.1.2", "@react-native-community/cameraroll": "^4.1.2", @@ -55,10 +62,10 @@ "crypto-js": "^3.1.9-1", "detox": "^18.18.1", "entities": "^2.0.0", - "expo": "^42.0.4", - "expo-av": "^9.2.3", - "expo-image-manipulator": "^9.2.2", - "expo-linear-gradient": "^9.2.0", + "expo": "^44.0.6", + "expo-av": "^10.2.1", + "expo-image-manipulator": "^10.2.1", + "expo-linear-gradient": "11.0.3", "i18n-js": "^3.8.0", "jest-circus": "^27.0.6", "jsonwebtoken": "^8.5.1", @@ -70,7 +77,7 @@ "mobx-utils": "^5.5.7", "moment": "^2.29.1", "moment-timezone": "^0.5.33", - "moti": "^0.16.1", + "moti": "^0.17.1", "node-libs-react-native": "^1.2.1", "observable-hooks": "^3.1.2", "patch-package": "^6.4.7", @@ -80,12 +87,12 @@ "pusher-js": "^7.0.2", "react": "17.0.2", "react-native": "0.66.3", - "react-native-animatable": "^1.3.3", "react-native-animated-spinkit": "^1.5.2", - "react-native-blurhash": "^1.1.5", + "react-native-blurhash": "^1.1.10", "react-native-bootsplash": "^3.2.4", "react-native-calendars": "^1.1268.0", "react-native-chart-kit": "^5.6.0", + "react-native-code-push": "^7.0.4", "react-native-collapsible": "^1.5.3", "react-native-config": "^1.4.5", "react-native-convert-ph-asset": "^1.0.3", @@ -94,24 +101,23 @@ "react-native-exception-handler": "^2.10.9", "react-native-fast-image": "msantang78/react-native-fast-image", "react-native-file-type": "^0.0.8", - "react-native-flash-message": "^0.1.23", "react-native-fs": "^2.18.0", - "react-native-gesture-handler": "^1.8.0", + "react-native-gesture-handler": "^2.4.1", "react-native-image-colors": "^1.3.1", "react-native-image-crop-picker": "^0.37.2", "react-native-image-filter-kit": "^0.8.0", "react-native-image-pan-zoom": "^2.1.12", "react-native-image-progress": "^1.1.1", - "react-native-inappbrowser-reborn": "^3.6.3", + "react-native-inappbrowser-reborn": "https://github.com/proyecto26/react-native-inappbrowser", "react-native-keyboard-aware-scroll-view": "^0.9.5", "react-native-localize": "^1.3.0", "react-native-material-menu": "^1.1.3", - "react-native-mmkv-storage": "^0.6.8", + "react-native-mmkv-storage": "^0.6.12", "react-native-modal": "^11.10.0", "react-native-modern-datepicker": "https://gitlab.com/minds/react-native-modern-datepicker.git", "react-native-month-year-picker": "^1.8.0", "react-native-navigation-bar-color": "^2.0.1", - "react-native-notifications": "Minds/react-native-notifications#09c0e3278ec966a46c329dda6f79b3659464387f", + "react-native-notifications": "Minds/react-native-notifications#6f0346948455d4e0a64fc379570a6a2aa61cb674", "react-native-orientation-locker": "^1.3.1", "react-native-performance": "^2.0.0", "react-native-permissions": "^3.0.4", @@ -121,12 +127,12 @@ "react-native-progress": "^4.0.3", "react-native-qrcode-svg": "^5.2.0", "react-native-randombytes": "^3.5.3", - "react-native-reanimated": "^2.4.1", + "react-native-reanimated": "^2.8.0", "react-native-reanimated-hooks": "^2.0.0", "react-native-reanimated-indicators": "^2.0.0", "react-native-redash": "^14.2.3", "react-native-safe-area-context": "^4.0.1", - "react-native-screens": "^3.8.0", + "react-native-screens": "^3.10.2", "react-native-send-intent": "msantang78/react-native-send-intent", "react-native-share": "^7.2.1", "react-native-share-menu": "^5.0.5", @@ -137,9 +143,8 @@ "react-native-switch-pro": "^1.0.4", "react-native-system-setting": "^1.7.6", "react-native-tab-view": "^3.1.1", - "react-native-unimodules": "^0.14.8", "react-native-vector-icons": "^7.1.0", - "react-native-vision-camera": "^2.12.0", + "react-native-vision-camera": "^2.13.1", "react-native-webview": "^11.14.0", "react-navigation-shared-element": "^5.0.0-alpha1", "rn-placeholder": "^3.0.1", @@ -147,6 +152,8 @@ "rne-modal-tooltip": "gist:b28c003d87c619674def0878473338a0", "rxjs": "^6.5.5", "socket.io-client": "^2.3.0", + "styled-components": "^5.3.3", + "styled-system": "^5.1.5", "tinycolor2": "^1.4.2", "tipsi-stripe": "9.1.4", "vm-browserify": "^1.1.2", @@ -161,14 +168,21 @@ "@react-native-community/eslint-config": "^0.0.5", "@testing-library/jest-native": "^3.3.0", "@testing-library/react-native": "^7.1.0", - "@types/jest": "^24.0.24", + "@types/jest": "^26.0.24", "@types/react-native": "^0.66.8", "@types/react-native-snap-carousel": "^3.8.1", "@types/react-test-renderer": "17.0.1", "@typescript-eslint/eslint-plugin": "^4.22.1", "@typescript-eslint/parser": "^4.22.1", + "@wdio/browserstack-service": "^7.19.5", + "@wdio/cli": "^7.19.6", + "@wdio/jasmine-framework": "^7.19.5", + "@wdio/local-runner": "^7.19.5", + "@wdio/spec-reporter": "^7.19.5", "babel-core": "7.0.0-bridge.0", "babel-jest": "^24.9.0", + "browserstack-local": "^1.4.9", + "dotenv": "^16.0.0", "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.5", "enzyme-to-json": "^3.5.0", @@ -187,7 +201,7 @@ "react-native-clean-project": "^3.6.4", "react-test-renderer": "17.0.2", "ts-node": "^8.4.1", - "typescript": "^4.2.4" + "typescript": "^4.6.3" }, "resolutions": { "react-devtools-core": "4.13.0" diff --git a/patches/react-native-reanimated+2.0.0.patch b/patches/react-native-reanimated+2.0.0.patch deleted file mode 100644 index 2e34ad728..000000000 --- a/patches/react-native-reanimated+2.0.0.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/node_modules/react-native-reanimated/RNReanimated.podspec b/node_modules/react-native-reanimated/RNReanimated.podspec -index 6cdf6ac..2852ea0 100644 ---- a/node_modules/react-native-reanimated/RNReanimated.podspec -+++ b/node_modules/react-native-reanimated/RNReanimated.podspec -@@ -85,6 +85,7 @@ Pod::Spec.new do |s| - s.dependency 'Yoga' - s.dependency 'DoubleConversion' - s.dependency 'glog' -+ s.dependency 'hermes-engine' - - if reactVersion.match(/^0.62/) - s.dependency 'ReactCommon/callinvoker' \ No newline at end of file diff --git a/releases.json b/releases.json index 47afa8357..c4eb19ef5 100644 --- a/releases.json +++ b/releases.json @@ -1,5 +1,162 @@ { "versions": [ + { + "version": "4.23.1", + "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-23-1.apk", + "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.23.1", + "changelog": [], + "unstable": false, + "hashes": [ + { + "type": "md5", + "value": "d987b65fec86e6f22f27b7be7676e276" + }, + { + "type": "sha256", + "value": "83739ac93efc5e7c9dbc5484f8d5734c4bd63a326b27594cad659bed0fc4db16" + }, + { + "type": "sha512", + "value": "b756c67617fa149cd85c6db23cd1ba6c266ef58bb8ba3cd902bdd3d77dfc99fbe600a8f033ea3e9eb3fdf576bb820736bc971cfd1a0ec17128b601e26a3d134b" + } + ] + }, + { + "version": "4.23.0", + "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-23-0.apk", + "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.23.0", + "changelog": [ + "Fix hashtag navigation error", + "Cleans up feature flag logic", + "New toaster notifications", + "Unverified email toaster added", + "Improved transitions when opening multiple bottom sheets", + "Fix Minds+ screen errors", + "Fix some navigation issues with the interactions bottom sheets", + "Fix onboarding tag selector visual an functional issues", + "Fix posts visibility option when creating a post", + "Fix groups posts visible on the main newsfeed", + "Added custom API URL to dev tools", + "Makes dev tools accessible on production mode by tapping multiple times hidden parts of the app", + "Fix the auto login password reset flow is completed", + "Fix group's search issues", + "Adds a password show option to all the password fields of the app", + "Standardize the user lists components", + "Update the local storage package", + "Fix the delete post error for admins when deleting a remind", + "Improves the UX on feeds by loading next page before we reach the end", + "Fix notification count issues", + "Enable react-freeze, that improves the performance by freezing screens that are not visible", + "Fix loading state indicators in comments", + "Fix password confirmation when changing email", + "Improved UX for onboarding channel setup", + "Better rate limit message for the user when resetting the password", + "Allow to verify email only once", + "Fix trending analytics screen errors", + "Remove full screen view for NSFW images when forbidden", + "Improve validation/error messages on the change password screen" + ], + "unstable": false, + "hashes": [ + { + "type": "md5", + "value": "50463d824e742027ed108e3bf9062c87" + }, + { + "type": "sha256", + "value": "19dbbb9ee7ac86c6d64ab953c8e953d4e4804f886e501f9182bdb9a5459d8b81" + }, + { + "type": "sha512", + "value": "2a8f3ed10d9a7ff12208cc84daf50900c3aa28a3f93c56add86ff5d9f2ae62f3fce6d64b4ab56d32a030548d9ef4ff8c4b5ccb70cdc05ae3186a9e9be4f32be5" + } + ] + }, + { + "version": "4.22.3", + "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-22-3.apk", + "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.22.3", + "changelog": [ + "Fix crash when translating post", + "Fix issues switching users", + "Fix some onboarding layout problems", + "Fix symbols not allowed in username input" + ], + "unstable": false, + "hashes": [ + { + "type": "md5", + "value": "5bcca7bcdabdf153e05bb2b0d21457db" + }, + { + "type": "sha256", + "value": "198aa642961d1571a8531e078a13cadc15f5b740261e8233a5c86d05bd832e02" + }, + { + "type": "sha512", + "value": "b601349e623117f1f9075dc90d87de72bfaee652ea66cc364fc59a5aad5752728f12a8a053d13a9bb827ad41de325ccd2b4aaf89ffc4cbaa33aa3c6ffd96bdc5" + } + ] + }, + { + "version": "4.22.0", + "href": "https://cdn-assets.minds.com/mobile/Minds-stable-4-22-0.apk", + "sourceHref": "https://gitlab.com/minds/mobile-native/commits/v4.22.0", + "changelog": [ + "Twitter sync added", + "Channel recommendations added to the feed", + "Top/Latest feed", + "Login/Register creative/UX", + "Adds support for Blurhash in SmartImage (blurred placeholder while loading images)", + "Add top discovery tab and add collapsible header to the discovery screen", + "Bottom sheets can now be closed with the back button on Android devices", + "Updates the camera package, disable frame processors (improve performance), and bump android target SDK", + "Use growthbook react and use new event for experiments", + "Development tools implemented: Analog to the growthbook chrome extension and to manage canary/staging options in dev mode", + "Fix comments count propagation (replies)", + "Standardize the keyboard handling", + "Update reanimated library to 2.4.1", + "Fix group deep linking and in-app linking", + "Fix Billing settings", + "Fix devices sleeps recording a video", + "Fix portrait bar initial load", + "Fix CI for play store deployment and update Fastlane", + "Fix tokens transactions list date localization", + "Fix notifications blurred thumbnail error", + "Fix share post option (Android)", + "Fix missing translations", + "Fix growthbook attribute on logout", + "Fix the feed pagination and update safe area package", + "Fix make admin options in groups", + "Fix notifications settings fail to load", + "Removes legacy storage and code cleanup", + "Fix remove pin option in main newsfeed", + "Fix Activity indicator position and topbar border", + "Fix android build error (due to photo editor package)", + "Refactor and remove old composer code", + "Fix comment report navigation", + "Fix phone verification textbox reachability", + "Adds support for spec tests in components folder", + "Fix share to minds image preview on android", + "Fix share to minds on iOS", + "Fix social compass sliders on iOS" + ], + "unstable": false, + "hashes": [ + { + "type": "md5", + "value": "079a1e586081c9d66b533fc5a7188df2" + }, + { + "type": "sha256", + "value": "5666e0c94c658093bfd666a934653589d6eaeff09186d46f594015a312ec0058" + }, + { + "type": "sha512", + "value": "9d8904d9c19d0415f64fda1260d87fff8c038e2e107fb314de892699ffc097bba4fc3ecc5b019506a41ca2fa8ee7abf4cca8e993f27e806746b451cbd0493f7f" + } + ] + }, { "version": "4.20.1", "href": "https://cdn-assets.minds.com/android/Minds-stable-4-20-1.apk", diff --git a/setupTests.js b/setupTests.js index 9b3c48066..0e67fd595 100644 --- a/setupTests.js +++ b/setupTests.js @@ -17,6 +17,7 @@ configure({ adapter: new Adapter() }); jest.mock('@react-native-cookies/cookies', () => ({ set: jest.fn(), + clearByName: jest.fn(), })); jest.mock('react-native-reanimated', () => @@ -34,6 +35,7 @@ jest.mock('react-native-localize'); // jest.mock('mobx-react', () => require('mobx-react/custom')); jest.mock('./AppStores'); +jest.mock('./AppMessageProvider'); jest.useFakeTimers(); jest.doMock('moment', () => { @@ -96,4 +98,5 @@ jest.mock('react-native-system-setting', () => { }; }); jest.mock('react-native-silent-switch'); +jest.mock('react-native-mmkv-storage'); global.__reanimatedWorkletInit = jest.fn(); diff --git a/src/analytics/AnalyticsTypes.ts b/src/analytics/AnalyticsTypes.ts index ca49d1607..66bed1580 100644 --- a/src/analytics/AnalyticsTypes.ts +++ b/src/analytics/AnalyticsTypes.ts @@ -496,3 +496,21 @@ export interface TokensMetrics { onchain: string; total: string; } + +export type CardType = + | 'LiquidityFees' + | 'LiquidityTotal' + | 'LiquidityTradedVolume' + | 'EngagementScore' + | 'HoldingScore' + | 'LiquidityScore' + | 'EmissionBreakDown' + | 'CirculatingSupply' + | 'MarketCap' + | 'TokenHolders' + | 'TokensReclaimed' + | 'TokensRewarded' + | 'TotalSupply' + | 'TransactionsCount' + | 'TransactionsUnique' + | 'TransactionsVolume'; diff --git a/src/analytics/tabs/dashboard/DashboardTab.tsx b/src/analytics/tabs/dashboard/DashboardTab.tsx index 4738cc149..2462526b5 100644 --- a/src/analytics/tabs/dashboard/DashboardTab.tsx +++ b/src/analytics/tabs/dashboard/DashboardTab.tsx @@ -69,7 +69,7 @@ const DashboardTab = observer(({ url, defaultMetric }: DashboardTabProps) => { /** * API Call * */ - const { result, loading, error, fetch } = useApiFetch<{ + const { result, loading, error, refresh } = useApiFetch<{ dashboard: Dashboard; }>(url, { params: { @@ -80,6 +80,7 @@ const DashboardTab = observer(({ url, defaultMetric }: DashboardTabProps) => { .join(','), }, }); + const onTryAgain = useCallback(() => refresh(), [refresh]); if (!result && loading) { return ; @@ -106,7 +107,7 @@ const DashboardTab = observer(({ url, defaultMetric }: DashboardTabProps) => { if (error || dataError) { return ( - + {i18n.t('error') + '\n'} {i18n.t('tryAgain')} diff --git a/src/analytics/tabs/tokens/Card.tsx b/src/analytics/tabs/tokens/Card.tsx index 64c7dc51c..30b9914d0 100644 --- a/src/analytics/tabs/tokens/Card.tsx +++ b/src/analytics/tabs/tokens/Card.tsx @@ -9,11 +9,15 @@ import ThemedStyles from '../../../styles/ThemedStyles'; import MindsTokens, { format, } from '../../../wallet/v3/currency-tabs/MindsTokens'; -import { MetricsComparative, TokensMetrics } from '../../AnalyticsTypes'; +import { + CardType, + MetricsComparative, + TokensMetrics, +} from '../../AnalyticsTypes'; type PropsType = { metrics: TokensMetrics; - type: string; + type: CardType; }; const Card = ({ metrics, type }: PropsType) => { @@ -41,7 +45,7 @@ const Card = ({ metrics, type }: PropsType) => { ); }; -const Title = ({ type }) => { +const Title = ({ type }: { type: CardType }) => { const theme = ThemedStyles.style; return ( diff --git a/src/analytics/tabs/tokens/LiquidityDashboard.tsx b/src/analytics/tabs/tokens/LiquidityDashboard.tsx index e3a1a3a77..df234f3c7 100644 --- a/src/analytics/tabs/tokens/LiquidityDashboard.tsx +++ b/src/analytics/tabs/tokens/LiquidityDashboard.tsx @@ -6,7 +6,7 @@ import { DashBoardPropsType } from './TokensTab'; const LiquidityDashboard = ({ metrics }: DashBoardPropsType) => { return ( - {Object.keys(metrics).map((key: string) => { + {(Object.keys(metrics) as Array).map(key => { return ; })} diff --git a/src/analytics/tabs/tokens/RewardsDashboard.tsx b/src/analytics/tabs/tokens/RewardsDashboard.tsx index 06e7b5d8d..017a6cecb 100644 --- a/src/analytics/tabs/tokens/RewardsDashboard.tsx +++ b/src/analytics/tabs/tokens/RewardsDashboard.tsx @@ -6,7 +6,7 @@ import { DashBoardPropsType } from './TokensTab'; const RewardsDashboard = ({ metrics }: DashBoardPropsType) => { return ( - {Object.keys(metrics).map((key: string) => { + {(Object.keys(metrics) as Array).map(key => { return ; })} diff --git a/src/analytics/tabs/tokens/SupplyDashboard.tsx b/src/analytics/tabs/tokens/SupplyDashboard.tsx index f99933bdb..5108f3945 100644 --- a/src/analytics/tabs/tokens/SupplyDashboard.tsx +++ b/src/analytics/tabs/tokens/SupplyDashboard.tsx @@ -6,7 +6,7 @@ import { DashBoardPropsType } from './TokensTab'; const SupplyDashboard = ({ metrics }: DashBoardPropsType) => { return ( - {Object.keys(metrics).map((key: string) => { + {(Object.keys(metrics) as Array).map(key => { return ; })} diff --git a/src/analytics/tabs/tokens/TokensTab.tsx b/src/analytics/tabs/tokens/TokensTab.tsx index 0ad8c6119..e9a27a372 100644 --- a/src/analytics/tabs/tokens/TokensTab.tsx +++ b/src/analytics/tabs/tokens/TokensTab.tsx @@ -1,5 +1,5 @@ import { observer, useLocalStore } from 'mobx-react'; -import React, { useEffect } from 'react'; +import React, { useCallback, useEffect } from 'react'; import { ScrollView, View } from 'react-native'; import ActivityIndicator from '../../../common/components/ActivityIndicator'; import TopBarButtonTabBar, { @@ -9,7 +9,7 @@ import { useStores } from '../../../common/hooks/use-stores'; import useApiFetch from '../../../common/hooks/useApiFetch'; import i18n from '../../../common/services/i18n.service'; import ThemedStyles from '../../../styles/ThemedStyles'; -import { TokensMetrics } from '../../AnalyticsTypes'; +import { CardType, TokensMetrics } from '../../AnalyticsTypes'; import LiquidityDashboard from './LiquidityDashboard'; import RewardsDashboard from './RewardsDashboard'; import SupplyDashboard from './SupplyDashboard'; @@ -25,7 +25,7 @@ export type DashBoardPropsType = { type TokensOptions = 'Supply' | 'Transactions' | 'Liquidity' | 'Rewards'; export type MetricsSubType = { - [key: string]: TokensMetrics; + [K in CardType]: TokensMetrics; }; const options: Array> = [ @@ -42,6 +42,10 @@ const createStore = () => ({ }, }); +type RowType = { + [K in TokensOptions]: MetricsSubType; +}; + const TokensTab = observer(({ route }: { route: any }) => { const theme = ThemedStyles.style; const store = useLocalStore(createStore); @@ -60,9 +64,10 @@ const TokensTab = observer(({ route }: { route: any }) => { } }, [route, store, wallet]); - const { result, error, loading, fetch } = useApiFetch<{ + const { result, error, loading, refresh } = useApiFetch<{ metrics: Array; }>('api/v3/blockchain/metrics'); + const onTryAgain = useCallback(() => refresh(), [refresh]); if (!result && loading) { return ; @@ -72,14 +77,12 @@ const TokensTab = observer(({ route }: { route: any }) => { return null; } - const rows: { - [K in TokensOptions]: MetricsSubType; - } = { + const rows = { Supply: {}, Transactions: {}, Liquidity: {}, Rewards: {}, - }; + } as RowType; let dataError; try { @@ -93,7 +96,7 @@ const TokensTab = observer(({ route }: { route: any }) => { if (error || dataError) { return ( - + {i18n.t('error') + '\n'} {i18n.t('tryAgain')} diff --git a/src/analytics/tabs/tokens/TransactionsDashboard.tsx b/src/analytics/tabs/tokens/TransactionsDashboard.tsx index 786d87182..65fd64e3e 100644 --- a/src/analytics/tabs/tokens/TransactionsDashboard.tsx +++ b/src/analytics/tabs/tokens/TransactionsDashboard.tsx @@ -6,7 +6,7 @@ import { DashBoardPropsType } from './TokensTab'; const TransactionsDashboard = ({ metrics }: DashBoardPropsType) => { return ( - {Object.keys(metrics).map((key: string) => { + {Object.keys(metrics).map((key: any) => { return ; })} diff --git a/src/analytics/tabs/trending/TrendingTab.tsx b/src/analytics/tabs/trending/TrendingTab.tsx index c12581a04..9362f075a 100644 --- a/src/analytics/tabs/trending/TrendingTab.tsx +++ b/src/analytics/tabs/trending/TrendingTab.tsx @@ -20,15 +20,24 @@ const TrendingTab = observer(({ navigation }: TrendingTabProps) => { (type, entity) => { switch (type) { case 'activity': + case 'remind': + case 'image': + case 'video': + case 'blog': return () => navigation.push('Activity', { entity, }); + case 'group': + return () => + navigation.push('GroupView', { + group: entity, + }); case 'channel': - case 'blog': - case 'remind': - case 'image': - case 'video': + return () => + navigation.push('Channel', { + entity: entity, + }); default: return () => null; } @@ -38,35 +47,46 @@ const TrendingTab = observer(({ navigation }: TrendingTabProps) => { const reformatEntity = useCallback( (entity: Entity) => { - let type, username, name, titleType; + let type, subtitle, title; type = entity.type; - if (type === 'user') { - type = 'channel'; - username = entity.username; - name = entity.name; - } else { - username = entity.ownerObj!.username; - name = entity.ownerObj!.name; - } - - titleType = type.charAt(0).toUpperCase() + type.slice(1); - if (type === 'activity') { - titleType = 'Post'; + switch (type) { + case 'user': + type = 'channel'; + title = + entity.title || entity.message || `@${entity.username}'s Channel`; + subtitle = `@${entity.username}`; + break; + case 'group': + subtitle = entity.briefdescription; + title = entity.name; + break; + case 'activity': + default: + let titleType = type.charAt(0).toUpperCase() + type.slice(1); + if (type === 'activity') { + titleType = 'Post'; + } + + title = + entity.title || + entity.message || + `@${entity.ownerObj?.username}'s ${titleType}`; + subtitle = `@${entity.ownerObj?.username}`; + break; } return { - type: type, + type, time_created: entity.time_created, - title: entity.title || entity.message || `${username}'s ${titleType}`, onPress: getEntityRoute(type, entity), - username: username, - name: name, + subtitle, + title, }; }, [getEntityRoute], ); - const { result, error, loading, fetch } = useApiFetch<{ + const { result, error, loading, refresh } = useApiFetch<{ dashboard: Dashboard; }>('api/v2/analytics/dashboards/trending', { params: { @@ -76,6 +96,7 @@ const TrendingTab = observer(({ navigation }: TrendingTabProps) => { }, persist: true, }); + const onTryAgain = useCallback(() => refresh(), [refresh]); if (!result && loading) { return ; @@ -106,7 +127,7 @@ const TrendingTab = observer(({ navigation }: TrendingTabProps) => { if (error || dataError) { return ( - + {i18n.t('error') + '\n'} {i18n.t('tryAgain')} @@ -147,9 +168,14 @@ const TrendingTab = observer(({ navigation }: TrendingTabProps) => { onPress={row.values.entity.onPress} style={theme.rowJustifySpaceBetween}> - {row.values.entity.title} - - {`@${row.values.entity.username}`} + + {row.values.entity.title} + + + {row.values.entity.subtitle} diff --git a/src/auth/AuthService.ts b/src/auth/AuthService.ts index a29a28bce..3f9a3aa52 100644 --- a/src/auth/AuthService.ts +++ b/src/auth/AuthService.ts @@ -41,6 +41,7 @@ export type registerParams = { email: string; password: string; exclusive_promotions: boolean; + friendly_captcha_enabled?: boolean; }; type resetParams = { @@ -89,10 +90,6 @@ class AuthService { headers, ); - if (session.isRelogin(username, data)) { - return data; - } - if (responseHeaders && responseHeaders['set-cookie']) { const regex = /minds_pseudoid=([^;]*);/g; const result = regex.exec(responseHeaders['set-cookie'].join()); @@ -101,6 +98,10 @@ class AuthService { } } + if (session.isRelogin(username, data)) { + return data; + } + const isFirstLogin = session.tokensData.length === 0; // if already have other sessions... @@ -116,7 +117,6 @@ class AuthService { await session.addSession(data); await session.login(); - session.setSwitchingAccount(false); // if this is not the first login we reset the stack keeping the login screen and the main only. // To force rendering the app behind the modal and get rid of the splash screen @@ -124,6 +124,8 @@ class AuthService { resetStackAndGoBack(); } + session.setSwitchingAccount(false); + return data; } @@ -131,24 +133,15 @@ class AuthService { * Check if the user is already logged */ checkUserExist(username: string) { - if (session.tokensData.some(token => token.user.username === username)) { + if ( + session.tokensData.some( + token => token.user.username === username && !token.sessionExpired, + ) + ) { throw new Error(i18n.t('auth.alreadyLogged')); } } - async reLogin(password: string, headers: any = {}) { - const username = session.getUser().username; - const params = { - grant_type: 'password', - client_id: 'mobile', - //client_secret: '', - username, - password, - } as loginParms; - - await api.post('api/v3/oauth/token', params, headers); - } - async loginWithIndex(sessionIndex: number) { session.setSwitchingAccount(true); await this.sessionLogout(); @@ -156,8 +149,8 @@ class AuthService { await delay(100); await session.switchUser(sessionIndex); await session.login(); - session.setSwitchingAccount(false); resetStackAndGoBack(); + session.setSwitchingAccount(false); } /** @@ -194,7 +187,7 @@ class AuthService { try { if (session.tokensData.length > 0) { const state = NavigationService.getCurrentState(); - if (state && state.name === 'Settings') { + if (state && state.name !== 'MultiUserScreen') { NavigationService.navigate('MultiUserScreen'); } } @@ -203,13 +196,56 @@ class AuthService { await this.unregisterTokenFrom(sessionService.activeIndex); api.post('api/v3/oauth/revoke'); - session.setSwitchingAccount(true); - session.logout(); - // Fixes auto-subscribe issue on register - await api.clearCookies(); - await this.handleActiveAccount(); + // Logout and handle user switching or navigating to welcome screen + this.logoutSession(); + + return true; + } catch (err) { session.setSwitchingAccount(false); + logService.exception('[AuthService] logout', err); + return false; + } + } + + /** + * Logout session and handle user switching or navigating to welcome screen + */ + private async logoutSession() { + session.setSwitchingAccount(true); + session.logout(); + + // Fixes auto-subscribe issue on register + await api.clearCookies(); + await this.handleActiveAccount(); + session.setSwitchingAccount(false); + } + + /** + * Revoke tokens and relogin (The current user session) + */ + async revokeTokens(): Promise { + this.justRegistered = false; + try { + if (session.tokensData.length > 0) { + const state = NavigationService.getCurrentState(); + if (state && state.name !== 'MultiUserScreen') { + NavigationService.navigate('MultiUserScreen'); + await delay(100); + } + } + // delete device token first + await this.unregisterTokenFrom(sessionService.activeIndex); + + session.setSwitchingAccount(true); + // revoke local session + session.setSessionExpired(true); + + this.tryToRelog(() => { + session.setSessionExpired(false); + NavigationService.goBack(); + }); + return true; } catch (err) { session.setSwitchingAccount(false); @@ -218,6 +254,23 @@ class AuthService { } } + /** + * Opens the re-login modal for the current user and handles a successful login or the cancel + */ + async tryToRelog(onLogin?: Function) { + const onCancel = async () => { + if (session.sessionExpired) { + console.log('[AuthService] tryToRelog: session expired'); + this.logoutSession(); + } + }; + + NavigationService.navigate('RelogScreen', { + onLogin, + onCancel, + }); + } + unregisterTokenFrom(index: number) { const deviceToken = sessionService.deviceToken; if (deviceToken) { @@ -254,6 +307,10 @@ class AuthService { } } + /** + * This methods logs out the current session but WITHOUt removing it from the storage + * @returns boolean + */ async sessionLogout() { try { this.justRegistered = false; @@ -290,7 +347,7 @@ class AuthService { * Refresh user token */ async refreshToken(refreshToken?, accessToken?): Promise { - logService.info('[AuthService] Refreshing token'); + logService.info('[AuthService] Refreshing token...'); const params = { grant_type: 'refresh_token', @@ -309,6 +366,7 @@ class AuthService { params, headers, ); + logService.info('[AuthService] token refreshed'); return data; } catch (err) { logService.exception('[AuthService] error claiming refresh token', err); diff --git a/src/auth/ModalConfirmPassword.tsx b/src/auth/ModalConfirmPassword.tsx deleted file mode 100644 index f39553a4a..000000000 --- a/src/auth/ModalConfirmPassword.tsx +++ /dev/null @@ -1,95 +0,0 @@ -//@ts-nocheck -import React, { Component } from 'react'; -import { View, TextInput, StyleSheet } from 'react-native'; - -import Modal from 'react-native-modal'; - -import i18n from '../common/services/i18n.service'; -import authService from '../auth/AuthService'; -import { ComponentsStyle } from '../styles/Components'; -import ThemedStyles from '../styles/ThemedStyles'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import MText from '../common/components/MText'; -import InputContainer from '~/common/components/InputContainer'; -import { Button, H1, H2, H3, Row, ScreenSection } from '~/common/ui'; - -type PropsType = { - onSuccess: Function; - close: Function; - isVisible: boolean; -}; - -export default class ModalConfirmPassword extends Component { - state = { - password: '', - error: false, - }; - - async submit() { - this.setState({ - error: false, - }); - try { - await authService.validatePassword(this.state.password); - this.props.onSuccess(this.state.password); - this.setState({ - password: '', - }); - } catch (err) { - this.setState({ - error: true, - }); - } - } - - render() { - const theme = ThemedStyles.style; - const msg = this.state.error ? ( - {i18n.t('auth.invalidPassword')} - ) : null; - return ( - - - {msg} - - -

{i18n.t('auth.confirmpassword')}

-
-
- this.setState({ password: value })} - value={this.state.password} - selectTextOnFocus={true} - secureTextEntry={true} - /> - - - - -
-
- ); - } -} - -const styles = StyleSheet.create({ - modal: { flex: 1, padding: 0, margin: 0 }, - error: { - marginTop: 8, - marginBottom: 8, - color: '#c00', - textAlign: 'center', - }, -}); diff --git a/src/auth/PasswordConfirmScreen.tsx b/src/auth/PasswordConfirmScreen.tsx index cc36b48f4..d0200743f 100644 --- a/src/auth/PasswordConfirmScreen.tsx +++ b/src/auth/PasswordConfirmScreen.tsx @@ -116,6 +116,7 @@ const PasswordConfirmScreen = observer((props: PropsType) => { textContentType="password" onChangeText={localStore.setPassword} value={localStore.password} + autoFocus /> { const localStore = useLocalStore(() => ({ code: oldCode, recovery: false, + codeSentAt: undefined as number | undefined, error: !!oldCode, + /** + * Whether email resend is in progress + */ + resending: false, setCode(code: string) { this.code = code; }, @@ -62,8 +70,44 @@ const TwoFactorConfirmScreen = observer(({ route, navigation }: PropsType) => { onCancel && onCancel(); navigation.goBack(); }, - resend: () => { - onConfirm(''); + /** + * Ensures we don't resend the code more than once every 10 seconds + */ + get canResendRateLimit() { + if (this.codeSentAt && Date.now() - this.codeSentAt < 10000) { + return false; + } + + return true; + }, + /** + * Resends email confirmation code + */ + resend(): void { + if (!this.canResendRateLimit) { + showNotification(i18n.t('auth.waitMoment'), 'danger', undefined); + return; + } + + // resends the same request (the backend will resend the email confirmation) + this.resending = true; + onConfirm('') + .then(() => { + // this code won't get called because the backend is always throwing an error here. Please refer to .catch + showNotification(i18n.t('emailConfirm.sent'), 'info'); + }) + .catch(e => { + // the backend is always returning an error, se we have no other option but to optimistically consider this a success + if (e instanceof TwoFactorError) { + showNotification(i18n.t('emailConfirm.sent'), 'info'); + } + }) + .finally(() => { + runInAction(() => { + this.codeSentAt = Date.now(); + this.resending = false; + }); + }); }, submit() { this.error = false; @@ -111,13 +155,16 @@ const TwoFactorConfirmScreen = observer(({ route, navigation }: PropsType) => { {i18n.t('verify')}
- {description} + + {description} + { /> {mfaType === 'email' && ( - + {i18n.t('onboarding.verifyEmailDescription2')} - + {' '} {i18n.t('onboarding.resend')} - - + + )} {mfaType === 'totp' && showRecovery && ( - + {i18n.t('auth.recoveryDesc')} - + {' '} - {i18n.t('auth.recoveryCode')} - - + {localStore.recovery + ? i18n.t('auth.authCode') + : i18n.t('auth.recoveryCode')} + + )} @@ -155,14 +204,6 @@ const TwoFactorConfirmScreen = observer(({ route, navigation }: PropsType) => { }); const styles = ThemedStyles.create({ - // continue: ['fontL', 'fontMedium', 'colorLink', 'paddingTop'], - resend: ['fontMedium', 'colorLink'], - description: [ - 'colorSecondaryText', - 'paddingVertical8x', - 'paddingHorizontal4x', - 'fontL', - ], header: [ 'rowJustifySpaceBetween', 'alignCenter', diff --git a/src/auth/WelcomeScreen.tsx b/src/auth/WelcomeScreen.tsx index 53ab1a56e..af1a5a9a9 100644 --- a/src/auth/WelcomeScreen.tsx +++ b/src/auth/WelcomeScreen.tsx @@ -1,10 +1,12 @@ import { RouteProp } from '@react-navigation/native'; +import { observer } from 'mobx-react'; import React, { useCallback } from 'react'; import { Dimensions, StyleSheet, View } from 'react-native'; import Animated from 'react-native-reanimated'; import { SafeAreaView } from 'react-native-safe-area-context'; import MText from '~/common/components/MText'; -import { IS_REVIEW } from '~/config/Config'; +import { DEV_MODE } from '~/config/Config'; +import { HiddenTap } from '~/settings/screens/DevToolsScreen'; import { Button } from '~ui'; import i18n from '../common/services/i18n.service'; import { AuthStackParamList } from '../navigation/NavigationTypes'; @@ -23,7 +25,7 @@ type PropsType = { export type WelcomeScreenRouteProp = RouteProp; -export default function WelcomeScreen(props: PropsType) { +function WelcomeScreen(props: PropsType) { const theme = ThemedStyles.style; const resetRef = React.useRef(null); const onLoginPress = useCallback(() => { @@ -73,11 +75,14 @@ export default function WelcomeScreen(props: PropsType) {
- {IS_REVIEW && ( + {DEV_MODE.isActive && ( Dev Options )} + + + ); } @@ -88,6 +93,15 @@ const devtoolsStyle = ThemedStyles.combine( 'padding5x', ); +const devToggleStyle = ThemedStyles.combine( + 'positionAbsoluteTopLeft', + 'width30', + 'marginTop9x', + 'padding5x', +); + +export default observer(WelcomeScreen); + const styles = StyleSheet.create({ bulb: { width: '100%', diff --git a/src/auth/__mocks__/AuthService.ts b/src/auth/__mocks__/AuthService.ts index 31d5a16d3..4064039b9 100644 --- a/src/auth/__mocks__/AuthService.ts +++ b/src/auth/__mocks__/AuthService.ts @@ -4,4 +4,5 @@ export default { forgot: jest.fn(), register: jest.fn(), refreshToken: jest.fn(), + tryToRelog: jest.fn().mockImplementation(() => false), }; diff --git a/src/auth/login/LoginForm.tsx b/src/auth/login/LoginForm.tsx index 440bceda6..333cefd1f 100644 --- a/src/auth/login/LoginForm.tsx +++ b/src/auth/login/LoginForm.tsx @@ -6,7 +6,6 @@ import { observer, useLocalStore } from 'mobx-react'; import ResetPasswordModal, { ResetPasswordModalHandles, } from '../reset-password/ResetPasswordModal'; -import Icon from 'react-native-vector-icons/Ionicons'; import createLoginStore from './createLoginStore'; import FastImage from 'react-native-fast-image'; import UserModel from '../../channel/UserModel'; @@ -16,6 +15,8 @@ import i18n from '../../common/services/i18n.service'; import MText from '../../common/components/MText'; import { IS_IOS } from '../../config/Config'; import { Button, Row, B1 } from '~ui'; +import DismissKeyboard from '~/common/components/DismissKeyboard'; +import PasswordInput from '~/common/components/password-input/PasswordInput'; type PropsType = { onLogin?: Function; @@ -33,12 +34,19 @@ export default observer(function LoginForm(props: PropsType) { const theme = ThemedStyles.style; - const user = - props.sessionIndex !== undefined - ? UserModel.checkOrCreate( - sessionService.tokensData[props.sessionIndex].user, - ) - : sessionService.getUser(); + const user = React.useMemo(() => { + const u = + props.sessionIndex !== undefined + ? UserModel.checkOrCreate( + sessionService.tokensData[props.sessionIndex].user, + ) + : sessionService.getUser(); + + if (props.relogin && !localStore.username) { + localStore.username = u.username; + } + return u; + }, [props.sessionIndex, localStore]); const usernameInput = props.relogin ? ( @@ -63,11 +71,11 @@ export default observer(function LoginForm(props: PropsType) { testID="usernameInput" autoCorrect={false} noBottomBorder - keyboardType="name-phone-pad" + keyboardType="default" error={ - localStore.showErrors && - !localStore.username && - i18n.t('auth.fieldRequired') + localStore.showErrors && !localStore.username + ? i18n.t('auth.fieldRequired') + : undefined } autoFocus={true} /> @@ -75,44 +83,39 @@ export default observer(function LoginForm(props: PropsType) { return ( - {usernameInput} - - - - - - - {i18n.t('auth.forgot')} - - + + {usernameInput} + + + + + + {i18n.t('auth.forgot')} + + + ); }); diff --git a/src/auth/login/createLoginStore.ts b/src/auth/login/createLoginStore.ts index 7c3821ab7..cccacb9e1 100644 --- a/src/auth/login/createLoginStore.ts +++ b/src/auth/login/createLoginStore.ts @@ -9,7 +9,6 @@ const createLoginStore = ({ props, resetRef }) => ({ password: '', msg: '', language: i18n.getCurrentLocale(), - hidePassword: true, inProgress: false, showErrors: false, setUsername(value) { @@ -26,9 +25,6 @@ const createLoginStore = ({ props, resetRef }) => ({ const password = String(value).trim(); this.password = password; }, - toggleHidePassword() { - this.hidePassword = !this.hidePassword; - }, setInProgress(value: boolean) { this.inProgress = value; }, @@ -38,7 +34,7 @@ const createLoginStore = ({ props, resetRef }) => ({ }, setError(msg: string) { this.msg = msg; - showNotification(msg, 'warning', 3000, 'top'); + showNotification(msg, 'warning', 3000); this.inProgress = false; }, onLoginPress(releaseButton: any) { diff --git a/src/auth/multi-user/logged-users/LoggedUserItem.tsx b/src/auth/multi-user/logged-users/LoggedUserItem.tsx index c9db751ec..1a8592b82 100644 --- a/src/auth/multi-user/logged-users/LoggedUserItem.tsx +++ b/src/auth/multi-user/logged-users/LoggedUserItem.tsx @@ -18,13 +18,10 @@ const doLogin = async (index: number) => { return; } if (sessionService.tokensData[index].sessionExpired) { - const promise = new Promise((resolve, reject) => { - NavigationService.navigate('RelogScreen', { - sessionIndex: index, - onLogin: () => AuthService.loginWithIndex(index), - }); + NavigationService.navigate('RelogScreen', { + sessionIndex: index, + onLogin: () => AuthService.loginWithIndex(index), }); - await promise; } else { AuthService.loginWithIndex(index); } diff --git a/src/auth/register/RegisterForm.tsx b/src/auth/register/RegisterForm.tsx index 4554dcb0f..1c84dcba2 100644 --- a/src/auth/register/RegisterForm.tsx +++ b/src/auth/register/RegisterForm.tsx @@ -16,13 +16,15 @@ import apiService from '../../common/services/api.service'; import delay from '../../common/helpers/delay'; import logService from '../../common/services/log.service'; import sessionService from '../../common/services/session.service'; -import featuresService from '../../common/services/features.service'; import PasswordInput from '../../common/components/password-input/PasswordInput'; import MText from '../../common/components/MText'; import { BottomSheetButton } from '../../common/components/bottom-sheet'; import { useNavigation } from '@react-navigation/core'; import KeyboardSpacingView from '~/common/components/keyboard/KeyboardSpacingView'; import FitScrollView from '~/common/components/FitScrollView'; +import DismissKeyboard from '~/common/components/DismissKeyboard'; +import FriendlyCaptcha from '~/common/components/friendly-captcha/FriendlyCaptcha'; +import { useFeature } from '@growthbook/growthbook-react'; type PropsType = { // called after registeration is finished @@ -34,7 +36,9 @@ const alphanumericPattern = '^[a-zA-Z0-9_]+$'; const RegisterForm = observer(({ onRegister }: PropsType) => { const navigation = useNavigation(); const captchaRef = useRef(null); + const friendlyCaptchaRef = useRef(null); const scrollViewRef = useRef(); + const friendlyCaptchaEnabled = useFeature('mob-4231-captcha').on; const store = useLocalStore(() => ({ focused: false, @@ -45,20 +49,34 @@ const RegisterForm = observer(({ onRegister }: PropsType) => { email: '', termsAccepted: false, exclusivePromotions: true, - hidePassword: true, inProgress: false, showErrors: false, usernameTaken: false, + captcha: '', validateUser: debounce(async (username: string) => { const response = await apiService.get('api/v3/register/validate', { username, }); store.usernameTaken = !response.valid; }, 300), + friendlyCaptchaEnabled, + setFriendlyCaptchaEnabled(enabled: boolean) { + store.friendlyCaptchaEnabled = enabled; + }, + setCaptcha(value: string) { + this.captcha = value; + }, onCaptchResult: async (captcha: string) => { - store.inProgress = true; - + store.captcha = captcha; captchaRef.current.hide(); + store.register(); + }, + register: async () => { + if (store.inProgress) { + return null; + } + + store.inProgress = true; try { const params = { @@ -66,14 +84,16 @@ const RegisterForm = observer(({ onRegister }: PropsType) => { email: store.email, password: store.password, exclusive_promotions: store.exclusivePromotions, - captcha, + captcha: store.captcha, } as registerParams; + if (store.friendlyCaptchaEnabled) { + params.friendly_captcha_enabled = true; + } await authService.register(params); await apiService.clearCookies(); await delay(100); - if (featuresService.has('onboarding-october-2020')) { - sessionService.setInitialScreen('SelectHashtags'); - } + sessionService.setInitialScreen('SelectHashtags'); + try { await authService.login(store.username, store.password); i18n.setLocaleBackend(); @@ -86,9 +106,12 @@ const RegisterForm = observer(({ onRegister }: PropsType) => { logService.exception(error); } } - } catch (err) { - showNotification(err.message, 'warning', 3000, 'top'); - logService.exception(err); + } catch (err: any) { + if (err instanceof Error) { + showNotification(err.message, 'warning', 3000); + logService.exception(err); + } + friendlyCaptchaRef.current?.reset(); } finally { store.inProgress = false; } @@ -100,15 +123,13 @@ const RegisterForm = observer(({ onRegister }: PropsType) => { i18n.t('auth.termsAcceptedError'), 'info', 3000, - 'top', ); } if (!validatePassword(store.password).all) { showNotification( - i18n.t('auth.invalidPassword'), - 'warning', - 2000, - 'top', + i18n.t('auth.invalidPasswordDescription'), + 'info', + 2500, ); return; } @@ -120,12 +141,20 @@ const RegisterForm = observer(({ onRegister }: PropsType) => { ) { return; } - captchaRef.current?.show(); + + // use friendly captcha if it was enabled and if the puzzle was solved, + // otherwise fall back to the legacy captcha + if (store.friendlyCaptchaEnabled && this.captcha) { + return this.register(); + } else { + store.setFriendlyCaptchaEnabled(false); + captchaRef.current?.show(); + } }, // on password focus focus() { this.focused = true; - scrollViewRef.current?.scrollToEnd(); + scrollViewRef.current?.scrollTo({ x: 0, y: 0, animated: true }); }, blur() { this.focused = false; @@ -150,17 +179,11 @@ const RegisterForm = observer(({ onRegister }: PropsType) => { toggleTerms() { store.termsAccepted = !store.termsAccepted; }, - toggleHidePassword() { - store.hidePassword = !store.hidePassword; - }, togglePromotions() { store.exclusivePromotions = !store.exclusivePromotions; }, emailInputBlur() { store.email = store.email.trim(); - if (!validatorService.email(store.email)) { - this.showErrors = true; - } }, get usernameError() { if (this.usernameTaken) { @@ -191,7 +214,7 @@ const RegisterForm = observer(({ onRegister }: PropsType) => { autofocus autoCorrect={false} returnKeyType="next" - keyboardType="name-phone-pad" + keyboardType="default" autoComplete="username-new" textContentType="username" /> @@ -212,24 +235,32 @@ const RegisterForm = observer(({ onRegister }: PropsType) => { : !store.email ? i18n.t('auth.fieldRequired') : !validatorService.email(store.email) - ? validatorService.emailMessage(store.email) + ? validatorService.emailMessage(store.email) || '' : undefined } noBottomBorder onBlur={store.emailInputBlur} /> + + {store.friendlyCaptchaEnabled && ( + + )} ); @@ -239,49 +270,53 @@ const RegisterForm = observer(({ onRegister }: PropsType) => { ref={scrollViewRef} keyboardShouldPersistTaps={'always'} contentContainerStyle={theme.paddingBottom4x}> - {inputs} - - - {i18n.t('auth.accept')}{' '} - - Linking.openURL('https://www.minds.com/p/terms') - }> - {i18n.t('auth.termsAndConditions')} - -
- } - checked={store.termsAccepted} - onPress={store.toggleTerms} - /> - - {i18n.t('auth.promotions')} - - } - checked={store.exclusivePromotions} - onPress={store.togglePromotions} - /> -
- - + + <> + {inputs} + + + {i18n.t('auth.accept')}{' '} + + Linking.openURL('https://www.minds.com/p/terms') + }> + {i18n.t('auth.termsAndConditions')} + + + } + checked={store.termsAccepted} + onPress={store.toggleTerms} + /> + + {i18n.t('auth.promotions')} + + } + checked={store.exclusivePromotions} + onPress={store.togglePromotions} + /> + + + + + ); diff --git a/src/auth/reset-password/InputPassword.tsx b/src/auth/reset-password/InputPassword.tsx index dc72a4910..8135015b3 100644 --- a/src/auth/reset-password/InputPassword.tsx +++ b/src/auth/reset-password/InputPassword.tsx @@ -31,10 +31,12 @@ const InputPassword = observer(({ store, onFinish }: PropsType) => {
diff --git a/src/auth/reset-password/createLocalStore.ts b/src/auth/reset-password/createLocalStore.ts index 8537e15fe..4539da20c 100644 --- a/src/auth/reset-password/createLocalStore.ts +++ b/src/auth/reset-password/createLocalStore.ts @@ -1,3 +1,4 @@ +import NavigationService from '~/navigation/NavigationService'; import { showNotification } from '../../../AppMessages'; import delay from '../../common/helpers/delay'; import validatePassword from '../../common/helpers/validatePassword'; @@ -9,15 +10,15 @@ import AuthService from '../AuthService'; type StepsType = 'inputUser' | 'emailSended' | 'inputPassword'; const showError = (error: string) => - showNotification(error, 'danger', undefined, 'top'); + showNotification(error, 'danger', undefined); const createLocalStore = () => ({ currentStep: 'inputUser' as StepsType, username: '', code: '', password: '', - hidePassword: true, sending: false, + rateLimited: false, sent: 0, focused: false, setPassword(password: string) { @@ -26,9 +27,6 @@ const createLocalStore = () => ({ setUsername(username: string) { this.username = username; }, - toggleHidePassword() { - this.hidePassword = !this.hidePassword; - }, navToInputUser() { this.currentStep = 'inputUser'; }, @@ -78,6 +76,14 @@ const createLocalStore = () => ({ const message = (typeof err === 'object' && err !== null && err.message) || i18n.t('messenger.errorDirectMessage'); + if ( + message === 'You have exceed the rate limit. Please try again later.' + ) { + this.rateLimited = true; + showError(i18n.t('auth.rateLimit')); + NavigationService.goBack(); + return; + } showError(message); logService.exception('[ForgotPassword]', err); } finally { @@ -114,6 +120,7 @@ const createLocalStore = () => ({ throw data; } } catch (err: any) { + console.log('err', err); if (err.message) { showError(err.message); } else { @@ -123,18 +130,20 @@ const createLocalStore = () => ({ } finally { this.setSending(false); if (success) { + const password = this.password; + const username = this.username; this.setPassword(''); this.setUsername(''); const response = { success, login: async () => { - showNotification(i18n.t('auth.waitLogin'), 'info', 3000, 'top'); + showNotification(i18n.t('auth.waitLogin'), 'info', 3000); await delay(150); // clear the cookies (fix future issues with calls) await apiService.clearCookies(); await delay(300); - AuthService.login(this.username, this.password); + AuthService.login(username, password); }, }; return response; diff --git a/src/auth/twoFactorAuth/DisableTFA.tsx b/src/auth/twoFactorAuth/DisableTFA.tsx index 68ba3dbfd..6c51fd80f 100644 --- a/src/auth/twoFactorAuth/DisableTFA.tsx +++ b/src/auth/twoFactorAuth/DisableTFA.tsx @@ -52,6 +52,7 @@ const DisableTFA = observer(({ route }: PropsType) => { containerStyle={theme.bgPrimaryBackgroundHighlight} labelStyle={theme.colorPrimaryText} style={theme.colorPrimaryText} + autoFocus placeholder={i18n.t('settings.TFAEnterCode')} onChangeText={store.setAppCode} value={store.appCode} diff --git a/src/auth/twoFactorAuth/TwoFactorAuthSettingsScreen.tsx b/src/auth/twoFactorAuth/TwoFactorAuthSettingsScreen.tsx index e8ba87087..27229e9e5 100644 --- a/src/auth/twoFactorAuth/TwoFactorAuthSettingsScreen.tsx +++ b/src/auth/twoFactorAuth/TwoFactorAuthSettingsScreen.tsx @@ -13,6 +13,8 @@ import MText from '../../common/components/MText'; import Button from '~/common/components/Button'; import ActivityIndicator from '~/common/components/ActivityIndicator'; +type OptionDef = { id: Exclude; enabled: boolean }; + const TwoFactorAuthSettingsScreen = observer(() => { const navigation = useNavigation(); const localStore = useLocalStore(createTwoFactorStore); @@ -21,16 +23,16 @@ const TwoFactorAuthSettingsScreen = observer(() => { localStore.load(); }, [localStore]); - const items = [ + const items: Array = [ { - id: 'app' as Options, + id: 'app', enabled: localStore.appAuthEnabled, }, ]; if (!localStore.appAuthEnabled) { items.push({ - id: 'email' as Options, + id: 'email', enabled: !localStore.appAuthEnabled, }); } @@ -116,7 +118,7 @@ const TwoFactorAuthSettingsScreen = observer(() => { ); }); -const ItemTitle = ({ id, enabled }) => { +const ItemTitle = ({ id, enabled }: OptionDef) => { // Inverted colors const backgroundColor = ThemedStyles.theme ? ThemedStyles.style.bgPrimaryBackground_Light diff --git a/src/auth/twoFactorAuth/VerifyAuthAppScreen.tsx b/src/auth/twoFactorAuth/VerifyAuthAppScreen.tsx index 4f3473a78..5058e03c5 100644 --- a/src/auth/twoFactorAuth/VerifyAuthAppScreen.tsx +++ b/src/auth/twoFactorAuth/VerifyAuthAppScreen.tsx @@ -59,7 +59,9 @@ const VerifyAuthAppScreen = observer(({ route }: PropsType) => { store.setLoading(true); await store.fetchSecret(); } catch (err) { - showNotification(err.message, 'warning'); + if (err instanceof Error) { + showNotification(err.message, 'warning'); + } } finally { store.setLoading(false); } diff --git a/src/auth/twoFactorAuth/createTwoFactorStore.ts b/src/auth/twoFactorAuth/createTwoFactorStore.ts index 8f61ee41f..f9f35ff1d 100644 --- a/src/auth/twoFactorAuth/createTwoFactorStore.ts +++ b/src/auth/twoFactorAuth/createTwoFactorStore.ts @@ -111,7 +111,9 @@ const createTwoFactorStore = () => ({ } catch (err) { logService.exception(err); this.error = true; - showNotification(err.message, 'warning'); + if (err instanceof Error) { + showNotification(err.message, 'warning'); + } } finally { this.setAppCode(''); this.setLoading(false); @@ -186,7 +188,9 @@ const createTwoFactorStore = () => ({ } catch (err) { this.setLoading(false); logService.exception(err); - showNotification(err.message, 'warning'); + if (err instanceof Error) { + showNotification(err.message, 'warning'); + } } }, }); diff --git a/src/blockchain/v2/walletconnect/WalletConnectContext.tsx b/src/blockchain/v2/walletconnect/WalletConnectContext.tsx index c58a29616..e179f2af6 100644 --- a/src/blockchain/v2/walletconnect/WalletConnectContext.tsx +++ b/src/blockchain/v2/walletconnect/WalletConnectContext.tsx @@ -304,7 +304,9 @@ export const createStore = (): WCStore => ({ return result as string[]; } catch (err) { console.error(err); - showNotification(err.toString(), 'danger'); + if (err instanceof Error) { + showNotification(err.toString(), 'danger'); + } } return ['']; }, diff --git a/src/boost/Boost.tsx b/src/boost/Boost.tsx index 0719d142d..cec629fb0 100644 --- a/src/boost/Boost.tsx +++ b/src/boost/Boost.tsx @@ -50,6 +50,7 @@ export default class Boost extends Component { entity={ActivityModel.create(entity)} hideTabs={true} navigation={this.props.navigation} + borderless /> ); case 'user': diff --git a/src/boost/BoostActionBar.tsx b/src/boost/BoostActionBar.tsx index a5f9212c7..c245dee87 100644 --- a/src/boost/BoostActionBar.tsx +++ b/src/boost/BoostActionBar.tsx @@ -3,7 +3,7 @@ import React, { Component } from 'react'; import { Icon } from 'react-native-elements'; -import { StyleSheet, TouchableHighlight, View } from 'react-native'; +import { TouchableHighlight, View } from 'react-native'; import { observer, inject } from 'mobx-react'; @@ -249,13 +249,18 @@ export default class BoostActionBar extends Component { } } -const styles = StyleSheet.create({ - container: { - display: 'flex', - flexDirection: 'row', - alignItems: 'stretch', - padding: 4, - }, +const styles = ThemedStyles.create({ + container: [ + 'borderBottom6x', + 'bcolorBaseBackground', + { + display: 'flex', + flexDirection: 'row', + alignItems: 'stretch', + padding: 4, + paddingBottom: 16, + }, + ], icon: { marginBottom: 4, }, diff --git a/src/boost/BoostModel.tsx b/src/boost/BoostModel.tsx index 0cf95bfc8..6c2b050c8 100644 --- a/src/boost/BoostModel.tsx +++ b/src/boost/BoostModel.tsx @@ -1,9 +1,18 @@ import BaseModel from '../common/BaseModel'; import UserModel from '../channel/UserModel'; +import { extendObservable } from 'mobx'; + /** * User model */ export default class BoostModel extends BaseModel { + constructor() { + super(); + extendObservable(this, { + state: this.state, + }); + } + /** * Child models */ diff --git a/src/boost/BoostStore.ts b/src/boost/BoostStore.ts index 1c999e483..095380153 100644 --- a/src/boost/BoostStore.ts +++ b/src/boost/BoostStore.ts @@ -6,7 +6,7 @@ import OffsetListStore from '../common/stores/OffsetListStore'; import BoostModel from './BoostModel'; import BoostService from './BoostService'; import logService from '../common/services/log.service'; -import { isNetworkError } from '../common/services/api.service'; +import { isAbort, isNetworkError } from '../common/services/api.service'; /** * Boosts Store @@ -59,7 +59,7 @@ class BoostStore { this.list.setList(feed, refresh); } catch (err) { // ignore aborts - if (err.code === 'Abort') return; + if (isAbort(err)) return; if (!isNetworkError(err)) { logService.exception('[BoostStore]', err); } diff --git a/src/boost/v2/BoostChannelScreen.tsx b/src/boost/v2/BoostChannelScreen.tsx index bd74f51a7..88f3ef518 100644 --- a/src/boost/v2/BoostChannelScreen.tsx +++ b/src/boost/v2/BoostChannelScreen.tsx @@ -1,19 +1,18 @@ import { observer, useLocalStore } from 'mobx-react'; import React, { useEffect } from 'react'; -import { View } from 'react-native'; +import DismissKeyboard from '~/common/components/DismissKeyboard'; +import { Spacer } from '~/common/ui'; import useWalletConnect from '../../blockchain/v2/walletconnect/useWalletConnect'; import ModalScreen from '../../common/components/ModalScreen'; import { useStores } from '../../common/hooks/use-stores'; import i18n from '../../common/services/i18n.service'; import sessionService from '../../common/services/session.service'; -import ThemedStyles from '../../styles/ThemedStyles'; import BoostButton from './BoostButton'; import BoostInput from './BoostInput'; import BoostPayment from './BoostPayment'; import createBoostStore from './createBoostStore'; const BoostChannelScreen = observer(() => { - const theme = ThemedStyles.style; const wallet = useStores().wallet; const wc = useWalletConnect(); const localStore = useLocalStore(createBoostStore, { @@ -28,11 +27,13 @@ const BoostChannelScreen = observer(() => { - - - - - + + + + + + + ); }); diff --git a/src/boost/v2/BoostPostScreen.tsx b/src/boost/v2/BoostPostScreen.tsx index 709819c2d..1c9939ec2 100644 --- a/src/boost/v2/BoostPostScreen.tsx +++ b/src/boost/v2/BoostPostScreen.tsx @@ -14,6 +14,7 @@ import OfferBoostTab from './OfferBoostTab'; import { RootStackParamList } from '../../navigation/NavigationTypes'; import useWalletConnect from '../../blockchain/v2/walletconnect/useWalletConnect'; import ModalScreen from '../../common/components/ModalScreen'; +import DismissKeyboard from '~/common/components/DismissKeyboard'; type BoostTabType = 'newsfeed' | 'offer'; @@ -56,10 +57,12 @@ const BoostPostScreen = observer(({ route }: PropsType) => { - - - - {renderTab()} + + + + + {renderTab()} + ); }); diff --git a/src/boost/v2/createBoostStore.ts b/src/boost/v2/createBoostStore.ts index 06dc31b8c..f517498d3 100644 --- a/src/boost/v2/createBoostStore.ts +++ b/src/boost/v2/createBoostStore.ts @@ -209,7 +209,9 @@ const createBoostStore = ({ } NavigationService.goBack(); } catch (err) { - showNotification(err.message, 'danger'); + if (err instanceof Error) { + showNotification(err.message, 'danger'); + } } finally { this.loading = false; } diff --git a/src/buy-tokens/BuyTokensScreen.tsx b/src/buy-tokens/BuyTokensScreen.tsx index 815fbf03b..6f1d7910f 100644 --- a/src/buy-tokens/BuyTokensScreen.tsx +++ b/src/buy-tokens/BuyTokensScreen.tsx @@ -24,6 +24,7 @@ import { Screen, Button, } from '~ui'; +import { LIQUIDITY_ENABLED } from '~/config/Config'; type PaymentMethod = 'card' | 'bank' | 'crypto'; type PaymentOption = { type: PaymentMethod; name: string }; @@ -198,7 +199,7 @@ export default observer(() => { const createStore = (): Store => ({ transakApiKey: '', tokenAddress: '', - paymentMethod: null, + paymentMethod: 'card', orderReport: null, showOrderReport: false, showUniswapWidget: false, @@ -285,10 +286,12 @@ const styles = StyleSheet.create({ }, }); -const paymentMethodsList: PaymentOption[] = [ - { type: 'card', name: 'Card / Bank' }, - { type: 'crypto', name: 'Crypto' }, -]; +const paymentMethodsList: PaymentOption[] = LIQUIDITY_ENABLED + ? [ + { type: 'card', name: 'Card / Bank' }, + { type: 'crypto', name: 'Crypto' }, + ] + : [{ type: 'card', name: 'Card / Bank' }]; const buildButtonStyles = (position: number, _) => { switch (position) { diff --git a/src/channel/UserModel.ts b/src/channel/UserModel.ts index f79448c67..126b6744f 100644 --- a/src/channel/UserModel.ts +++ b/src/channel/UserModel.ts @@ -33,7 +33,6 @@ export default class UserModel extends BaseModel { sums; btc_address?: string; icontime!: string; - username!: string; briefdescription!: string; city!: string; type!: string; @@ -150,9 +149,10 @@ export default class UserModel extends BaseModel { try { const metadata = this.getClientMetadata(); await ChannelService.toggleSubscription(this.guid, value, metadata); - if (shouldUpdateFeed) { - UserModel.events.emit('toggleSubscription', this); - } + UserModel.events.emit('toggleSubscription', { + user: this, + shouldUpdateFeed, + }); } catch (err) { runInAction(() => { this.subscribed = !value; diff --git a/src/channel/subscribers/ChannelSubscribers.tsx b/src/channel/subscribers/ChannelSubscribers.tsx deleted file mode 100644 index 5b7fec3ed..000000000 --- a/src/channel/subscribers/ChannelSubscribers.tsx +++ /dev/null @@ -1,169 +0,0 @@ -import React, { Component } from 'react'; - -import { FlatList, View, TouchableHighlight } from 'react-native'; - -import { observer, inject } from 'mobx-react'; - -import i18n from '../../common/services/i18n.service'; -import DiscoveryUser from '../../discovery/DiscoveryUser'; -import CenteredLoading from '../../common/components/CenteredLoading'; -import ErrorLoading from '../../common/components/ErrorLoading'; -import ThemedStyles from '../../styles/ThemedStyles'; -import type ChannelSubscribersStore from './ChannelSubscribersStore'; -import MText from '../../common/components/MText'; - -type PropsType = { - channelSubscribersStore: ChannelSubscribersStore; - route: any; - navigation: any; -}; - -/** - * Discovery screen - */ -@inject('channelSubscribersStore') -@observer -class ChannelSubscribers extends Component { - /** - * On component will mount - */ - componentDidMount() { - this._loadData(); - } - - /** - * On component will unmount - */ - componentWillUnmount() { - this.props.channelSubscribersStore.reset(); - } - - /** - * Load data - */ - _loadData() { - const params = this.props.route.params || {}; - if (params.filter) { - this.props.channelSubscribersStore.setFilter(params.filter); - } else { - this.props.channelSubscribersStore.setFilter('subscribers'); - } - - if (params.guid) { - this.props.channelSubscribersStore.setGuid(params.guid); - } - } - - /** - * Render - */ - render() { - let body; - const theme = ThemedStyles.style; - const store = this.props.channelSubscribersStore; - - const footerCmp = store.errorLoading ? ( - - ) : null; - - if (!store.list.loaded && !store.list.refreshing && !store.errorLoading) { - body = ; - } else { - body = ( - item.guid} - onRefresh={this.refresh} - refreshing={store.list.refreshing} - onEndReached={this.loadFeed} - // onEndReachedThreshold={0} - initialNumToRender={12} - style={theme.flexContainer} - removeClippedSubviews={false} - ListFooterComponent={footerCmp} - /> - ); - } - - return ( - - - - store.setFilter('subscribers')} - style={ - store.filter === 'subscribers' - ? styles.selectedButton - : styles.buttons - }> - {i18n.t('subscribers')} - - store.setFilter('subscriptions')} - style={ - store.filter === 'subscriptions' - ? styles.selectedButton - : styles.buttons - }> - {i18n.t('subscriptions')} - - - - {body} - - ); - } - - /** - * Load subs data - */ - loadFeed = () => { - this.props.channelSubscribersStore.loadList(); - }; - - /** - * Refresh subs data - */ - refresh = () => { - this.props.channelSubscribersStore.refresh(); - }; - - /** - * Render user row - */ - renderRow = row => { - return ( - - ); - }; -} - -export default ChannelSubscribers; - -const styles = ThemedStyles.create({ - topbar: { - height: 35, - justifyContent: 'center', - flexDirection: 'row', - }, - row: ['flexContainer', 'rowJustifyCenter'], - container: ['flexContainer', 'bgPrimaryBackground'], - buttons: ['flexContainerCenter', 'alignCenter'], - - selectedButton: [ - 'flexContainerCenter', - 'bcolorLink', - 'colorLink', - { - alignItems: 'center', - borderBottomWidth: 3, - }, - ], -}); diff --git a/src/channel/subscribers/ChannelSubscribersStore.ts b/src/channel/subscribers/ChannelSubscribersStore.ts deleted file mode 100644 index 8ea23f511..000000000 --- a/src/channel/subscribers/ChannelSubscribersStore.ts +++ /dev/null @@ -1,102 +0,0 @@ -//@ts-nocheck -import { observable, action } from 'mobx'; - -import OffsetListStore from '../../common/stores/OffsetListStore'; -import channelService from '../ChannelService'; -import UserModel from '../UserModel'; -import logService from '../../common/services/log.service'; - -/** - * Subscribers Store - */ -class ChannelSubscribersStore { - list = new OffsetListStore(); - @observable errorLoading = false; - @observable loading = false; - @observable filter = 'subscribers'; - - guid = ''; - - setGuid(guid) { - let reload = this.guid != guid; - this.guid = guid; - this.loadList(reload); - } - - /** - * Set action - */ - @action - setLoading(value: boolean) { - this.loading = value; - } - - /** - * Set the error loading flag - * @param {boolean} value - */ - @action - setErrorLoading(value: boolean) { - this.errorLoading = value; - } - - /** - * Load boost list - */ - loadList = async (reload = false) => { - if (this.list.cantLoadMore()) { - return Promise.resolve(); - } - - if (reload) { - this.list.clearList(); - } - - this.loading = true; - - try { - this.setLoading(true); - this.setErrorLoading(false); - const feed = await channelService.getSubscribers( - this.guid, - this.filter, - this.list.offset, - ); - - feed.entities = UserModel.createMany(feed.entities); - this.list.setList(feed); - } catch (err) { - this.setErrorLoading(true); - logService.exception(err); - } finally { - this.setLoading(false); - } - }; - - @action - reset() { - this.guid = null; - this.list.clearList(); - this.filter = 'subscribers'; - } - - /** - * Refresh list - */ - refresh() { - this.list.refresh(); - this.loadList().finally(() => { - this.list.refreshDone(); - }); - } - - @action - setFilter(filter) { - this.filter = filter; - this.loading = false; - this.list.clearList(); - this.loadList(); - } -} - -export default ChannelSubscribersStore; diff --git a/src/channel/subscribers/__mocks__/ChannelSubscribersStore.ts b/src/channel/subscribers/__mocks__/ChannelSubscribersStore.ts deleted file mode 100644 index 53758882e..000000000 --- a/src/channel/subscribers/__mocks__/ChannelSubscribersStore.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { extendObservable } from 'mobx'; -import OffsetListStore from '../../../common/stores/OffsetListStore'; - -const mock = jest.fn().mockImplementation(() => { - return extendObservable( - { - list: new OffsetListStore(), - loadList: jest.fn(), - setGuid: jest.fn(), - refresh: jest.fn(), - reset: jest.fn(), - setFilter: jest.fn(), - }, - { - filter: 'subscribers', - }, - ); -}); - -export default mock; diff --git a/src/channel/subscription/RecentSubscriptionsStore.ts b/src/channel/subscription/RecentSubscriptionsStore.ts new file mode 100644 index 000000000..b55a90de5 --- /dev/null +++ b/src/channel/subscription/RecentSubscriptionsStore.ts @@ -0,0 +1,98 @@ +import { storages } from './../../common/services/storage/storages.service'; +import { observable, action } from 'mobx'; +import UserModel from '~/channel/UserModel'; +/** + * how long should the subscriptions persist + */ +const RECENT_DURATION = 30 * 60 * 60 * 1000; // less than 30m + +export interface RecentSubscription { + /** + * the channel id the user subscribed to + */ + channelGuid: string; + /** + * timestamp of when this channel was subscribed to + */ + subscribedAt: number; +} + +/** + * a service that remembers what the user has subscribed to in the last n minutes + */ +export class RecentSubscriptionsStore { + static readonly STORAGE_KEY = 'recent-subscriptions'; + @observable subscriptions: RecentSubscription[] = []; + + constructor() { + UserModel.events.on('toggleSubscription', this.onSubscriptionChange); + setTimeout(() => this._rehydrate(), 0); + } + + onSubscriptionChange = ({ user }) => { + this.recordSubscriptionChange(user); + }; + + /** + * @param { MindsUser } channel + * adds or removes a subscription to the list and preserves on disk + */ + recordSubscriptionChange(channel: UserModel) { + if (channel.subscribed) { + this.subscriptions.unshift({ + channelGuid: channel.guid, + subscribedAt: Date.now(), + }); + } else { + this.subscriptions = this.subscriptions.filter( + p => p.channelGuid !== channel.guid, + ); + } + + this._persist(); + } + + /** + * @returns { string[] } a list of subscription guids in the past n minutes + */ + list(): string[] { + const recentSubscriptions = this.subscriptions.filter( + sub => Date.now() - sub.subscribedAt < RECENT_DURATION, + ); + if (this.subscriptions.length !== recentSubscriptions.length) { + this.subscriptions = recentSubscriptions; + this._persist(); + } + return this.subscriptions.map(sub => sub.channelGuid); + } + + /** + * Reset the store + */ + @action + reset() { + this.subscriptions = []; + setTimeout(() => this._rehydrate(), 0); + } + + /** + * saves subscriptions to storage + */ + private _persist() { + storages.user?.setArray( + RecentSubscriptionsStore.STORAGE_KEY, + this.subscriptions, + ); + } + + /** + * loads subscriptions from storage if any + */ + @action + private _rehydrate() { + this.subscriptions = + storages.user?.getArray( + RecentSubscriptionsStore.STORAGE_KEY, + ) || []; + } +} diff --git a/src/channel/subscription/SubscriptionButton.tsx b/src/channel/subscription/SubscriptionButton.tsx deleted file mode 100644 index e22dca738..000000000 --- a/src/channel/subscription/SubscriptionButton.tsx +++ /dev/null @@ -1,82 +0,0 @@ -//@ts-nocheck -import React, { Component } from 'react'; - -import { Alert } from 'react-native'; -import { observer } from 'mobx-react'; - -import type UserModel from '../UserModel'; - -import Button from '../../common/components/Button'; -import i18n from '../../common/services/i18n.service'; -import Icon from 'react-native-vector-icons/Ionicons'; -import ThemedStyles from '../../styles/ThemedStyles'; - -type PropsType = { - channel: UserModel; -}; - -/** - * Subscription request - */ -@observer -class SubscriptionButton extends Component { - /** - * On press - */ - onPress = () => { - const { channel } = this.props; - - if (channel.isOpen() || channel.subscribed) { - if (channel.subscribed) { - Alert.alert(i18n.t('attention'), i18n.t('channel.confirmUnsubscribe'), [ - { - text: i18n.t('yesImSure'), - onPress: () => channel.toggleSubscription(), - }, - { text: i18n.t('no') }, - ]); - } else { - channel.toggleSubscription(); - } - } else if (channel.pending_subscribe) { - channel.cancelSubscribeRequest(); - } else { - channel.subscribeRequest(); - } - }; - - /** - * Render - */ - render() { - const { channel, ...otherProps } = this.props; - - let text, - icon = null; - - if (channel.isOpen()) { - text = channel.subscribed - ? i18n.t('channel.unsubscribe') - : i18n.t('channel.subscribe'); - } else { - text = channel.subscribed - ? i18n.t('channel.unsubscribe') - : !channel.pending_subscribe - ? i18n.t('channel.requestSubscription') - : i18n.t('pending'); - if (channel.pending_subscribe) { - icon = ; - } - } - - return ( - - ); - } -} - -const iconStyle = ThemedStyles.combine('paddingLeft', 'colorLink'); - -export default SubscriptionButton; diff --git a/src/channel/subscription/SubscriptionButtonNew.tsx b/src/channel/subscription/SubscriptionButtonNew.tsx deleted file mode 100644 index ee76ca3e0..000000000 --- a/src/channel/subscription/SubscriptionButtonNew.tsx +++ /dev/null @@ -1,87 +0,0 @@ -//@ts-nocheck -import React, { Component } from 'react'; - -import { Alert } from 'react-native'; -import { observer } from 'mobx-react'; - -import UserModel from '../UserModel'; - -import i18n from '../../common/services/i18n.service'; -import Icon from 'react-native-vector-icons/MaterialIcons'; -import ListItemButton from '../../common/components/ListItemButton'; -import ThemedStyles from '../../styles/ThemedStyles'; - -type PropsType = { - channel: UserModel; -}; - -/** - * Subscription request - */ -@observer -class SubscriptionButtonNew extends Component { - /** - * On press - */ - onPress = () => { - const { channel } = this.props; - - if (channel.isOpen() || channel.subscribed) { - if (channel.subscribed) { - Alert.alert(i18n.t('attention'), i18n.t('channel.confirmUnsubscribe'), [ - { - text: i18n.t('yesImSure'), - onPress: () => channel.toggleSubscription(), - }, - { text: i18n.t('no') }, - ]); - } else { - channel.toggleSubscription(); - } - } else if (channel.pending_subscribe) { - channel.cancelSubscribeRequest(); - } else { - channel.subscribeRequest(); - } - }; - - /** - * Render - */ - render() { - const { channel } = this.props; - const theme = ThemedStyles.style; - - let name, - color = null; - - if (channel.isOpen()) { - if (channel.subscribed) { - name = 'check'; - color = theme.colorDone; - } else { - name = 'add'; - color = theme.colorIcon; - } - } else { - if (channel.subscribed) { - name = 'check'; - color = theme.colorDone; - } else if (channel.pending_subscribe) { - name = 'close'; - color = theme.colorIcon; - } else { - name = 'add'; - color = theme.colorIcon; - } - } - - return ( - - - - ); - } -} - -export default SubscriptionButtonNew; diff --git a/src/channel/subscription/SubscriptionRequest.tsx b/src/channel/subscription/SubscriptionRequest.tsx deleted file mode 100644 index 752d485da..000000000 --- a/src/channel/subscription/SubscriptionRequest.tsx +++ /dev/null @@ -1,84 +0,0 @@ -//@ts-nocheck -import React from 'react'; -import { View } from 'react-native'; -import type { Node } from 'react'; - -import type UserModel from '../UserModel'; -import type SubscriptionRequestStore from './SubscriptionRequestStore'; - -import DiscoveryUser from '../../discovery/DiscoveryUser'; -import Button from '../../common/components/Button'; -import i18nService from '../../common/services/i18n.service'; -import { observer } from 'mobx-react'; -import ThemedStyles from '../../styles/ThemedStyles'; -import MText from '../../common/components/MText'; - -type PropsType = { - row: any; - subscriptionRequest: SubscriptionRequestStore; -}; - -/** - * Subscription Request - */ -@observer -class SubscriptionRequest extends DiscoveryUser { - /** - * Get the channel from the props - */ - getChannel(): UserModel { - return this.props.row.item.subscriber; - } - - /** - * Accept the request - */ - onAccept = () => { - this.props.subscriptionRequest.accept(this.props.row.item); - }; - - /** - * reject the request - */ - onReject = () => { - this.props.subscriptionRequest.decline(this.props.row.item); - }; - - /** - * Render Right buttons - */ - renderRightButton(): Node { - if (this.props.row.item.status) { - return ( - - - {i18nService.t(`channel.${this.props.row.item.status}`)} - - - ); - } - - return ( - - ); }; diff --git a/src/channel/v2/createChannelStore.ts b/src/channel/v2/createChannelStore.ts index a16be62b4..99a4f5481 100644 --- a/src/channel/v2/createChannelStore.ts +++ b/src/channel/v2/createChannelStore.ts @@ -46,7 +46,7 @@ const createChannelStore = () => { const store = { tab: 'feed' as ChannelTabType, - channel: null as UserModel | null, + channel: undefined as UserModel | undefined, loaded: false, tiers: >[], filter: 'all' as FilterType, diff --git a/src/chat/ChatIcon.tsx b/src/chat/ChatIcon.tsx index e46be85bd..88af04698 100644 --- a/src/chat/ChatIcon.tsx +++ b/src/chat/ChatIcon.tsx @@ -4,12 +4,18 @@ import { IconCircled } from '~ui/icons'; import { useStores } from '~/common/hooks/use-stores'; import ChatBubbleIcon from './ChatBubbleIcon'; -const ChatIcon = () => { +const ChatIcon = React.memo(() => { const { chat } = useStores(); useEffect(() => { - chat.init(); + // deffer the initial load to avoid issues when switching users + const timeout = setTimeout(() => { + if (chat) { + chat.init(); + } + }, 2000); return () => { + timeout && clearTimeout(timeout); chat.reset(); }; }, [chat]); @@ -20,7 +26,7 @@ const ChatIcon = () => { ); -}; +}); const styles = StyleSheet.create({ container: { diff --git a/src/chat/createChatStore.ts b/src/chat/createChatStore.ts index 83ba50537..d484df993 100644 --- a/src/chat/createChatStore.ts +++ b/src/chat/createChatStore.ts @@ -1,5 +1,6 @@ import { Linking, Platform } from 'react-native'; import SendIntentAndroid from 'react-native-send-intent'; +import type { Timeout } from '~/types/Common'; import { showNotification } from '../../AppMessages'; import apiService from '../common/services/api.service'; import i18nService from '../common/services/i18n.service'; @@ -12,7 +13,7 @@ const createChatStore = () => ({ chatUrl: '', inProgress: false, createInProgress: false, - polling: 0, + polling: 0, // hasSeenModal: false, async checkAppInstalled(openStore = true) { try { @@ -53,12 +54,12 @@ const createChatStore = () => ({ } }, async init() { - this.loadCount(); const chatUrl = mindsService.getSettings().matrix?.chat_url; if (chatUrl) { this.chatUrl = chatUrl; } this.polling = setInterval(this.loadCount, 15000); + this.loadCount(); }, async loadCount(): Promise { if (this.inProgress) { diff --git a/src/comments/v2/Comment.tsx b/src/comments/v2/Comment.tsx index a852deafc..1f2fa0c9e 100644 --- a/src/comments/v2/Comment.tsx +++ b/src/comments/v2/Comment.tsx @@ -195,9 +195,12 @@ export default observer(function Comment(props: PropsType) { {!!props.comment.replies_count && !props.hideReply && ( - {i18n.t('viewRepliesComments', { - count: props.comment.replies_count, - })} + { + //@ts-ignore + i18n.t('viewRepliesComments', { + count: props.comment.replies_count, + }) + } )} diff --git a/src/comments/v2/CommentsStore.ts b/src/comments/v2/CommentsStore.ts index cf1551ffc..b42a430a9 100644 --- a/src/comments/v2/CommentsStore.ts +++ b/src/comments/v2/CommentsStore.ts @@ -379,7 +379,7 @@ export default class CommentsStore { */ post = async () => { if (this.attachment.uploading) { - showNotification(i18n.t('uploading'), 'info', 3000, 'top'); + showNotification(i18n.t('uploading'), 'info', 3000); return; } @@ -389,12 +389,7 @@ export default class CommentsStore { }; if (comment.comment === '') { - showNotification( - i18n.t('messenger.typeYourMessage'), - 'info', - 3000, - 'top', - ); + showNotification(i18n.t('messenger.typeYourMessage'), 'info', 3000); return; } @@ -580,7 +575,9 @@ export default class CommentsStore { if (response) this.onAttachedMedia(response); } catch (e) { logService.exception(e); - showNotification(e.message); + if (e instanceof Error) { + showNotification(e.message); + } } } @@ -596,7 +593,9 @@ export default class CommentsStore { if (response) this.onAttachedMedia(response); } catch (e) { logService.exception(e); - showNotification(e.message); + if (e instanceof Error) { + showNotification(e.message); + } } } diff --git a/src/comments/v2/LoadMore.tsx b/src/comments/v2/LoadMore.tsx index 2db5b529a..96a951156 100644 --- a/src/comments/v2/LoadMore.tsx +++ b/src/comments/v2/LoadMore.tsx @@ -25,9 +25,7 @@ export default observer(function LoadMore({ ? store.loadNext && !store.loadingNext : store.loadPrevious && !store.loadingPrevious; - const showIndicator = next - ? store.loadingNext && store.loaded - : store.loadingPrevious && store.loaded; + const showIndicator = next ? store.loadingNext : store.loadingPrevious; return ( diff --git a/src/common/BaseModel.ts b/src/common/BaseModel.ts index 005350ac8..8e510283c 100644 --- a/src/common/BaseModel.ts +++ b/src/common/BaseModel.ts @@ -8,13 +8,12 @@ import { setViewed, toggleExplicit } from '../newsfeed/NewsfeedService'; import logService from './services/log.service'; import { revokeBoost, acceptBoost, rejectBoost } from '../boost/BoostService'; import { toggleAllowComments as toggleAllow } from '../comments/CommentsService'; -import i18n from './services/i18n.service'; -import featuresService from './services/features.service'; import type UserModel from '../channel/UserModel'; import type FeedStore from './stores/FeedStore'; -import { showNotification } from '../../AppMessages'; import AbstractModel from './AbstractModel'; import MetadataService from './services/metadata.service'; +import { showNotification } from './../../AppMessages'; +import i18n from '~/common/services/i18n.service'; /** * Base model @@ -35,7 +34,7 @@ export default class BaseModel extends AbstractModel { }; // TODO remove this and fix model.listRef logic - listRef?: any; + // listRef?: any; /** * Event emitter @@ -88,6 +87,7 @@ export default class BaseModel extends AbstractModel { // remove references to the list //@ts-ignore delete plainEntity.__list; + //@ts-ignore delete plainEntity.listRef; return plainEntity; @@ -282,6 +282,7 @@ export default class BaseModel extends AbstractModel { try { await revokeBoost(this.guid, filter); this.state = 'revoked'; + showNotification(i18n.t('notification.boostRevoked'), 'success'); } catch (err) { logService.exception('[BaseModel]', err); throw err; @@ -306,27 +307,10 @@ export default class BaseModel extends AbstractModel { * @returns {boolean} */ can(actionName: string, showAlert = false) { - // TODO: clean up permissions feature flag - if (!featuresService.has('permissions')) return true; - - let allowed = true; - - if (!this.permissions || !this.permissions.permissions) { - allowed = false; - } else { - allowed = this.permissions.permissions.some(item => item === actionName); - } - - if (showAlert && !allowed) { - showNotification( - i18n.t(`permissions.notAllowed.${actionName}`, { - defaultValue: i18n.t('notAllowed'), - }), - 'warning', - ); - } + // TODO: implement permission check for each action + // show a toaster notification if showAlert is true - return allowed; + return true; } /** diff --git a/src/common/UserError.ts b/src/common/UserError.ts index aa55a28c1..fc8803813 100644 --- a/src/common/UserError.ts +++ b/src/common/UserError.ts @@ -7,9 +7,9 @@ export type UserErrorType = 'info' | 'warning' | 'danger'; * Every time a user error exception is thrown a message is show to the user */ export class UserError extends Error { - constructor(message, type: UserErrorType = 'info') { + constructor(message, type: UserErrorType = 'info', onPress?: () => void) { super(message); - showNotification(message, type); + showNotification(message, type, 3000, undefined, false, onPress); } } diff --git a/src/common/components/Button.tsx b/src/common/components/Button.tsx index 8110a544e..6e6fda2d6 100644 --- a/src/common/components/Button.tsx +++ b/src/common/components/Button.tsx @@ -6,8 +6,8 @@ import { TouchableOpacityProps, Platform, TouchableOpacity, + View, } from 'react-native'; -import { View } from 'react-native-animatable'; import { Flow } from 'react-native-animated-spinkit'; import ThemedStyles, { useMemoStyle } from '../../styles/ThemedStyles'; diff --git a/src/common/components/ChannelListItem.tsx b/src/common/components/ChannelListItem.tsx index dc5fce5bb..f51f8f759 100644 --- a/src/common/components/ChannelListItem.tsx +++ b/src/common/components/ChannelListItem.tsx @@ -7,8 +7,9 @@ import FastImage from 'react-native-fast-image'; import Subscribe from '../../channel/v2/buttons/Subscribe'; import MText from './MText'; import MPressable from './MPressable'; +import NavigationService from '~/navigation/NavigationService'; -type PropsType = { +export type ChannelListItemProps = { onPress?: (channel: UserModel) => void; channel: UserModel; navigation?: any; @@ -24,11 +25,13 @@ type PropsType = { * was subscribed/unsubscribed */ updateFeed?: boolean; + borderless?: boolean; }; -const ChannelListItem = (props: PropsType) => { +const ChannelListItem = (props: ChannelListItemProps) => { const containerStyle = useStyle( styles.container, + props.borderless ? null : ThemedStyles.style.borderBottom, props.containerStyles || {}, ); const nameStyles = useStyle(props.nameStyles || {}, styles.name); @@ -47,10 +50,21 @@ const ChannelListItem = (props: PropsType) => { if (props.channel.isOpen() && !props.channel.can(FLAG_VIEW, true)) { return; } - props.navigation.push('App', { - screen: 'Channel', - params: { entity: props.channel }, - }); + + if (props.navigation === NavigationService) { + props.navigation.push('App', { + screen: 'Channel', + params: { + guid: props.channel.guid, + entity: props.channel, + }, + }); + } else { + props.navigation.push('Channel', { + guid: props.channel.guid, + entity: props.channel, + }); + } } }, [props]); @@ -112,7 +126,6 @@ const styles = ThemedStyles.create({ }, 'paddingHorizontal4x', 'bcolorPrimaryBorder', - 'borderBottom1x', ], nameContainer: ['flexContainerCenter', 'paddingLeft2x', 'justifyCenter'], name: [bodyStyle, 'fontL'], diff --git a/src/common/components/ChannelRecommendation/ChannelRecommendation.spec.tsx b/src/common/components/ChannelRecommendation/ChannelRecommendation.spec.tsx index 3c42c1005..b035c2a5a 100644 --- a/src/common/components/ChannelRecommendation/ChannelRecommendation.spec.tsx +++ b/src/common/components/ChannelRecommendation/ChannelRecommendation.spec.tsx @@ -47,12 +47,22 @@ jest.mock('~/common/hooks/useApiFetch', () => () => ({ }, })); +jest.mock('~/common/hooks/use-stores', () => ({ + useLegacyStores: () => ({ + recentSubscriptions: { + list() { + return []; + }, + }, + }), +})); + describe('ChannelRecommendation', () => { test('renders correctly', () => { const component = shallow( , ); - + //@ts-ignore jasmine types overwriting jest types expect(component).toMatchSnapshot(); }); }); @@ -62,7 +72,7 @@ describe('ChannelRecommendationItem', () => { const componentItem = shallow( , ); - + //@ts-ignore jasmine types overwriting jest types expect(componentItem).toMatchSnapshot(); }); }); diff --git a/src/common/components/ChannelRecommendation/ChannelRecommendation.tsx b/src/common/components/ChannelRecommendation/ChannelRecommendation.tsx index bd893b36f..9b8694764 100644 --- a/src/common/components/ChannelRecommendation/ChannelRecommendation.tsx +++ b/src/common/components/ChannelRecommendation/ChannelRecommendation.tsx @@ -1,7 +1,7 @@ import { useNavigation } from '@react-navigation/core'; import { observer } from 'mobx-react'; -import React, { FC, useCallback } from 'react'; -import { View } from 'react-native'; +import React, { FC, useCallback, useLayoutEffect, useState } from 'react'; +import { LayoutAnimation, View } from 'react-native'; import UserModel from '~/channel/UserModel'; import Subscribe from '~/channel/v2/buttons/Subscribe'; import i18nService from '~/common/services/i18n.service'; @@ -12,10 +12,12 @@ import { useChannelRecommendation } from './hooks/useChannelRecommendation'; interface ChannelRecommendationItemProps { channel: UserModel; + onSubscribed?: (user: UserModel) => void; } export const ChannelRecommendationItem: FC = ({ channel, + onSubscribed, }) => { const avatar = channel && channel.getAvatarSource ? channel.getAvatarSource('medium') : {}; @@ -46,7 +48,12 @@ export const ChannelRecommendationItem: FC = ({ )} - + ); @@ -54,15 +61,62 @@ export const ChannelRecommendationItem: FC = ({ interface ChannelRecommendationProps { location: string; + /** + * use this prop to allow the component to prefetch the data but not render the component + */ + visible?: boolean; + /** + * the channel for which we should get recommendations + */ + channel?: UserModel; } const ChannelRecommendation: FC = ({ location, + visible = true, + channel, }) => { const navigation = useNavigation(); - const { result } = useChannelRecommendation(location); + const [listSize, setListSize] = useState(3); + const { result, setResult } = useChannelRecommendation(location, channel); + const shouldRender = Boolean(result?.entities.length) && visible; + + /** + * When a channel was subscribed, remove it from the list——unless the list is small + */ + const onSubscribed = useCallback( + subscribedChannel => { + if (!result?.entities) { + return; + } + + if (result.entities.length <= 3) { + return null; + } + + LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut); + setResult({ + ...result, + entities: result?.entities.filter( + suggestion => suggestion.entity_guid !== subscribedChannel.guid, + ), + }); + if (listSize === 3) { + setListSize(5); + } + }, + [result, setResult, listSize], + ); + + // layout animations + useLayoutEffect(() => { + LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut); + + return () => + LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut); + }, [shouldRender]); - if (!result?.entities.length) { + if (!shouldRender) { return null; } @@ -78,10 +132,11 @@ const ChannelRecommendation: FC = ({ - {result?.entities.slice(0, 3).map(suggestion => ( + {result?.entities.slice(0, listSize).map(suggestion => ( ))} diff --git a/src/common/components/ChannelRecommendation/__snapshots__/ChannelRecommendation.spec.tsx.snap b/src/common/components/ChannelRecommendation/__snapshots__/ChannelRecommendation.spec.tsx.snap index d8b831715..722a20351 100644 --- a/src/common/components/ChannelRecommendation/__snapshots__/ChannelRecommendation.spec.tsx.snap +++ b/src/common/components/ChannelRecommendation/__snapshots__/ChannelRecommendation.spec.tsx.snap @@ -52,6 +52,7 @@ exports[`ChannelRecommendation renders correctly 1`] = ` }, } } + onSubscribed={[Function]} /> { +export const useChannelRecommendation = ( + location: string, + channel?: UserModel, +) => { + const { recentSubscriptions } = useLegacyStores(); const res = useApiFetch<{ entities: { confidence_score: number; @@ -17,13 +25,24 @@ export const useChannelRecommendation = (location: string) => { }>('api/v3/recommendations', { params: { location, + mostRecentSubscriptions: new ParamsArray(...recentSubscriptions.list()), + currentChannelUserGuid: channel?.guid, + limit: 12, }, map: recommendations => - recommendations.map(recommendation => ({ - ...recommendation, - entity: UserModel.create(recommendation.entity), - })), + recommendations + .filter(rec => Boolean(rec.entity)) + .map(recommendation => ({ + ...recommendation, + entity: UserModel.create(recommendation.entity), + })), + skip: true, }); + useEffect(() => { + res.fetch(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + return res; }; diff --git a/src/common/components/Delayed.tsx b/src/common/components/Delayed.tsx new file mode 100644 index 000000000..2ecf907ff --- /dev/null +++ b/src/common/components/Delayed.tsx @@ -0,0 +1,22 @@ +import React from 'react'; + +type PropsType = { + children: any; + delay: number; +}; + +/** + * Delays the rendering of a component + */ +export default function Delayed({ children, delay = 200 }: PropsType) { + const [show, setShow] = React.useState(false); + + React.useEffect(() => { + const time = setTimeout(() => { + setShow(true); + }, delay); + return () => clearTimeout(time); + }, []); + + return show ? children : null; +} diff --git a/src/common/components/DismissKeyboard.tsx b/src/common/components/DismissKeyboard.tsx index 4d6f564d5..a52783cb5 100644 --- a/src/common/components/DismissKeyboard.tsx +++ b/src/common/components/DismissKeyboard.tsx @@ -1,15 +1,17 @@ import React from 'react'; -import { Keyboard, TouchableWithoutFeedback } from 'react-native'; +import { Keyboard, Pressable } from 'react-native'; -const onPress = () => Keyboard.dismiss(); +const onPress = () => { + Keyboard.dismiss(); +}; /** * Dismiss keyboard on tap */ export default function DismissKeyboard({ children, ...otherProps }) { return ( - + {children} - + ); } diff --git a/src/common/components/Empty.tsx b/src/common/components/Empty.tsx index 173403971..38748c973 100644 --- a/src/common/components/Empty.tsx +++ b/src/common/components/Empty.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { Image, View } from 'react-native'; import ThemedStyles from '~/styles/ThemedStyles'; +import i18nService from '../services/i18n.service'; import MText from './MText'; type PropsType = { @@ -9,7 +10,11 @@ type PropsType = { children?: React.ReactNode; }; -export default function Empty({ title, subtitle, children }: PropsType) { +export default function Empty({ + title = i18nService.t('nothingToSee'), + subtitle, + children, +}: PropsType) { return ( { const options = React.useMemo( () => - ['all', 'images', 'videos', 'blogs'].map(f => ({ + filters.map(f => ({ title: i18n.t(`discovery.${f}`), onPress: () => { close(); diff --git a/src/common/components/FeedList.tsx b/src/common/components/FeedList.tsx index 1a03e1360..52583b913 100644 --- a/src/common/components/FeedList.tsx +++ b/src/common/components/FeedList.tsx @@ -209,10 +209,10 @@ export class FeedList extends Component { progressViewOffset={(insets?.top || 0) / 1.25} /> } - onEndReachedThreshold={0.2} + onEndReachedThreshold={5} // 5 times the visible list height numColumns={feedStore.isTiled ? 3 : 1} style={style} - initialNumToRender={3} + initialNumToRender={4} maxToRenderPerBatch={4} windowSize={9} // removeClippedSubviews={true} diff --git a/src/common/components/FloatingInput.tsx b/src/common/components/FloatingInput.tsx index 6a887cbcb..4814512aa 100644 --- a/src/common/components/FloatingInput.tsx +++ b/src/common/components/FloatingInput.tsx @@ -24,6 +24,7 @@ const Touchable = preventDoubleTap(TouchableOpacity); type PropsType = { progress?: boolean; onSubmit: () => void; + onCancel?: () => void; children?: React.ReactNode; } & TextInputProps; @@ -31,7 +32,7 @@ type PropsType = { * Floating Input component */ const FloatingInput = React.forwardRef( - ({ onSubmit, progress, children, ...props }: PropsType, ref) => { + ({ onSubmit, progress, onCancel, children, ...props }: PropsType, ref) => { const theme = ThemedStyles.style; const inputRef = React.useRef(null); const [show, setShow] = React.useState(false); @@ -59,7 +60,10 @@ const FloatingInput = React.forwardRef( pointerEvents="box-none"> setShow(false)} + onPress={() => { + setShow(false); + onCancel && onCancel(); + }} style={styles.backdrop} /> @@ -72,7 +76,7 @@ const FloatingInput = React.forwardRef( {...props} style={styles.input} /> - {!progress && children ? ( + {!progress ? ( { }, 300); } + focus() { + if (this.inputRef.current) { + this.inputRef.current.focus(); + } + } + componentWillUnmount() { if (this.timeoutCleanup) { clearTimeout(this.timeoutCleanup); diff --git a/src/common/components/InputContainer.tsx b/src/common/components/InputContainer.tsx index d146de116..fc4ba68ff 100644 --- a/src/common/components/InputContainer.tsx +++ b/src/common/components/InputContainer.tsx @@ -1,45 +1,47 @@ import React from 'react'; -import { View, StyleSheet, ViewStyle } from 'react-native'; +import { View, StyleSheet, ViewStyle, Pressable } from 'react-native'; import ThemedStyles from '../../styles/ThemedStyles'; import Input, { PropsType as InputPropsType } from './Input'; -export interface PropsType extends InputPropsType { +export interface InputContainerPropsType extends InputPropsType { noBottomBorder?: boolean; containerStyle?: ViewStyle | Array; } -const InputContainer = (props: PropsType) => { +const InputContainer = (props: InputContainerPropsType) => { const theme = ThemedStyles.style; const { style, noBottomBorder, ...otherProps } = props; - + const ref = React.useRef(null); return ( - + ref.current?.focus()}> + + ); }; @@ -47,9 +49,6 @@ const InputContainer = (props: PropsType) => { export default InputContainer; const styles = StyleSheet.create({ - container: { - paddingTop: 10, - }, input: { paddingVertical: 6, paddingHorizontal: 0, diff --git a/src/common/components/KeyboardAccessory.tsx b/src/common/components/KeyboardAccessory.tsx index a47d395f7..34654ec7e 100644 --- a/src/common/components/KeyboardAccessory.tsx +++ b/src/common/components/KeyboardAccessory.tsx @@ -4,7 +4,6 @@ import { View, Platform, Keyboard, - UIManager, StyleSheet, LayoutAnimation, } from 'react-native'; @@ -27,10 +26,6 @@ export default class KeyboardAccessory extends PureComponent { this.state = { bottom: 0, }; - // Enable `LayoutAnimation` for Android. - if (UIManager.setLayoutAnimationEnabledExperimental) { - UIManager.setLayoutAnimationEnabledExperimental(true); - } } /** diff --git a/src/common/components/LocationAutoSuggest.tsx b/src/common/components/LocationAutoSuggest.tsx index fbf392e01..fa9e6708d 100644 --- a/src/common/components/LocationAutoSuggest.tsx +++ b/src/common/components/LocationAutoSuggest.tsx @@ -6,11 +6,11 @@ import logService from '../services/log.service'; import CenteredLoading from './CenteredLoading'; import apiService from '../services/api.service'; import type { ApiResponse } from '../services/api.service'; -import SettingInput from './SettingInput'; import i18n from '../services/i18n.service'; import debounce from '../helpers/debounce'; import Input from './Input'; import MText from './MText'; +import InputContainer from './InputContainer'; type addressType = { state?: string; @@ -137,7 +137,7 @@ const LocationAutoSuggest = observer((props: PropsType) => { const listStyle = [theme.bgTertiaryBackground, theme.flexContainer]; - const TextInput = props?.inputStyle === 'inputAlone' ? Input : SettingInput; + const TextInput = props?.inputStyle === 'inputAlone' ? Input : InputContainer; return ( @@ -147,7 +147,6 @@ const LocationAutoSuggest = observer((props: PropsType) => { value={store.value} testID="cityInput" onBlur={store.onBlur} - wrapperBorder={[theme.borderTop, props.wrapperBorder]} /> {store.shouldShowList() && ( diff --git a/src/common/components/MediaView.tsx b/src/common/components/MediaView.tsx index 2c0764db7..45540edff 100644 --- a/src/common/components/MediaView.tsx +++ b/src/common/components/MediaView.tsx @@ -9,8 +9,6 @@ import MindsVideo from '../../media/v2/mindsVideo/MindsVideo'; import download from '../services/download.service'; import logService from '../services/log.service'; import i18n from '../services/i18n.service'; -import { showMessage } from 'react-native-flash-message'; -import { DARK_THEME } from '../../styles/Colors'; import type ActivityModel from '../../newsfeed/ActivityModel'; import { MindsVideoStoreType } from '../../media/v2/mindsVideo/createMindsVideoStore'; import NavigationService from '../../navigation/NavigationService'; @@ -134,9 +132,9 @@ export default class MediaView extends Component { runDownload = async source => { try { await download.downloadToGallery(source.uri, this.props.entity); - showNotification(i18n.t('imageAdded'), 'info', 3000, 'top'); + showNotification(i18n.t('imageAdded'), 'info', 3000); } catch (e) { - showNotification(i18n.t('errorDownloading'), 'danger', 3000, 'top'); + showNotification(i18n.t('errorDownloading'), 'danger', 3000); logService.exception('[MediaView] runDownload', e); } }; @@ -197,15 +195,7 @@ export default class MediaView extends Component { setTimeout(async () => { if (this.props.entity.perma_url) { await Clipboard.setString(this.props.entity.perma_url); - showMessage({ - floating: true, - position: 'top', - message: i18n.t('linkCopied'), - duration: 1300, - backgroundColor: '#FFDD63DD', - color: DARK_THEME.PrimaryText, - type: 'info', - }); + showNotification(i18n.t('linkCopied')); } }, 100); } else { diff --git a/src/common/components/SearchView.tsx b/src/common/components/SearchView.tsx index 28e083cfc..963f940bf 100644 --- a/src/common/components/SearchView.tsx +++ b/src/common/components/SearchView.tsx @@ -1,7 +1,6 @@ import React, { PureComponent } from 'react'; import { - StyleSheet, Platform, TouchableOpacity, StyleProp, @@ -84,18 +83,15 @@ export default class SearchView extends PureComponent { - + ); } else { - return ( - - ); + return ; } } return iconRight; @@ -104,23 +100,28 @@ export default class SearchView extends PureComponent { } } -const styles = StyleSheet.create({ - container: { - borderBottomColor: '#000', - borderTopColor: '#000', - alignItems: 'center', - flexDirection: 'row', - backgroundColor: '#f2f2f2', - borderRadius: 50, - height: 45, - padding: 6, - marginHorizontal: 5, - }, - iconRight: { - right: 0, - paddingRight: 12, - marginLeft: 10, - }, +const styles = ThemedStyles.create({ + container: [ + 'bgSecondaryBackground', + { + borderBottomColor: '#000', + borderTopColor: '#000', + alignItems: 'center', + flexDirection: 'row', + borderRadius: 50, + height: 45, + padding: 6, + marginHorizontal: 5, + }, + ], + iconRight: [ + 'colorSecondaryText', + { + right: 0, + paddingRight: 12, + marginLeft: 10, + }, + ], icon: { marginLeft: 10, }, diff --git a/src/common/components/SmartImage.tsx b/src/common/components/SmartImage.tsx index 985bb9a13..687258456 100644 --- a/src/common/components/SmartImage.tsx +++ b/src/common/components/SmartImage.tsx @@ -1,18 +1,17 @@ import { autorun } from 'mobx'; import { observer, useLocalStore } from 'mobx-react'; -import React, { FC, useEffect, useRef, useState } from 'react'; +import React, { useEffect } from 'react'; import { Image, Platform, TouchableOpacity, View } from 'react-native'; +import { Blurhash } from 'react-native-blurhash'; import FastImage, { ResizeMode, Source } from 'react-native-fast-image'; import ProgressCircle from 'react-native-progress/CircleSnail'; -import Animated from 'react-native-reanimated'; -import { mix, useTimingTransition } from 'react-native-redash'; import Icon from 'react-native-vector-icons/Ionicons'; +import ActivityModel from '~/newsfeed/ActivityModel'; import settingsStore from '../../settings/SettingsStore'; import ThemedStyles, { useStyle } from '../../styles/ThemedStyles'; import connectivityService from '../services/connectivity.service'; +import Delayed from './Delayed'; import RetryableImage from './RetryableImage'; -import { Blurhash } from 'react-native-blurhash'; -import ActivityModel from '~/newsfeed/ActivityModel'; interface SmartImageProps { thumbnail?: Source; @@ -37,9 +36,7 @@ const defaultBlur = Platform.select({ android: 1, ios: 4 }); */ const SmartImage = observer(function (props: SmartImageProps) { const { withoutDownloadButton, ...otherProps } = props; - const dataSaverEnabled = settingsStore.dataSaverEnabled; - const store = useLocalStore(createSmartImageStore, props); useEffect(() => { @@ -96,65 +93,26 @@ const SmartImage = observer(function (props: SmartImageProps) { /> )} - - - {dataSaverEnabled && !withoutDownloadButton && ( - - )} - + {store.showOverlay && ( + + + + + {dataSaverEnabled && !withoutDownloadButton && ( + + )} + + )} ); }); -/** - * this component overlays the image and will disappear with a fade transition when - * store.showOverlay is turned off - */ -const ImageOverlay: FC<{ visible: boolean }> = ({ visible, ...props }) => { - const theme = ThemedStyles.style; - const previousVisibility = useRef(null); - const [shouldRender, setShouldRender] = useState(true); - const showOverlayTransition = useTimingTransition(visible, { - duration: 150, - }); - const opacity = mix(showOverlayTransition, 0, 1); - - useEffect(() => { - if (!visible && previousVisibility.current === true) { - setTimeout(() => { - setShouldRender(false); - }, 150); - } else { - setShouldRender(true); - } - previousVisibility.current = visible; - }, [visible]); - - if (!shouldRender) { - return null; - } - - return ( - - ); -}; - const BlurredThumbnail = ({ thumbBlurRadius, style, @@ -163,7 +121,15 @@ const BlurredThumbnail = ({ }) => { const blurhash = entity?.custom_data?.[0]?.blurhash || entity?.blurhash; if (blurhash) { - return ; + return ( + + ); } if (thumbnailSource) { @@ -277,7 +243,7 @@ const createSmartImageStore = props => { // shows image if cache exists and shows overlay if it didn't async onInit() { // if entity was locked, show overlay and return - if (props.entity?.shouldBeBlured() || props.entity?.isLocked()) { + if (props.entity?.isLocked()) { this.showOverlay = true; return; } @@ -298,6 +264,7 @@ export default SmartImage; export type { Source }; +const absoluteCenter = ThemedStyles.combine('positionAbsolute', 'centered'); const styles = ThemedStyles.create({ downloadButton: [ 'centered', diff --git a/src/common/components/TagOptinDrawer.tsx b/src/common/components/TagOptinDrawer.tsx deleted file mode 100644 index 0c88a8335..000000000 --- a/src/common/components/TagOptinDrawer.tsx +++ /dev/null @@ -1,188 +0,0 @@ -//@ts-nocheck -import React, { Component } from 'react'; -import { View, StyleSheet, ScrollView } from 'react-native'; -import { inject, observer } from 'mobx-react'; -import Switch from 'react-native-switch-pro'; -import Modal from 'react-native-modal'; -import { debounce } from 'lodash'; - -import TagSelect from './TagSelect'; -import TagInput from './TagInput'; -import i18n from '../services/i18n.service'; -import ThemedStyles from '../../styles/ThemedStyles'; -import MText from './MText'; - -type Props = any; - -/** - * Tag Opt in Drawer - */ -@inject('hashtag') -@observer -class TagOptinDrawer extends Component { - /** - * State - */ - state = { - showModal: false, - top: 0, - }; - - static defaultProps = { - showPreferredToggle: true, - }; - - /** - * Show modal - */ - showModal = (top = 0) => { - this.setState({ showModal: true, top }); - }; - - /** - * Hide modal - */ - dismissModal = () => { - this.setState({ showModal: false }); - }; - - /** - * Component did mount - */ - componentDidMount() { - this.props.hashtag.loadSuggested(); - } - - /** - * Toggle tags filter - */ - toogleAll = () => - setTimeout(() => { - this.props.hashtag.toggleAll(); - this.onChange(); - }, 300); - - /** - * On select one tag - */ - onSelectOne = tag => { - this.props.hashtag.setHashtag(tag); - this.props.onSelectOne && this.props.onSelectOne(tag); - }; - - /** - * Debounce tag changes - */ - debouncedOnChange = () => { - this.props.onChange && this.props.onChange(); - }; - - onChange = debounce(this.debouncedOnChange, 700, { - leading: false, - trailing: true, - }); - - /** - * Render - */ - render() { - const theme = ThemedStyles.style; - - return ( - - - - {this.props.showPreferredToggle ? ( - - {i18n.t('hashtags.preferred')} - - - ) : null} - {this.props.onSelectOne ? ( - - {i18n.t('hashtags.hold')} - - ) : null} - - - - m.value)} - onTagDeleted={this.props.hashtag.deselect} - onTagAdded={this.props.hashtag.create} - onChange={this.onChange} - /> - - - - ); - } -} - -export default TagOptinDrawer; - -/** - * Styles - */ -const styles = StyleSheet.create({ - inputContainer: { - height: 40, - }, - modalView: { - padding: 10, - width: '50%', - flex: 1, - borderTopRightRadius: 15, - borderBottomRightRadius: 15, - }, - modal: { - margin: 0, - height: '100%', - marginVertical: 40, - justifyContent: 'flex-start', - padding: 0, - }, -}); diff --git a/src/common/components/TagOptinModal.tsx b/src/common/components/TagOptinModal.tsx deleted file mode 100644 index 0c710e18f..000000000 --- a/src/common/components/TagOptinModal.tsx +++ /dev/null @@ -1,98 +0,0 @@ -//@ts-nocheck -import React, { Component } from 'react'; -import { View, StyleSheet } from 'react-native'; -import { inject, observer } from 'mobx-react'; -import IonIcon from 'react-native-vector-icons/Ionicons'; -import Modal from 'react-native-modal'; -import TagSelect from './TagSelect'; -import TagInput from './TagInput'; -import i18n from '../services/i18n.service'; -import MText from './MText'; - -/** - * Tag Opt in Modal - */ -@inject('hashtag') -@observer -export default class TagOptinModal extends Component { - state = { - showModal: false, - }; - - /** - * Show modal - */ - showModal = () => { - this.setState({ showModal: true }); - }; - - /** - * Hide modal - */ - dismissModal = () => { - this.setState({ showModal: false }); - }; - - /** - * Render - */ - render() { - return ( - - - - {i18n.t('hashtags.title')} - - - m.value)} - onTagDeleted={this.props.hashtag.deselect} - onTagAdded={this.props.hashtag.create} - /> - - - - ); - } -} - -const styles = StyleSheet.create({ - modalView: { - backgroundColor: '#fff', - padding: 10, - borderRadius: 5, - }, - modalHeader: { - flexDirection: 'row', - alignItems: 'center', - }, - modalTitle: { - flexGrow: 1, - fontFamily: 'Roboto', - fontSize: 14, - fontWeight: '600', - letterSpacing: 1, - marginLeft: 10, - }, - modalCloseIcon: { - padding: 5, - marginRight: 10, - alignSelf: 'flex-end', - }, -}); diff --git a/src/common/components/TagSelect.tsx b/src/common/components/TagSelect.tsx index 94f85ef18..c3e25cb2a 100644 --- a/src/common/components/TagSelect.tsx +++ b/src/common/components/TagSelect.tsx @@ -1,10 +1,8 @@ -//@ts-nocheck import React, { Component } from 'react'; import { observer, inject } from 'mobx-react'; import { TouchableOpacity, StyleSheet, - ScrollView, TextStyle, View, StyleProp, @@ -13,6 +11,7 @@ import { import ThemedStyles from '../../styles/ThemedStyles'; import MText from './MText'; +import type { HashtagStore } from '../stores/HashtagStore'; interface PropsType { tagStyle?: StyleProp; @@ -23,6 +22,8 @@ interface PropsType { onTagAdded: (string) => void; tags: Array<{ value: string; selected: boolean }>; disableSort?: boolean; + hashtag?: HashtagStore; + containerStyle?: ViewStyle; } /** @@ -35,28 +36,14 @@ export default class TagSelect extends Component { * Remove tag * @param {string} tag */ - async toogle(tag) { + async toggle(tag) { if (tag.selected) { await this.props.onTagDeleted(tag); } else { await this.props.onTagAdded(tag); } - this.onChange(); } - /** - * On change - */ - onChange() { - this.props.onChange && this.props.onChange(); - } - - toogleOne = tag => { - const hashstore = this.props.hashtag; - this.props.onSelectOne && - this.props.onSelectOne(hashstore.hashtag !== tag.value ? tag.value : ''); - }; - /** * Render */ @@ -76,37 +63,32 @@ export default class TagSelect extends Component { } = this.props; return ( - - - {tags.map((tag, i) => ( - + {tags.map((tag, i) => ( + this.toggle(tag)} + testID={tag.value + 'TestID'}> + this.toogle(tag)} - onLongPress={() => this.toogleOne(tag)} - testID={tag.value + 'TestID'}> - - #{tag.value} - - - ))} - - + styles.tagText, + textStyle, + tag.selected ? [theme.colorAction, textSelectedStyle] : null, + ]}> + #{tag.value} + + + ))} + ); } } diff --git a/src/common/components/Tags.tsx b/src/common/components/Tags.tsx index 07724f756..1efb1411d 100644 --- a/src/common/components/Tags.tsx +++ b/src/common/components/Tags.tsx @@ -220,9 +220,8 @@ export default class Tags extends PureComponent { params: { query: q }, }); } else { - this.props.navigation.navigate('Discovery', { - screen: 'DiscoverySearch', - params: { query: q }, + this.props.navigation.push('DiscoverySearch', { + query: q, }); } }; diff --git a/src/common/components/bottom-sheet/BottomSheetModal.tsx b/src/common/components/bottom-sheet/BottomSheetModal.tsx index 0ae7c339f..c90f53942 100644 --- a/src/common/components/bottom-sheet/BottomSheetModal.tsx +++ b/src/common/components/bottom-sheet/BottomSheetModal.tsx @@ -89,6 +89,7 @@ const MBottomSheetModal = forwardRef( topInset={StatusBar.currentHeight || 0} handleComponent={renderHandle} snapPoints={animatedSnapPoints} + stackBehavior="push" handleHeight={animatedHandleHeight} contentHeight={animatedContentHeight} backdropComponent={renderBackdrop} diff --git a/src/common/components/controls/DatePicker.tsx b/src/common/components/controls/DatePicker.tsx index 459c2d0af..06b0dcbaa 100644 --- a/src/common/components/controls/DatePicker.tsx +++ b/src/common/components/controls/DatePicker.tsx @@ -1,6 +1,6 @@ import { observer, useLocalStore } from 'mobx-react'; import React from 'react'; -import { ViewStyle } from 'react-native'; +import { Keyboard, ViewStyle } from 'react-native'; import i18n from '../../services/i18n.service'; import { B1, B2, Column, Icon, PressableLine, Row } from '~ui'; import ThemedStyles from '~/styles/ThemedStyles'; @@ -54,6 +54,8 @@ const DatePicker = observer((props: PropsType) => { : ''; }, openPicker() { + // we dismiss the keyboard in case it is open + Keyboard.dismiss(); ref.current?.present(); }, closePicker() { diff --git a/src/common/components/explicit/ExplicitOverlay.tsx b/src/common/components/explicit/ExplicitOverlay.tsx index 84284eb61..ecce11e0c 100644 --- a/src/common/components/explicit/ExplicitOverlay.tsx +++ b/src/common/components/explicit/ExplicitOverlay.tsx @@ -48,6 +48,7 @@ export default class ExplicitOverlay extends PureComponent { }; getLocalizedReasons() { + //@ts-ignore const reasons = this.props.entity.nsfw?.map(i => i18n.t(`nsfw.${i}`)); if (!reasons) { diff --git a/src/common/components/friendly-captcha/FriendlyCaptcha.tsx b/src/common/components/friendly-captcha/FriendlyCaptcha.tsx new file mode 100644 index 000000000..eaaa65e57 --- /dev/null +++ b/src/common/components/friendly-captcha/FriendlyCaptcha.tsx @@ -0,0 +1,101 @@ +import { observer } from 'mobx-react'; +import React, { + forwardRef, + useCallback, + useImperativeHandle, + useRef, +} from 'react'; +import WebView from 'react-native-webview'; +import openUrlService from '~/common/services/open-url.service'; +import { MINDS_API_URI } from '~/config/Config'; +import ThemedStyles from '~/styles/ThemedStyles'; +import html from './html'; + +interface FriendlyCaptchaProps { + onSolved: (solution: string) => void; + onError?: (error: string) => void; +} + +const webViewSource = { + html, + baseUrl: MINDS_API_URI, +}; + +const whiteListAll = ['*']; + +/** + * Friendly captcha component using a webview + */ +function FriendlyCaptcha({ onSolved, onError }: FriendlyCaptchaProps, ref) { + const webViewRef = useRef(null); + /** + * receives done or error callbacks from the webview + */ + const onMessage = useCallback( + event => { + try { + const { solution, error } = JSON.parse(event.nativeEvent.data); + + if (solution) { + onSolved(solution); + } + + if (error) { + onError?.(error); + } + } catch (e) { + console.error('[FriendlyCaptcha] Something went wrong', e); + onError?.(String(e)); + } + }, + [onError, onSolved], + ); + + useImperativeHandle( + ref, + () => ({ + reset: () => webViewRef.current?.injectJavaScript('reset()'), + }), + [], + ); + + /** + * If the webview was navigating to an external url, open it using our openUrlService + */ + const onNavigation = useCallback(request => { + if (!request.url.includes(MINDS_API_URI)) { + openUrlService.open(request.url); + return false; + } + + return true; + }, []); + + return ( + + ); +} + +const containerStyle = { + backgroundColor: 'transparent', + height: 60, + width: '100%', +}; + +export default observer(forwardRef(FriendlyCaptcha)); diff --git a/src/common/components/friendly-captcha/html.ts b/src/common/components/friendly-captcha/html.ts new file mode 100644 index 000000000..5c09c2eb1 --- /dev/null +++ b/src/common/components/friendly-captcha/html.ts @@ -0,0 +1,151 @@ +export default ` + + + + + + + + + +
+ + + + +`; diff --git a/src/common/components/interactions/InteractionsBottomSheet.tsx b/src/common/components/interactions/InteractionsBottomSheet.tsx index ff42a2a2d..6f21cf015 100644 --- a/src/common/components/interactions/InteractionsBottomSheet.tsx +++ b/src/common/components/interactions/InteractionsBottomSheet.tsx @@ -1,5 +1,5 @@ import React, { forwardRef, useCallback, useMemo, useRef } from 'react'; - +import BottomSheet from '../bottom-sheet/BottomSheet'; import { observer, useLocalStore } from 'mobx-react'; import { Platform, StyleSheet, View } from 'react-native'; import BaseModel from '../../BaseModel'; @@ -19,8 +19,6 @@ import ChannelListItemPlaceholder from '../ChannelListItemPlaceholder'; import ActivityPlaceHolder from '../../../newsfeed/ActivityPlaceHolder'; import MText from '../MText'; import { useNavigation } from '@react-navigation/core'; -import { BottomSheetModal } from '@gorhom/bottom-sheet'; -import { renderBackdrop } from '../bottom-sheet/BottomSheet'; type Interactions = | 'upVotes' @@ -84,7 +82,7 @@ const InteractionsBottomSheet: React.ForwardRefRenderFunction< const keepOpen = typeof props.keepOpen === 'boolean' ? props.keepOpen : true; const navigation = useNavigation(); const footerStyle = useStyle(styles.cancelContainer, { - paddingBottom: bottomInsets + Platform.select({ default: 25, android: 45 }), + paddingBottom: bottomInsets + Platform.select({ default: 0, android: 20 }), paddingTop: bottomInsets * 1.5, }); const footerGradientColors = useMemo( @@ -104,11 +102,11 @@ const InteractionsBottomSheet: React.ForwardRefRenderFunction< this.visible = visible; }, show() { - bottomSheetRef.current?.present(); + bottomSheetRef.current?.expand(); store.visible = true; }, hide() { - bottomSheetRef.current?.dismiss(); + bottomSheetRef.current?.close(); /** * we don't turn visibility off, because then * the offsetlist will be unmounted and the data, @@ -227,20 +225,19 @@ const InteractionsBottomSheet: React.ForwardRefRenderFunction< }, })); - const close = React.useCallback(() => bottomSheetRef.current?.dismiss(), [ + const close = React.useCallback(() => bottomSheetRef.current?.close(), [ bottomSheetRef, ]); const onBottomSheetVisibilityChange = useCallback( (visible: number) => { const shouldShow = visible >= 0; - setTimeout(() => { - if (keepOpen && shouldShow) { - store.setVisibility(shouldShow); - } else { - store.setVisibility(shouldShow); - } - }, 500); + + if (keepOpen && shouldShow) { + store.setVisibility(shouldShow); + } else { + store.setVisibility(shouldShow); + } }, [keepOpen], ); @@ -295,16 +292,11 @@ const InteractionsBottomSheet: React.ForwardRefRenderFunction< ]); return ( - + snapPoints={props.snapPoints}> {store.visible && ( <> @@ -327,12 +319,10 @@ const InteractionsBottomSheet: React.ForwardRefRenderFunction< )} - + ); }; -const DEFAULT_SNAP_POINTS = ['80%']; - const styles = ThemedStyles.create({ container: ['bgPrimaryBackground', 'flexContainer'], navbarContainer: ['padding2x', 'alignCenter', 'bgPrimaryBackground'], diff --git a/src/common/components/password-input/PasswordInput.tsx b/src/common/components/password-input/PasswordInput.tsx index 6b2c5677d..d59809bbd 100644 --- a/src/common/components/password-input/PasswordInput.tsx +++ b/src/common/components/password-input/PasswordInput.tsx @@ -1,71 +1,53 @@ import React from 'react'; -import { observer } from 'mobx-react'; -import { ColorValue, ViewStyle, TextStyle, View } from 'react-native'; +import { ColorValue, View } from 'react-native'; import Tooltip from '../Tooltip'; import PasswordValidator from './PasswordValidator'; import ThemedStyles from '../../../styles/ThemedStyles'; -import InputContainer from '../InputContainer'; +import InputContainer, { InputContainerPropsType } from '../InputContainer'; import i18n from '../../services/i18n.service'; import Icon from 'react-native-vector-icons/Ionicons'; import { IS_IOS } from '../../../config/Config'; -import { PropsType as InputPropsType } from '../Input'; - -type StoreType = { - password: string; - focused: boolean; - hidePassword: boolean; - focus: () => void; - blur: () => void; - setPassword: (string) => void; -} & any; type PropsType = { - store: StoreType; - tooltipBackground: ColorValue; - inputContainerStyle?: ViewStyle | ViewStyle[]; - inputStyle?: any; - inputProps?: InputPropsType; - inputLabelStyle?: TextStyle | TextStyle[]; -}; + tooltipBackground?: ColorValue; + showValidator?: boolean; +} & InputContainerPropsType; -const PasswordInput = observer(({ store, ...props }: PropsType) => { +const PasswordInput = ({ + showValidator = false, + tooltipBackground, + ...props +}: PropsType) => { const theme = ThemedStyles.style; + const [showPassword, setShowPassword] = React.useState(false); + + const toggle = () => setShowPassword(!showPassword); + return ( - {!!store.password && store.focused && ( + {showValidator && ( - + )} ); -}); +}; export default PasswordInput; diff --git a/src/common/components/phoneValidation/v2/createPhoneValidationStore.ts b/src/common/components/phoneValidation/v2/createPhoneValidationStore.ts index 586ed059c..080a81fd1 100644 --- a/src/common/components/phoneValidation/v2/createPhoneValidationStore.ts +++ b/src/common/components/phoneValidation/v2/createPhoneValidationStore.ts @@ -77,7 +77,8 @@ const createPhoneValidationStore = ({ this.isConfirming(secret); } catch (e) { - const error = (e && e.message) || 'Unknown server error'; + const error = + e instanceof Error && e.message ? e.message : 'Unknown server error'; this.setInProgress(false); this.setError(error); throw e; @@ -103,7 +104,8 @@ const createPhoneValidationStore = ({ onConfirm && onConfirm(true); NavigationService.goBack(); } catch (e) { - const error = (e && e.message) || 'Unknown server error'; + const error = + e instanceof Error && e.message ? e.message : 'Unknown server error'; this.setError(error); logService.exception(e); throw e; @@ -116,7 +118,11 @@ const createPhoneValidationStore = ({ NavigationService.goBack(); }, confirmAction() { - if (this.inProgress || !this.canConfirm) { + if (!this.canConfirm) { + this.setError(i18n.t('onboarding.confirmationCodeInvalid')); + return null; + } + if (this.inProgress) { return null; } diff --git a/src/common/components/social-compass/Questions.tsx b/src/common/components/social-compass/Questions.tsx index e092e3d78..11fbec03d 100644 --- a/src/common/components/social-compass/Questions.tsx +++ b/src/common/components/social-compass/Questions.tsx @@ -57,7 +57,7 @@ const Questions = observer(({ onSubmit, ...props }: PropsType) => { const _onSubmit = useCallback(async () => { await answer(); - showNotification(i18n.t('socialCompass.thanks'), 'success', 3000, 'top'); + showNotification(i18n.t('socialCompass.thanks'), 'success', 3000); onSubmit(); }, [answer, onSubmit]); // #endregion diff --git a/src/common/components/social-compass/SocialCompassPrompt.tsx b/src/common/components/social-compass/SocialCompassPrompt.tsx index 1e227b382..3589a8406 100644 --- a/src/common/components/social-compass/SocialCompassPrompt.tsx +++ b/src/common/components/social-compass/SocialCompassPrompt.tsx @@ -1,3 +1,4 @@ +import { observer } from 'mobx-react'; import React, { useCallback, useEffect, useState } from 'react'; import MText from '~/common/components/MText'; import { storages } from '~/common/services/storage/storages.service'; @@ -19,7 +20,7 @@ const PROMPT_DISMISS_DURATION = 3 * 24 * 60 * 60 * 1000; // 3 days const SOCIAL_COMPASS_QUESTIONNAIRE_DISMISSED_KEY = 'social-compass-questionnaire:dismissed'; -const SocialCompassPrompt = ({}: PropsType) => { +const SocialCompassPrompt = observer(({}: PropsType) => { const ref = React.useRef(); const { result: questionsResult, loading } = useQuestions(); const [dismissed, dismiss] = useDismissHandler(questionsResult); @@ -62,7 +63,7 @@ const SocialCompassPrompt = ({}: PropsType) => { ); -}; +}); const styles = ThemedStyles.create({ title: [ @@ -84,6 +85,7 @@ export default SocialCompassPrompt; function useDismissHandler(questionsResult): [boolean | undefined, () => void] { const answersProvideed = questionsResult?.answersProvided; + const isLoggedIn = questionsResult?.isLoggedIn; const [dismissed, setDismissed] = useState(undefined); const dismiss = useCallback(async () => { @@ -96,7 +98,7 @@ function useDismissHandler(questionsResult): [boolean | undefined, () => void] { // determine whether we've already answered the questions or not useEffect(() => { - if (!questionsResult) { + if (!questionsResult || isLoggedIn === false) { return; } diff --git a/src/common/components/social-compass/useAnswers.ts b/src/common/components/social-compass/useAnswers.ts index c6bfdb229..648243159 100644 --- a/src/common/components/social-compass/useAnswers.ts +++ b/src/common/components/social-compass/useAnswers.ts @@ -1,8 +1,8 @@ -import { useApiPost } from '../../hooks/useApiFetch'; +import { useApiCall } from '../../hooks/useApiFetch'; import { IQuestion } from './useQuestions'; export const useAnswers = (questions: IQuestion[]) => { - const { post, ...rest } = useApiPost('api/v3/social-compass/answers'); + const { post, ...rest } = useApiCall('api/v3/social-compass/answers'); return { ...rest, diff --git a/src/common/components/tier-management/TiersList.tsx b/src/common/components/tier-management/TiersList.tsx index d4fbe784a..d6415897f 100644 --- a/src/common/components/tier-management/TiersList.tsx +++ b/src/common/components/tier-management/TiersList.tsx @@ -1,6 +1,6 @@ import { observer } from 'mobx-react'; import React from 'react'; -import { View, Image } from 'react-native'; +import { View } from 'react-native'; import { TierStoreType } from '../../../compose/PosterOptions/monetize/MembershipMonetizeScreen'; import { SupportTiersType } from '../../../wire/WireTypes'; import MIcon from 'react-native-vector-icons/MaterialCommunityIcons'; @@ -8,7 +8,7 @@ import MenuItem from '../menus/MenuItem'; import i18n from '../../services/i18n.service'; import ThemedStyles from '../../../styles/ThemedStyles'; import { navToTierScreen } from './TierManagementScreen'; -// import Button from '../../../common/components/Button'; +import Empty from '~/common/components/Empty'; import MText from '../MText'; import { Button } from '~ui'; @@ -38,17 +38,9 @@ const TiersList = observer( if (!tiers || tiers.length === 0) { return ( - - - - {i18n.t('settings.noTiersTitle')} - - {i18n.t('settings.noTiersSubTitle')} - - + - + ); } diff --git a/src/common/contexts/index.ts b/src/common/contexts/index.ts index 6a5fc067d..a5b6b37b7 100644 --- a/src/common/contexts/index.ts +++ b/src/common/contexts/index.ts @@ -5,15 +5,14 @@ import blogs from '../../blogs/BlogsStore'; import wire from '../../wire/WireStore'; import groups from '../../groups/GroupsStore'; import groupView from '../../groups/GroupViewStore'; -import channelSubscribersStore from '../../channel/subscribers/ChannelSubscribersStore'; import hashtag from '../../common/stores/HashtagStore'; -import SubscriptionRequestStore from '../../channel/subscription/SubscriptionRequestStore'; import reportStore from '../../report/ReportStore'; import wallet from '../../wallet/WalletStore'; import sessionService from '../services/session.service'; import logService from '../services/log.service'; import DiscoveryV2Store from '../../discovery/v2/DiscoveryV2Store'; +import { RecentSubscriptionsStore } from '~/channel/subscription/RecentSubscriptionsStore'; /** * This is initialized by /src/AppStores.ts and uses MobXProviderContext @@ -21,7 +20,6 @@ import DiscoveryV2Store from '../../discovery/v2/DiscoveryV2Store'; */ export function createClassStores() { const stores = { - subscriptionRequest: new SubscriptionRequestStore(), newsfeed: new newsfeed(), user: new user(), blogs: new blogs(), @@ -29,12 +27,12 @@ export function createClassStores() { boost: new boost(), groups: new groups(), groupView: new groupView(), - channelSubscribersStore: new channelSubscribersStore(), hashtag: new hashtag(), reportstore: new reportStore(), discoveryV2Store: new DiscoveryV2Store(), mindsPlusV2Store: new DiscoveryV2Store(true), wallet: new wallet(), + recentSubscriptions: new RecentSubscriptionsStore(), }; sessionService.onLogout(() => { for (const id in stores) { diff --git a/src/common/hooks/useApiFetch.ts b/src/common/hooks/useApiFetch.ts index 7ca71775f..9df841047 100644 --- a/src/common/hooks/useApiFetch.ts +++ b/src/common/hooks/useApiFetch.ts @@ -271,7 +271,7 @@ export default function useApiFetch( * @param url string * @param method string */ -export function useApiPost( +export function useApiCall( url: string, method: MethodType = 'post', ): PostStore { diff --git a/src/common/hooks/useModelEvent.ts b/src/common/hooks/useModelEvent.ts new file mode 100644 index 000000000..9d5bb4e72 --- /dev/null +++ b/src/common/hooks/useModelEvent.ts @@ -0,0 +1,20 @@ +import { useEffect } from 'react'; +import BaseModel from '../BaseModel'; + +/** + * helper useEffect style hook to subscribe/unsubscribe to/from model events + */ +export default function useModelEvent( + model: typeof BaseModel, + eventName: string, + fn: (...args: any) => void, + deps: React.DependencyList = [], +) { + return useEffect(() => { + model.events.on(eventName, fn); + + return () => { + model.events.off(eventName, fn); + }; + }, deps); +} diff --git a/src/common/services/api.service.ts b/src/common/services/api.service.ts index 5597b185e..e11b40db5 100644 --- a/src/common/services/api.service.ts +++ b/src/common/services/api.service.ts @@ -32,6 +32,7 @@ import i18n from './i18n.service'; import NavigationService from '../../navigation/NavigationService'; import CookieManager from '@react-native-cookies/cookies'; import analyticsService from './analytics.service'; +import AuthService from '~/auth/AuthService'; export interface ApiResponse { status: 'success' | 'error'; @@ -39,6 +40,12 @@ export interface ApiResponse { errorId?: string; } +/** + * Parameters array (new format) + * This array is transformed to param[]=value¶m[]=value + */ +export class ParamsArray extends Array {} + /** * Api Error */ @@ -53,10 +60,13 @@ export class ApiError extends Error { export class NetworkError extends Error {} -export const isApiError = function (err) { +export class TwoFactorError extends Error {} + +export const isApiError = function (err): err is ApiError { return err instanceof ApiError; }; -export const isNetworkError = function (err) { + +export const isNetworkError = function (err): err is NetworkError { return err instanceof NetworkError; }; @@ -98,6 +108,8 @@ export class ApiService { }).then(done => { console.log('CookieManager.set =>', done); }); + } else { + CookieManager.clearByName('https://www.minds.com', 'canary'); } if (MINDS_STAGING) { CookieManager.set('https://www.minds.com', { @@ -107,6 +119,8 @@ export class ApiService { }).then(done => { console.log('CookieManager.set =>', done); }); + } else { + CookieManager.clearByName('https://www.minds.com', 'staging'); } this.axios = @@ -128,6 +142,7 @@ export class ApiService { }, async error => { const { config: originalReq, response, request } = error; + if (response) { // 2FA authentication interceptor if ( @@ -170,47 +185,63 @@ export class ApiService { const hasRecovery = mfaType === 'totp' && data.password && data.username; + const state = NavigationService.getCurrentState(); + + if (state?.name === 'TwoFactorConfirmation') { + // here, we've made a request and the server is requiring 2fa but + // we're already on the 2fa screen so we'll just throw an error + throw new TwoFactorError(error); + } + try { // console.log( NavigationService.navigate) - const promise = new Promise((resolve, reject) => { + const code = await new Promise((resolve, reject) => { NavigationService.navigate('TwoFactorConfirmation', { - onConfirm: resolve, + onConfirm: async (confirmationCode?: string) => { + // if confirmation code was received successfully, + // resolve the promise and continue the original request + if (confirmationCode) { + return resolve(confirmationCode); + } + + // if the code wasn't received, it's a resend confirmation code attempt, + // so make another request similar to the original request (while keping the original request pending) + // as a means of resending the confirmation code + return this.axios.request(originalReq); + }, onCancel: reject, mfaType, oldCode, showRecovery: hasRecovery, }); }); - const code = await promise; - - if (code) { - // is a recovery code? - if (hasRecovery && code.length > 6) { - const recoveryResponse = await this.post( - 'api/v3/security/totp/recovery', - { - username: data.username, - password: data.password, - recovery_code: code, - }, - ); - if (!recoveryResponse.matches) { - throw new UserError(i18n.t('auth.recoveryFail')); - } - } else { - originalReq.headers['X-MINDS-2FA-CODE'] = code; - - if (smsKey) { - originalReq.headers['X-MINDS-SMS-2FA-KEY'] = smsKey; - } - - if (emailKey) { - originalReq.headers['X-MINDS-EMAIL-2FA-KEY'] = emailKey; - } + + // is a recovery code? + if (hasRecovery && code.length > 6) { + const recoveryResponse = await this.post( + 'api/v3/security/totp/recovery', + { + username: data.username, + password: data.password, + recovery_code: code, + }, + ); + if (!recoveryResponse.matches) { + throw new UserError(i18n.t('auth.recoveryFail')); + } + } else { + originalReq.headers['X-MINDS-2FA-CODE'] = code; + + if (smsKey) { + originalReq.headers['X-MINDS-SMS-2FA-KEY'] = smsKey; } - originalReq.oldCode = code; + if (emailKey) { + originalReq.headers['X-MINDS-EMAIL-2FA-KEY'] = emailKey; + } } + + originalReq.oldCode = code; return this.axios.request(originalReq); } catch (err) { throw new UserError('Canceled'); @@ -223,21 +254,35 @@ export class ApiService { !originalReq._isRetry && isNot401Exception(originalReq.url) ) { + logService.info( + `[ApiService] refreshing token for ${originalReq.url}`, + ); await this.tokenRefresh(() => { originalReq._isRetry = true; + logService.info( + '[ApiService] retrying request ' + originalReq.url, + ); this.axios.request(originalReq); }); + + logService.info( + `[ApiService] refreshed token for ${originalReq.url}`, + ); + originalReq._isRetry = true; + logService.info('[ApiService] retrying request ' + originalReq.url); return this.axios.request(originalReq); } // prompt the user if email verification is needed for this endpoint if (isApiForbidden(response) && response.data.must_verify) { this.setMustVerify(true); - throw new ApiError(i18n.t('emailConfirm.confirm')); + throw new UserError(i18n.t('emailConfirm.confirm'), 'info', () => + NavigationService.navigate('VerifyEmail'), + ); } - this.checkResponse(response); + this.checkResponse(response, originalReq.url); } else if (request) { throw new NetworkError(error.message); // server down or there is not connectivity } @@ -269,21 +314,6 @@ export class ApiService { : session.refreshAuthToken(); } - async tryToRelog(onLogin: Function) { - const onCancel = () => { - if (session.sessionExpired) { - session.logoutFrom(session.activeIndex); - } - }; - const promise = new Promise((resolve, reject) => { - NavigationService.navigate('RelogScreen', { - onLogin, - onCancel, - }); - }); - await promise; - } - /** * Refresh token (only one call at the time) */ @@ -294,7 +324,7 @@ export class ApiService { try { await this.refreshPromise; this.refreshPromise = null; - } catch (error) { + } catch (error: any) { this.refreshPromise = null; if ( (isTokenExpired(error) || @@ -305,14 +335,17 @@ export class ApiService { session.setSessionExpiredFor(true, this.sessionIndex); } else { session.setSessionExpired(true); - await this.tryToRelog(onLogin); + AuthService.tryToRelog(onLogin); } } throw error; } } - checkResponse(response: AxiosResponse): T { + checkResponse( + response: AxiosResponse, + url?: string, + ): T { const data = response.data; // Failed on API side @@ -325,6 +358,10 @@ export class ApiService { throw apiError; } if (response.status >= 500) { + logService.info( + '[ApiService] server error', + response.request?.url || url, + ); throw new ApiError('Server error ' + response.status); } @@ -369,7 +406,7 @@ export class ApiService { ...customHeaders, }; - if (this.accessToken && !headers.Authorization) { + if (this.accessToken) { headers = { ...headers, ...this.buildAuthorizationHeader(this.accessToken), @@ -388,10 +425,8 @@ export class ApiService { * @param {string} url * @param {any} params */ - buildUrl(url, params: any = {}) { - if (!params) { - params = {}; - } + buildUrl(url, _params: any = {}) { + const params = Object.assign({}, _params); if (process.env.JEST_WORKER_ID === undefined) { params.cb = Date.now(); //bust the cache every time } @@ -412,6 +447,16 @@ export class ApiService { getParamsString(params) { return Object.keys(params) .map(k => { + if (params[k] instanceof ParamsArray) { + return params[k] + .map( + (value, index) => + `${encodeURIComponent(k)}[${index}]=${encodeURIComponent( + value, + )}`, + ) + .join('&'); + } return encodeURIComponent(k) + '=' + encodeURIComponent(params[k]); }) .join('&'); diff --git a/src/common/services/entities.service.ts b/src/common/services/entities.service.ts index 556660736..bb8d8e64f 100644 --- a/src/common/services/entities.service.ts +++ b/src/common/services/entities.service.ts @@ -1,7 +1,7 @@ //@ts-nocheck import _ from 'lodash'; -import apiService, { isApiForbidden } from './api.service'; +import apiService, { isAbort, isApiForbidden } from './api.service'; import GroupModel from '../../groups/GroupModel'; import UserModel from '../../channel/UserModel'; import BlogModel from '../../blogs/BlogModel'; @@ -115,7 +115,7 @@ class EntitiesService { } } catch (err) { // we ignore the fetch error if there are local entities to show - if (urnsToResync.length === 0 || err.code === 'Abort') throw err; + if (urnsToResync.length === 0 || isAbort(err)) throw err; } } diff --git a/src/common/services/feeds.service.ts b/src/common/services/feeds.service.ts index a4a97b907..b3a49491a 100644 --- a/src/common/services/feeds.service.ts +++ b/src/common/services/feeds.service.ts @@ -1,9 +1,8 @@ //@ts-nocheck import logService from './log.service'; -import apiService, { isNetworkError } from './api.service'; +import apiService, { isAbort, isNetworkError } from './api.service'; import entitiesService from './entities.service'; import feedsStorage from './storage/feeds.storage'; -import { showMessage } from 'react-native-flash-message'; import i18n from './i18n.service'; import connectivityService from './connectivity.service'; import boostedContentService from './boosted-content.service'; @@ -11,6 +10,7 @@ import BaseModel from '../BaseModel'; import { Platform } from 'react-native'; import { GOOGLE_PLAY_STORE } from '../../config/Config'; import _ from 'lodash'; +import { showNotification } from 'AppMessages'; export type FeedRecordType = { owner_guid: string; @@ -48,6 +48,11 @@ export default class FeedsService { */ endpoint: string = ''; + /** + * @var {string} + */ + countEndpoint: string = ''; + /** * @var {Object} */ @@ -83,6 +88,11 @@ export default class FeedsService { */ fallbackIndex = -1; + /** + * the last time we checked for new posts + */ + feedLastFetchedAt?: number; + /** * Get entities from the current page */ @@ -207,6 +217,16 @@ export default class FeedsService { return this; } + /** + * Set count endpoint + * @param {string} endpoint + * @returns {FeedsService} + */ + setCountEndpoint(endpoint: string): FeedsService { + this.countEndpoint = endpoint; + return this; + } + /** * Set parameters * @param {Object} params @@ -295,7 +315,9 @@ export default class FeedsService { if (this.paginated && more) { params.from_timestamp = this.pagingToken; } + const fetchTime = Date.now(); const response = await apiService.get(this.endpoint, params, this); + this.feedLastFetchedAt = fetchTime; if (response.entities && response.entities.length) { if (response.entities.length < params.limit) { @@ -369,7 +391,7 @@ export default class FeedsService { await this.fetch(); } } catch (err) { - if (err.code === 'Abort') { + if (isAbort(err)) { return; } @@ -388,7 +410,7 @@ export default class FeedsService { try { await this.fetch(); } catch (err) { - if (err.code === 'Abort') { + if (isAbort(err)) { return; } @@ -401,18 +423,14 @@ export default class FeedsService { throw err; } - showMessage({ - floating: true, - position: 'top', - message: connectivityService.isConnected + showNotification( + connectivityService.isConnected ? i18n.t('cantReachServer') : i18n.t('noInternet'), - description: i18n.t('showingStored'), - duration: 1300, - backgroundColor: '#FFDD63DD', - color: '#222222', - type: 'info', - }); + 'info', + 3000, + i18n.t('showingStored'), + ); } } @@ -449,4 +467,26 @@ export default class FeedsService { this.feed = []; return this; } + + /** + * counts newsfeed posts created after fromTimestamp + * @param { number } fromTimestamp + * @returns { Promise } + */ + async count(fromTimestamp?: number): Promise { + if (!this.countEndpoint) { + throw new Error('[FeedsService] No count endpoint'); + } + + if (!fromTimestamp) { + throw new Error('[FeedsService] No fromTimestamp provided'); + } + + const params = { + from_timestamp: fromTimestamp, + }; + + const result = await apiService.get(this.countEndpoint, params, this); + return result.count; + } } diff --git a/src/common/services/i18n.service.ts b/src/common/services/i18n.service.ts index 37600fef0..b0108f941 100644 --- a/src/common/services/i18n.service.ts +++ b/src/common/services/i18n.service.ts @@ -1,17 +1,37 @@ import React from 'react'; -import { get } from 'lodash'; +import { get, memoize } from 'lodash'; import * as RNLocalize from 'react-native-localize'; import i18n from 'i18n-js'; -import { memoize } from 'lodash'; import { I18nManager } from 'react-native'; import moment from 'moment-timezone'; -import { observable, action } from 'mobx'; +import { action, observable } from 'mobx'; import { storages } from './storage/storages.service'; +// importing directly to use the type +import enLocale from '../../../locales/en.json'; + +// get all possible key paths +type DeepKeys = T extends object + ? { + // @ts-ignore + [K in keyof T]-?: `${K & string}` | Concat>; + }[keyof T] + : ''; + +// or: only get leaf and no intermediate key path +type DeepLeafKeys = T extends object + ? // @ts-ignore + { [K in keyof T]-?: Concat> }[keyof T] + : ''; +type Concat = `${K}${'' extends P + ? '' + : '.'}${P}`; + +export type LocaleType = typeof enLocale; const translationGetters = { // lazy requires (metro bundler does not support symlinks) en: () => { - return require('../../../locales/en.json'); + return enLocale; }, es: () => { require('moment/locale/es'); @@ -143,7 +163,7 @@ class I18nService { /** * Translate */ - t(scope: string, options?: object) { + t

>(scope: P, options?: object): string { return translate(scope, options); } @@ -260,7 +280,9 @@ class I18nService { storages.app.setString('locale', locale); } // clear translation cache - translate.cache.clear(); + if (translate.cache !== undefined && translate.cache.clear !== undefined) { + translate.cache.clear(); + } // update layout direction I18nManager.forceRTL(false); diff --git a/src/common/services/image-picker.service.ts b/src/common/services/image-picker.service.ts index 66bff5f41..46dfba97d 100644 --- a/src/common/services/image-picker.service.ts +++ b/src/common/services/image-picker.service.ts @@ -188,7 +188,10 @@ class ImagePickerService { ); } } catch (err) { - if (!err.message.includes('cancelled image selection')) { + if ( + err instanceof Error && + !err.message.includes('cancelled image selection') + ) { throw err; } return false; diff --git a/src/common/services/log.service.ts b/src/common/services/log.service.ts index 4a6a525ef..f819e13e9 100644 --- a/src/common/services/log.service.ts +++ b/src/common/services/log.service.ts @@ -35,7 +35,7 @@ class LogService { // deviceLog.error(...args); } - exception(prepend, error?: Error = undefined) { + exception(prepend, error?: any) { if (!error) { error = prepend; prepend = null; @@ -47,6 +47,7 @@ class LogService { } if ( + error instanceof Error && shouldReportToSentry(error) && process.env.JEST_WORKER_ID === undefined && !__DEV__ diff --git a/src/common/services/permissions.service.ts b/src/common/services/permissions.service.ts index 603cb0f98..b72d508eb 100644 --- a/src/common/services/permissions.service.ts +++ b/src/common/services/permissions.service.ts @@ -157,7 +157,7 @@ class PermissionsService { return result === RESULTS.GRANTED; } catch (err) { console.warn(err); - return err; + return false; } } } diff --git a/src/common/services/push/v2/parsers.ts b/src/common/services/push/v2/parsers.ts index 66950bca9..52477571d 100644 --- a/src/common/services/push/v2/parsers.ts +++ b/src/common/services/push/v2/parsers.ts @@ -1,7 +1,6 @@ import navigation from '../../../../navigation/NavigationService'; import logService from '../../log.service'; import entitiesService from '../../entities.service'; -import featuresService from '../../features.service'; export const parseByEntityType = (data: any) => { const [entity_type_one, entity_type_two] = data.json.entity_type.split(':'); @@ -61,15 +60,9 @@ export const parseComment = async (data: any) => { }; export const parseReward = () => { - if (featuresService.has('crypto')) { - navigation.navigate('App', { - screen: 'Wallet', - }); - } else { - navigation.navigate('App', { - screen: 'Notifications', - }); - } + navigation.navigate('App', { + screen: 'Wallet', + }); }; export const error = (data: any, errorType: string) => { diff --git a/src/common/services/session.service.ts b/src/common/services/session.service.ts index 08c6eb56e..a0e3515b8 100644 --- a/src/common/services/session.service.ts +++ b/src/common/services/session.service.ts @@ -145,6 +145,12 @@ export class SessionService { } tokenCanRefresh(refreshToken?: RefreshToken) { + if (this.switchingAccount) { + logService.info( + '[sessionService] unable to refresh token when switching account', + ); + return false; + } if (!refreshToken) { return ( this.refreshToken && @@ -161,32 +167,38 @@ export class SessionService { } async refreshAuthToken() { - logService.info('[SessionService] refreshing token'); if (this.tokenCanRefresh()) { + logService.info('[SessionService] refreshing token...'); const tokens = await AuthService.refreshToken(); + tokens.pseudo_id = this.tokensData[this.activeIndex].pseudoId; this.setRefreshToken(tokens.refresh_token); this.setToken(tokens.access_token); this.tokensData[this.activeIndex] = this.buildSessionData(tokens); this.saveToStore(); + logService.info('[SessionService] token refreshed!'); } else { + logService.info("[SessionService] can't refreshing token"); throw new TokenExpiredError('Session Expired'); } } async refreshAuthTokenFrom(index: number) { - logService.info('[SessionService] refreshing token from'); const { refreshToken, accessToken } = this.tokensData[index]; if (this.tokenCanRefresh(refreshToken)) { + logService.info('[SessionService] refreshing token from'); const tokens = await AuthService.refreshToken( refreshToken.refresh_token, accessToken.access_token, ); + tokens.pseudo_id = this.tokensData[index].pseudoId; this.tokensData[index] = this.buildSessionData( tokens, this.tokensData[index].user, ); this.saveToStore(); + logService.info('[SessionService] token refreshed!'); } else { + logService.info("[SessionService] can't refreshing token"); throw new TokenExpiredError('Session Expired'); } } @@ -306,6 +318,10 @@ export class SessionService { // get session data from tokens returned by login const sessionData = this.buildSessionData(tokens); + // set expire + this.accessTokenExpires = sessionData.accessToken.access_token_expires; + this.refreshTokenExpires = sessionData.refreshToken.refresh_token_expires; + // add data to current tokens data array const tokensData = this.tokensData; tokensData.push(sessionData); @@ -334,6 +350,12 @@ export class SessionService { }, tokensData.user, ); + // set expire + this.accessTokenExpires = tokensData.accessToken.access_token_expires; + this.refreshTokenExpires = tokensData.refreshToken.refresh_token_expires; + + analyticsService.setUserId(tokensData.pseudoId); + this.saveToStore(); } @@ -405,6 +427,11 @@ export class SessionService { this.tokensData[index].user, ); this.tokensData[index] = sessionData; + + this.setSessionExpired(false); + // persist data + this.saveToStore(); + return true; } @@ -426,6 +453,8 @@ export class SessionService { this.guid = null; this.setToken(null); this.setRefreshToken(null); + this.accessTokenExpires = null; + this.refreshTokenExpires = null; this.setLoggedIn(false); if (clearStorage) { const tokensData = this.tokensData; diff --git a/src/common/services/translation.service.ts b/src/common/services/translation.service.ts index 657e567a5..0d0bd354c 100644 --- a/src/common/services/translation.service.ts +++ b/src/common/services/translation.service.ts @@ -50,7 +50,7 @@ class TranslationService { ); storages.app.setString( 'translation:userDefault', - response.userDefault, + response.userDefault || '', // if value is null it crashes the app on ios ); return response.languages; } catch (e) { diff --git a/src/common/stores/FeedStore.ts b/src/common/stores/FeedStore.ts index 97b207c50..f2ee06bec 100644 --- a/src/common/stores/FeedStore.ts +++ b/src/common/stores/FeedStore.ts @@ -1,4 +1,4 @@ -import { observable, action } from 'mobx'; +import { observable, action, runInAction } from 'mobx'; import logService from '../services/log.service'; import Viewed from './Viewed'; @@ -9,6 +9,8 @@ import type ActivityModel from '../../newsfeed/ActivityModel'; import BaseModel from '../BaseModel'; import FastImage from 'react-native-fast-image'; import settingsStore from '../../settings/SettingsStore'; +import { isAbort } from '../services/api.service'; +import { NEWSFEED_NEW_POST_POLL_INTERVAL } from '~/config/Config'; /** * Feed store @@ -76,6 +78,16 @@ export default class FeedStore { return this.feedsService.fallbackIndex; } + /** + * the new post polling interval + */ + private newPostInterval; + + /** + * the number of new posts we haven't seen yet + */ + @observable newPostsCount = 0; + /** * Class constructor * @param {boolean} includeMetadata include a metadata service @@ -255,12 +267,23 @@ export default class FeedStore { /** * Set endpoint for the feeds service * @param {string} endpoint + * @returns {FeedStore} */ setEndpoint(endpoint: string): FeedStore { this.feedsService.setEndpoint(endpoint); return this; } + /** + * Set count endpoint for the feeds service + * @param {string} endpoint + * @returns {FeedStore} + */ + setCountEndpoint(endpoint: string): FeedStore { + this.feedsService.setCountEndpoint(endpoint); + return this; + } + /** * Set inject boost * @param {boolean} injectBoost @@ -369,7 +392,7 @@ export default class FeedStore { this.addEntities(entities, replace); } catch (err) { // ignore aborts - if (err.code === 'Abort') return; + if (isAbort(err)) return; logService.exception('[FeedStore]', err); this.setErrorLoading(true); } finally { @@ -421,7 +444,7 @@ export default class FeedStore { this.addEntities(entities); } catch (err) { // ignore aborts - if (err.code === 'Abort') return; + if (isAbort(err)) return; logService.exception('[FeedStore]', err); this.setErrorLoading(true); } finally { @@ -455,7 +478,7 @@ export default class FeedStore { this.addEntities(entities); } catch (err) { // ignore aborts - if (err.code === 'Abort') return; + if (isAbort(err)) return; console.log(err); logService.exception('[FeedStore]', err); this.setErrorLoading(true); @@ -501,7 +524,7 @@ export default class FeedStore { this.addEntities(remoteEntities); } catch (err) { // ignore aborts - if (err.code === 'Abort') return; + if (isAbort(err)) return; console.log(err); logService.exception('[FeedStore]', err); if (this.entities.length === 0) this.setErrorLoading(true); @@ -536,7 +559,7 @@ export default class FeedStore { this.addEntities(entities); } catch (err) { // ignore aborts - if (err.code === 'Abort') return; + if (isAbort(err)) return; logService.exception('[FeedStore]', err); this.setErrorLoading(true); } finally { @@ -550,6 +573,8 @@ export default class FeedStore { @action async refresh() { this.refreshing = true; + this.newPostsCount = 0; + try { await this.fetchRemoteOrLocal(true); } catch (err) { @@ -580,6 +605,7 @@ export default class FeedStore { reset() { this.clear(); this.feedsService.clear(); + clearInterval(this.newPostInterval); } /** @@ -594,4 +620,28 @@ export default class FeedStore { setScheduledCount(count) { this.scheduledCount = count; } + + /** + * + * @param {() => boolean} hasFocus - A function that returns whether the screen has focus or not? + * @returns { Function } a function to remove the watcher + */ + public watchForUpdates(hasFocus: () => boolean): () => void { + clearInterval(this.newPostInterval); + this.newPostInterval = setInterval(async () => { + if (!hasFocus()) { + return; + } + + const count = await this.feedsService.count( + this.feedsService.feedLastFetchedAt, + ); + + runInAction(() => { + this.newPostsCount = count; + }); + }, NEWSFEED_NEW_POST_POLL_INTERVAL); + + return () => clearInterval(this.newPostInterval); + } } diff --git a/src/common/stores/HashtagStore.ts b/src/common/stores/HashtagStore.ts index 8b49f2570..a0eb345ca 100644 --- a/src/common/stores/HashtagStore.ts +++ b/src/common/stores/HashtagStore.ts @@ -7,7 +7,7 @@ import settingsStore from '../../settings/SettingsStore'; /** * Hashtag */ -class HashtagStore { +export class HashtagStore { @observable loading = false; @observable all = false; @observable hashtag = ''; diff --git a/src/common/stores/RichEmbedStore.ts b/src/common/stores/RichEmbedStore.ts index 19ae133b5..a9601bc9d 100644 --- a/src/common/stores/RichEmbedStore.ts +++ b/src/common/stores/RichEmbedStore.ts @@ -2,6 +2,7 @@ import { observable, action, runInAction } from 'mobx'; import RichEmbedService from '../services/rich-embed.service'; import Util from '../helpers/util'; import logService from '../services/log.service'; +import { Timeout } from '~/types/Common'; export type MetaType = { thumbnail?: string; @@ -18,7 +19,7 @@ export default class RichEmbedStore { @observable metaInProgress = false; @observable meta: MetaType = null; richEmbedUrl = ''; - _richEmbedFetchTimer: number | null = null; + _richEmbedFetchTimer: Timeout | null = null; setRichEmbedPromise: Promise | null = null; // used for testing /** diff --git a/src/common/ui/buttons/Button.tsx b/src/common/ui/buttons/Button.tsx index 596e5ccf7..9c8746a26 100644 --- a/src/common/ui/buttons/Button.tsx +++ b/src/common/ui/buttons/Button.tsx @@ -20,6 +20,7 @@ import { import { frameThrower } from '~ui/helpers'; import { COMMON_BUTTON_STYLES, FLAT_BUTTON_STYLES } from './tokens'; import { TRANSPARENCY, UNIT } from '~/styles/Tokens'; +import { Row, Spacer } from '../layout'; export type ButtonPropsType = { mode?: 'flat' | 'outline' | 'solid'; @@ -71,13 +72,15 @@ export const ButtonComponent = ({ icon, pressableProps, }: ButtonPropsType) => { + const iconOnly = icon && !children; + const containerStyle = [ styles.container, styles[mode], styles[size], styles[`${mode}_${type}`], styles[`${mode}_${size}`], - icon && styles.paddingLess, + iconOnly && styles.paddingLess, disabled && styles[`${mode}_disabled`], ]; @@ -229,6 +232,30 @@ export const ButtonComponent = ({ stateRef.current.state = 0; }; + const renderContent = () => { + let content; + const title = ( + + {text} + + ); + + if (iconOnly) { + content = icon; + } else if (icon) { + content = ( + + {icon ? {icon} : null} + {title} + + ); + } else { + content = title; + } + + return content; + }; + return ( {darkContent && } {/** Button Text */} - - {icon ? ( - icon - ) : ( - - {text} - - )} + + {renderContent()} diff --git a/src/common/ui/icons/map.ts b/src/common/ui/icons/map.ts index 6052c86d0..c2b4dfd2a 100644 --- a/src/common/ui/icons/map.ts +++ b/src/common/ui/icons/map.ts @@ -242,6 +242,15 @@ const ICON_MAP: { font: 'MaterialCommunityIcons', name: 'tune', }, + 'external-link': { + font: 'Feather', + name: 'external-link', + ratio: 0.8, + }, + 'arrow-up': { + font: 'MaterialCommunityIcons', + name: 'arrow-up', + }, }; export default ICON_MAP; diff --git a/src/compose/Camera/Camera.tsx b/src/compose/Camera/Camera.tsx index f738218cf..459ab3296 100644 --- a/src/compose/Camera/Camera.tsx +++ b/src/compose/Camera/Camera.tsx @@ -30,6 +30,7 @@ import useBestCameraAndFormat from './useBestCameraAndFormat'; import useCameraStyle from './useCameraStyle'; import ZoomGesture from './ZoomGesture'; import ZoomIndicator from './ZoomIndicator'; +import PressableScale from '~/common/components/PressableScale'; type CaptureScreenRouteProp = RouteProp; @@ -77,7 +78,10 @@ export default observer(function (props: PropsType) { // local store const store = useLocalStore(createCameraStore, { navigation, ...props }); - const [devices, device, formats, format] = useBestCameraAndFormat(store); + const [devices, device, formats, format] = useBestCameraAndFormat( + store, + props.mode, + ); const supportsCameraFlipping = React.useMemo( () => devices.back != null && devices.front != null, @@ -182,7 +186,7 @@ export default observer(function (props: PropsType) { ref={camera} style={StyleSheet.absoluteFill} device={device} - format={IS_IOS ? format : undefined} + format={format} fps={30} lowLightBoost={ device.supportsLowLightBoost && store.lowLightBoost @@ -215,12 +219,13 @@ export default observer(function (props: PropsType) { direction="right" delay={PRESENTATION_ORDER.third} style={orientationStyle.lowLight}> - store.toggleLowLightBoost()} - /> + store.toggleLowLightBoost()}> + + {store.recording && ( @@ -228,29 +233,48 @@ export default observer(function (props: PropsType) { style={[orientationStyle.clock, cleanTop]} timer={store.videoLimit} onTimer={onPress} + paused={!store.recordingPaused} /> )} {device && store.ready && ( - - - - {supportsHdr ? ( + {!store.recording && ( + + + + + + )} + {supportsHdr && !store.recording ? ( ) : ( )} + {store.recording && ( + + store.toggleRecording(camera)}> + + + + )} - {supportsFlash ? ( + {supportsFlash && !store.recording ? ( diff --git a/src/compose/Camera/FlashIcon.tsx b/src/compose/Camera/FlashIcon.tsx index 4a6e8ebd7..707cf98a7 100644 --- a/src/compose/Camera/FlashIcon.tsx +++ b/src/compose/Camera/FlashIcon.tsx @@ -4,7 +4,7 @@ import MIcon from 'react-native-vector-icons/MaterialCommunityIcons'; import type { CameraStore } from './createCameraStore'; import { observer } from 'mobx-react'; -import { View } from 'react-native'; +import PressableScale from '~/common/components/PressableScale'; type PropsType = { store: CameraStore; @@ -29,17 +29,12 @@ const FlashIcon: FC = ({ store, style }: PropsType) => { const autoStyle = [style, { position: 'absolute', top: -3, left: 0 }]; return ( - - + + {store.flashMode === 'auto' && ( - + )} - + ); }; diff --git a/src/compose/Camera/HdrIcon.tsx b/src/compose/Camera/HdrIcon.tsx index 8308ba76d..2c6fcd27d 100644 --- a/src/compose/Camera/HdrIcon.tsx +++ b/src/compose/Camera/HdrIcon.tsx @@ -3,6 +3,7 @@ import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; import type { CameraStore } from './createCameraStore'; import { observer } from 'mobx-react'; +import PressableScale from '~/common/components/PressableScale'; type PropsType = { store: CameraStore; @@ -17,12 +18,14 @@ const HdrIcon: FC = ({ store, style }: PropsType) => { const onPress = React.useCallback(() => store.toggleHdr(), [store]); return ( - + + + ); }; diff --git a/src/compose/Camera/RecordButton.tsx b/src/compose/Camera/RecordButton.tsx index 4541fa97a..29298251b 100644 --- a/src/compose/Camera/RecordButton.tsx +++ b/src/compose/Camera/RecordButton.tsx @@ -1,8 +1,7 @@ import React, { useMemo } from 'react'; -import { StyleSheet, View } from 'react-native'; +import { Pressable, StyleSheet, View } from 'react-native'; import Animated from 'react-native-reanimated'; import { mix, useTransition } from 'react-native-redash'; -import { TouchableOpacity } from 'react-native-gesture-handler'; import { observer } from 'mobx-react'; import Pulse from '../../common/components/Pulse'; @@ -55,13 +54,13 @@ export default observer(function (props: PropsType) { return ( {props.pulse && } - - + ); }); diff --git a/src/compose/Camera/createCameraStore.ts b/src/compose/Camera/createCameraStore.ts index 23b1e8dcc..b57e8b08e 100644 --- a/src/compose/Camera/createCameraStore.ts +++ b/src/compose/Camera/createCameraStore.ts @@ -1,4 +1,5 @@ import { Platform } from 'react-native'; +import { Timeout } from '~/types/Common'; import mindsConfigService from '../../common/services/minds-config.service'; type FocusPoint = { @@ -6,7 +7,7 @@ type FocusPoint = { y: number; }; -let focusTimer: null | number = null; +let focusTimer: null | Timeout = null; type FlashType = 'off' | 'on' | 'auto'; type CameraType = 'front' | 'back'; @@ -19,10 +20,20 @@ const createCameraStore = p => { hdr: false, lowLightBoost: false, recording: false, + recordingPaused: false, show: false, pulse: false, ready: false, focusPoint: false as false | FocusPoint, + toggleRecording(camera) { + if (!this.recordingPaused) { + this.recordingPaused = true; + camera.current?.pauseRecording(); + } else { + this.recordingPaused = false; + camera.current?.resumeRecording(); + } + }, showCam() { this.show = true; }, @@ -64,6 +75,7 @@ const createCameraStore = p => { setRecording(value, pulse = false) { this.recording = value; this.pulse = pulse; + this.recordingPaused = false; }, async recordVideo(pulse = false, format, camera) { if (this.recording) { diff --git a/src/compose/Camera/useBestCameraAndFormat.ts b/src/compose/Camera/useBestCameraAndFormat.ts index 76baafbc8..cf6937431 100644 --- a/src/compose/Camera/useBestCameraAndFormat.ts +++ b/src/compose/Camera/useBestCameraAndFormat.ts @@ -20,6 +20,7 @@ const FPS = 30; */ export default function useBestCameraAndFormat( store: CameraStore, + mode: 'video' | 'photo', ): [ CameraDevices, CameraDevice | undefined, @@ -42,11 +43,24 @@ export default function useBestCameraAndFormat( result = result.filter(f => f.supportsVideoHDR || f.supportsPhotoHDR); } - // find the first format that includes the given FPS - return result.find(f => + // only 30 FPS + result = result.filter(f => f.frameRateRanges.some(r => frameRateIncluded(r, FPS)), ); - }, [formats, store.hdr]); + + if (mode === 'video') { + const fullHD = result.filter( + f => f.videoHeight === 1080 && f.videoWidth === 1920, + ); + if (fullHD.length > 0) { + return fullHD[0]; + } + } + + if (result.length > 0) { + return result[0]; + } + }, [formats, mode, store.hdr]); return [devices, device, formats, format]; } diff --git a/src/compose/CameraScreen.tsx b/src/compose/CameraScreen.tsx index 8375fc659..784df1133 100644 --- a/src/compose/CameraScreen.tsx +++ b/src/compose/CameraScreen.tsx @@ -1,10 +1,10 @@ +import CameraRoll from '@react-native-community/cameraroll'; import { showNotification } from 'AppMessages'; import { runInAction } from 'mobx'; import { observer } from 'mobx-react'; import React, { useCallback, useEffect, useState } from 'react'; import { Image, InteractionManager, StatusBar, View } from 'react-native'; import Orientation from 'react-native-orientation-locker'; -import { showMessage } from 'react-native-flash-message'; import changeNavigationBarColor from 'react-native-navigation-bar-color'; import RNPhotoEditor from 'react-native-photo-editor'; import { @@ -28,6 +28,7 @@ import Camera from './Camera/Camera'; import PermissionsCheck from './PermissionsCheck'; import ImageFilterSlider from './ImageFilterSlider/ImageFilterSlider'; import MediaPreviewFullScreen from './MediaPreviewFullScreen'; +import { useBackHandler } from '@react-native-community/hooks'; // TODO: move this and all its instances accross the app to somewhere common /** @@ -35,17 +36,7 @@ import MediaPreviewFullScreen from './MediaPreviewFullScreen'; * @param {string} message */ const showError = message => { - showMessage({ - position: 'top', - message: message, - titleStyle: [ - ThemedStyles.style.fontXL, - ThemedStyles.style.colorPrimaryText, - ], - duration: 3000, - backgroundColor: ThemedStyles.getColor('TertiaryBackground'), - type: 'danger', - }); + showNotification(message, 'danger', 3000); }; /** @@ -58,6 +49,7 @@ export default observer(function (props) { props.route?.params ?? {}; const [mode, setMode] = useState<'photo' | 'video'>('photo'); const [mediaToConfirm, setMediaToConfirm] = useState(null); + /** * the current selected filter */ @@ -115,6 +107,15 @@ export default observer(function (props) { return setExtractEnabled(true); } + if (mediaToConfirm.type && mediaToConfirm.type.startsWith('video')) { + CameraRoll.save(mediaToConfirm.uri, { + album: 'Minds', + type: 'video', + }).catch(error => + console.log('[Composer] Error saving video to gallery', error), + ); + } + if (onMediaConfirmed) { // if the media confirmed was handled, use the handler) onMediaConfirmed(extractedImage || mediaToConfirm); @@ -199,9 +200,9 @@ export default observer(function (props) { undefined, `minds/${Date.now()}`, // is this good? ); - showNotification(i18n.t('imageAdded'), 'info', 3000, 'top'); + showNotification(i18n.t('imageAdded'), 'info', 3000); } catch (e: any) { - showNotification(i18n.t('errorDownloading'), 'danger', 3000, 'top'); + showNotification(i18n.t('errorDownloading'), 'danger', 3000); logService.exception('[MediaView] runDownload', e); } setDownloading(false); @@ -210,7 +211,17 @@ export default observer(function (props) { /** * called when retake button is pressed. Resets current image to null */ - const retake = useCallback(() => setMediaToConfirm(null), []); + const retake = useCallback(() => { + setMediaToConfirm(null); + }, []); + + /** + * Android back button handler + */ + useBackHandler(() => { + mediaToConfirm ? retake() : props.navigation.goBack(); + return true; + }); /** * called when the camera captures something diff --git a/src/compose/ComposeScreen.tsx b/src/compose/ComposeScreen.tsx index e0bb37912..012197672 100644 --- a/src/compose/ComposeScreen.tsx +++ b/src/compose/ComposeScreen.tsx @@ -255,6 +255,7 @@ export default observer(function ComposeScreen(props) { } showsVerticalScrollIndicator={false} contentContainerStyle={scrollViewContentContainerStyle} + scrollEventThrottle={5} onScroll={onScrollHandler}> diff --git a/src/compose/PosterOptions/MonetizeSelector.tsx b/src/compose/PosterOptions/MonetizeSelector.tsx deleted file mode 100644 index a9f7b3995..000000000 --- a/src/compose/PosterOptions/MonetizeSelector.tsx +++ /dev/null @@ -1,165 +0,0 @@ -import React, { FC, useCallback, useRef } from 'react'; -import { StyleSheet, TouchableOpacity, View } from 'react-native'; -import { observer, useLocalStore } from 'mobx-react'; -import MIcon from 'react-native-vector-icons/MaterialCommunityIcons'; -import ThemedStyles from '../../styles/ThemedStyles'; -import TopBar from '../TopBar'; -import i18n from '../../common/services/i18n.service'; -import NavigationService from '../../navigation/NavigationService'; -import TextInput from '../../common/components/TextInput'; -import MText from '../../common/components/MText'; -import { StackScreenProps } from '@react-navigation/stack'; -import { PosterStackParamList } from '~/compose/PosterOptions/PosterStackNavigator'; -import { useComposeContext } from '~/compose/useComposeStore'; - -interface MonetizeSelectorProps - extends FC, - StackScreenProps {} - -/** - * Monetize selector - */ -export default observer(function ({}: MonetizeSelectorProps) { - const theme = ThemedStyles.style; - const store = useComposeContext(); - - const localStore = useLocalStore(() => ({ - show: false, - showInput() { - this.show = true; - }, - get tokens() { - return store.wire_threshold ? store.wire_threshold.min : 0; - }, - })); - - const onNopaywall = useCallback(() => { - store.setTokenThreshold(0); - }, [store]); - - const inputRef = useRef(); - - const isActive = Boolean( - store.wire_threshold && store.wire_threshold.min > 0, - ); - - return ( - - - - {i18n.t('capture.paywallDescription')} - - - - {i18n.t('capture.noPaywall')} - - {!isActive && ( - - )} - - - - {i18n.t('capture.paywall')} - - {isActive && ( - - )} - - {(localStore.show || isActive) && ( - <> - - {i18n.t('capture.paywallLabel', { currency: 'Tokens' })} - - - {/* - {i18n.t('capture.paywallLabel', { currency: 'USD' })} - - */} - - )} - - ); -}); - -const styles = StyleSheet.create({ - input: { - borderWidth: StyleSheet.hairlineWidth, - borderRadius: 3, - marginHorizontal: 15, - paddingHorizontal: 10, - paddingTop: 13, - paddingBottom: 13, - textAlignVertical: 'center', - fontSize: 17, - height: 46, - }, - optsRow: { - flexDirection: 'row', - alignItems: 'center', - padding: 15, - height: 55, - borderBottomWidth: StyleSheet.hairlineWidth, - borderTopWidth: StyleSheet.hairlineWidth, - }, -}); diff --git a/src/compose/PosterOptions/NsfwSelector.tsx b/src/compose/PosterOptions/NsfwSelector.tsx index e21d6a9cf..27494fffe 100644 --- a/src/compose/PosterOptions/NsfwSelector.tsx +++ b/src/compose/PosterOptions/NsfwSelector.tsx @@ -53,11 +53,11 @@ export default observer(function ({}: NsfwProps) { const length = store.nsfw.length; const options = useMemo( () => - _.times(7, i => ({ + _.times(7, ((i: 0 | 1 | 2 | 3 | 4 | 5 | 6) => ({ value: i, selected: i === 0 ? length === 0 : store.nsfw.some(o => i === o), label: i18n.t(`nsfw.${i}`), - })), + })) as any), [store.nsfw, length], ); diff --git a/src/compose/PosterOptions/PosterOptions.tsx b/src/compose/PosterOptions/PosterOptions.tsx index 9eff6499e..5cf1d649d 100644 --- a/src/compose/PosterOptions/PosterOptions.tsx +++ b/src/compose/PosterOptions/PosterOptions.tsx @@ -9,7 +9,6 @@ import { getAccessText, getLicenseText, } from '~/common/services/list-options.service'; -import featuresService from '../../common/services/features.service'; import MText from '../../common/components/MText'; import MPressable from '~/common/components/MPressable'; import TopBar from '../TopBar'; @@ -101,11 +100,7 @@ function PosterOptions(props: PosterOptionsType) { const showMonetize = !store.portraitMode && !store.isRemind; - const showPermaweb = - !store.isEdit && - !store.group && - !store.isRemind && - featuresService.has('permaweb'); + const showPermaweb = !store.isEdit && !store.group && !store.isRemind; const permawebDesc = store.postToPermaweb ? i18n.t('permaweb.description') diff --git a/src/compose/PosterOptions/PosterStackNavigator.tsx b/src/compose/PosterOptions/PosterStackNavigator.tsx index ca7e56d5b..3b8bfbdbc 100644 --- a/src/compose/PosterOptions/PosterStackNavigator.tsx +++ b/src/compose/PosterOptions/PosterStackNavigator.tsx @@ -3,12 +3,10 @@ import { TransitionPresets, } from '@react-navigation/stack'; import React from 'react'; -import featuresService from '~/common/services/features.service'; import AccessSelector from './AccessSelector'; import LicenseSelector from './LicenseSelector'; import MonetizeScreen from './monetize/MonetizeScreen'; import PlusMonetizeScreen from './monetize/PlusMonetizeScreen'; -import MonetizeSelector from './MonetizeSelector'; import NsfwSelector from './NsfwSelector'; import PermawebSelector from './PermawebSelector'; import PosterOptions from './PosterOptions'; @@ -46,14 +44,7 @@ export default function PosterStackNavigator() { - + diff --git a/src/compose/PosterOptions/ScheduleSelector.tsx b/src/compose/PosterOptions/ScheduleSelector.tsx index f16e72b16..34c5ec09d 100644 --- a/src/compose/PosterOptions/ScheduleSelector.tsx +++ b/src/compose/PosterOptions/ScheduleSelector.tsx @@ -35,12 +35,7 @@ export default observer(function ({}: ScheduleSelectorProps) { if (moment(data).diff(moment()) > 0) { store.setTimeCreated(data); } else { - showNotification( - i18n.t('capture.scheduleError'), - 'warning', - 3000, - 'top', - ); + showNotification(i18n.t('capture.scheduleError'), 'warning', 3000); } }, })); diff --git a/src/compose/VideoClock.tsx b/src/compose/VideoClock.tsx index da497c992..bb22516a2 100644 --- a/src/compose/VideoClock.tsx +++ b/src/compose/VideoClock.tsx @@ -6,33 +6,40 @@ import MText from '../common/components/MText'; type PropsType = { style?: TextStyle | Array; timer?: number; + paused?: boolean; onTimer?: () => void; }; /** * Video clock component */ -const VideoClock = ({ style, timer, onTimer }: PropsType) => { +const VideoClock = ({ style, timer, onTimer, paused }: PropsType) => { const [time, setTime] = useState('00:00'); + let counter = React.useRef({ count: 0 }).current; + useEffect(() => { - let counter = 0; - const interval = setInterval(() => { - if (timer && onTimer && counter + 1 === timer) { - onTimer(); - } - setTime( - moment() - .hour(0) - .minute(0) - .second(counter++) - .format('mm:ss'), - ); - }, 1000); - return () => { - clearInterval(interval); - }; - }, []); + if (paused) { + const interval = setInterval(() => { + if (timer && onTimer && (counter.count + 1) / 10 === timer) { + onTimer(); + } + counter.count++; + if (counter.count % 10) { + setTime( + moment() + .hour(0) + .minute(0) + .second(counter.count / 10) + .format('mm:ss'), + ); + } + }, 100); + return () => { + clearInterval(interval); + }; + } + }, [onTimer, paused, timer]); return {time}; }; diff --git a/src/compose/createComposeStore.js b/src/compose/createComposeStore.js index 487774ca5..a37541505 100644 --- a/src/compose/createComposeStore.js +++ b/src/compose/createComposeStore.js @@ -1,4 +1,3 @@ -import { showMessage } from 'react-native-flash-message'; import RNPhotoEditor from 'react-native-photo-editor'; import { measureHeights } from '@bigbee.dev/react-native-measure-text-size'; import AttachmentStore from '../common/stores/AttachmentStore'; @@ -7,8 +6,6 @@ import i18n from '../common/services/i18n.service'; import hashtagService from '../common/services/hashtag.service'; import api from '../common/services/api.service'; import ActivityModel from '../newsfeed/ActivityModel'; -import ThemedStyles from '../styles/ThemedStyles'; -import featuresService from '../common/services/features.service'; import mindsConfigService from '../common/services/minds-config.service'; import supportTiersService from '../common/services/support-tiers.service'; import settingsStore from '../settings/SettingsStore'; @@ -18,23 +15,14 @@ import { runInAction } from 'mobx'; import { Image, Platform } from 'react-native'; import { hashRegex } from '~/common/components/Tags'; import getNetworkError from '~/common/helpers/getNetworkError'; +import { showNotification } from 'AppMessages'; /** * Display an error message to the user. * @param {string} message */ const showError = message => { - showMessage({ - position: 'top', - message: message, - titleStyle: [ - ThemedStyles.style.fontXL, - ThemedStyles.style.colorPrimaryText, - ], - duration: 3000, - backgroundColor: ThemedStyles.getColor('TertiaryBackground'), - type: 'danger', - }); + showNotification(message, 'danger', 3000); }; const DEFAULT_MONETIZE = { @@ -114,8 +102,13 @@ export default function (props) { this.hydrateFromEntity(); } + if (props.route?.params && props.route.params.group) { + this.group = props.route.params.group; + } + // clear params to avoid repetition props.navigation.setParams({ + group: undefined, entity: undefined, media: undefined, mode: undefined, @@ -494,15 +487,13 @@ export default function (props) { let newPost = { message: this.text, - accessId: this.accessId, + access_id: this.accessId, time_created: Math.floor(this.time_created / 1000) || null, }; if (this.paywalled) { newPost.paywall = true; - newPost.wire_threshold = featuresService.has('paywall-2020') - ? this.wire_threshold - : this.wire_threshold.min; + newPost.wire_threshold = this.wire_threshold; } // add remind @@ -533,11 +524,9 @@ export default function (props) { newPost = Object.assign(newPost, this.embed.meta); } - if (props.route?.params && props.route.params.group) { - newPost.container_guid = props.route.params.group.guid; - this.group = props.route.params.group; - // remove the group to avoid reuse it on future posts - props.navigation.setParams({ group: undefined }); + if (this.group) { + newPost.container_guid = this.group.guid; + newPost.access_id = this.group.guid; } // keep the container if it is an edited activity @@ -609,7 +598,7 @@ export default function (props) { }, get paywalled() { return ( - (featuresService.has('paywall-2020') && this.haveSupportTier) || + this.haveSupportTier || (this.wire_threshold && this.wire_threshold.min > 0) ); }, diff --git a/src/config/Config.e2e.ts b/src/config/Config.e2e.ts index e3b2ee75d..f818aaa65 100644 --- a/src/config/Config.e2e.ts +++ b/src/config/Config.e2e.ts @@ -108,8 +108,6 @@ export const MINDS_DEEPLINK = [ ['discovery/:tab', 'Discovery', 'navigate'], ]; -export const DISABLE_PASSWORD_INPUTS = false; - // IF TRUE COMMENT THE SMS PERMISSIONS IN ANDROID MANIFEST TOO!!! export const GOOGLE_PLAY_STORE = DeviceInfo.getBuildNumber() < 1050000000 && Platform.OS === 'android'; diff --git a/src/config/Config.ts b/src/config/Config.ts index 6c57340a0..20b2a86c7 100644 --- a/src/config/Config.ts +++ b/src/config/Config.ts @@ -3,10 +3,15 @@ import { storages } from '~/common/services/storage/storages.service'; import { Platform, PlatformIOSStatic } from 'react-native'; import RNConfig from 'react-native-config'; import DeviceInfo from 'react-native-device-info'; +import { DevMode } from './DevMode'; export const IS_IOS = Platform.OS === 'ios'; export const IS_IPAD = (Platform as PlatformIOSStatic).isPad; -export const ONCHAIN_ENABLED = true; +export const ONCHAIN_ENABLED = false; +export const PRO_PLUS_SUBSCRIPTION_ENABLED = !IS_IOS; + +// we should check how to use v2 before enable it again +export const LIQUIDITY_ENABLED = false; export const STAGING_KEY = 'staging'; export const CANARY_KEY = 'canary'; @@ -14,18 +19,28 @@ export const CANARY_KEY = 'canary'; export const ENV = typeof RNConfig === 'undefined' ? 'test' : RNConfig.ENV ?? 'production'; +// Override the production if there is a value defined for the environment +export const CODE_PUSH_KEY = IS_IOS + ? RNConfig.CODEPUSH_KEY_IOS + : RNConfig.CODEPUSH_KEY_ANDROID; + export const IS_PRODUCTION = ENV === 'production'; export const IS_REVIEW = ENV === 'review'; +// developer mode controller +export const DEV_MODE = new DevMode(IS_REVIEW); + +export const CUSTOM_API_URL = DEV_MODE.getApiURL(); + /** * We get the values only for review apps in order to avoid issues * by setting them to true in a review app and after updating the app * with a production version having that option turned on */ -export const MINDS_STAGING = IS_REVIEW +export const MINDS_STAGING = DEV_MODE.isActive ? storages.app.getBool(STAGING_KEY) || false : false; -export const MINDS_CANARY = IS_REVIEW +export const MINDS_CANARY = DEV_MODE.isActive ? storages.app.getBool(CANARY_KEY) || false : false; @@ -44,7 +59,10 @@ export const IMAGE_MAX_SIZE = 2048; export const ANDROID_CHAT_APP = 'com.minds.chat'; export const MINDS_URI = 'https://www.minds.com/'; -export const MINDS_API_URI = 'https://www.minds.com/'; +export const MINDS_API_URI = + DEV_MODE.isActive && CUSTOM_API_URL + ? CUSTOM_API_URL + : 'https://www.minds.com/'; export const CONECTIVITY_CHECK_URI = 'https://www.minds.com/'; export const CONECTIVITY_CHECK_INTERVAL = 10000; @@ -130,10 +148,11 @@ export const MINDS_DEEPLINK = [ ['discovery/:tab', 'Discovery', 'navigate'], ]; -export const DISABLE_PASSWORD_INPUTS = false; - // IF TRUE COMMENT THE SMS PERMISSIONS IN ANDROID MANIFEST TOO!!! export const GOOGLE_PLAY_STORE = DeviceInfo.getBuildNumber() < 1050000000 && Platform.OS === 'android'; export const IS_FROM_STORE = GOOGLE_PLAY_STORE || Platform.OS === 'ios'; + +// in ms +export const NEWSFEED_NEW_POST_POLL_INTERVAL = 30000; diff --git a/src/config/DevMode.ts b/src/config/DevMode.ts new file mode 100644 index 000000000..1b4ef8be7 --- /dev/null +++ b/src/config/DevMode.ts @@ -0,0 +1,55 @@ +import { showNotification } from 'AppMessages'; +import { action, observable } from 'mobx'; +import { storages } from '~/common/services/storage/storages.service'; + +/** + * Dev mode store + */ +export class DevMode { + @observable isActive = false; + + /** + * @param force force to be active + */ + constructor(force?: boolean) { + const active = storages.app.getBool('developer_mode'); + this.isActive = + active !== null && active !== undefined ? active : force || false; + } + + @action + setDevMode(value: boolean) { + this.isActive = value; + storages.app.setBool('developer_mode', value); + showNotification( + value ? 'Developer Mode Enabled' : 'Developer Mode Disabled', + 'success', + ); + } + + setApiURL(value: string): boolean { + try { + value = value.trim(); + if (value !== '') { + new URL(value); + if (!value.startsWith('http:') && !value.startsWith('https:')) { + throw new Error('Invalid URL'); + } + if (!value.endsWith('/')) { + value += '/'; + } + } + storages.app.setString('developer_api_url', value); + showNotification('Saved, please restart', 'success', 3000); + return true; + } catch (_) { + console.log(_); + showNotification('Invalid URL', 'danger', 3000); + return false; + } + } + + getApiURL(): string { + return storages.app.getString('developer_api_url') || ''; + } +} diff --git a/src/discovery/DiscoveryTile.tsx b/src/discovery/DiscoveryTile.tsx deleted file mode 100644 index a6f2c65c6..000000000 --- a/src/discovery/DiscoveryTile.tsx +++ /dev/null @@ -1,124 +0,0 @@ -//@ts-nocheck -import React, { Component } from 'react'; - -import { View, TouchableOpacity, StyleSheet } from 'react-native'; - -import FastImage from 'react-native-fast-image'; - -import { observer } from 'mobx-react'; -import ExplicitImage from '../common/components/explicit/ExplicitImage'; - -import ExplicitOverlay from '../common/components/explicit/ExplicitOverlay'; -import ThemedStyles from '../styles/ThemedStyles'; -import MText from '../common/components/MText'; - -@observer -class DiscoveryTile extends Component { - state = { - error: false, - style: null, - }; - - /** - * Derive state from props - * @param {object} nextProps - * @param {object} prevState - */ - static getDerivedStateFromProps(nextProps, prevState) { - if (prevState.size !== nextProps.size) { - return { - style: { width: nextProps.size, height: nextProps.size }, - }; - } - - return null; - } - - /** - * On press - */ - _onPress = () => { - if (this.props.onPress) { - this.props.onPress(this.props.entity); - } - }; - - setError = () => { - this.setState({ error: true }); - }; - - setActive = () => { - // bubble event up - this.props.onLoadEnd && this.props.onLoadEnd(); - }; - - /** - * Render - */ - render() { - const entity = this.props.entity; - const theme = ThemedStyles.style; - - // this optimization have some issues with the changes of the video auto-pause - // if (!entity.is_visible) { - // return null; - // } - - const url = entity.getThumbSource(); - - // load gif with lower priority - if (entity.isGif()) { - url.priority = FastImage.priority.low; - } - - const show_overlay = entity.shouldBeBlured(); - - const overlay = show_overlay ? ( - - ) : null; - - const boundary = this.props.boundaryText ? ( - - {this.props.boundaryText} - - ) : null; - - return ( - - - {boundary} - - {overlay} - - - ); - } -} - -export default DiscoveryTile; - -const styles = StyleSheet.create({ - boundary: { - height: 20, - width: '100%', - zIndex: 1000, - }, - tile: { - paddingTop: 1, - paddingBottom: 1, - paddingRight: 1, - paddingLeft: 1, - }, -}); diff --git a/src/discovery/DiscoveryUser.tsx b/src/discovery/DiscoveryUser.tsx deleted file mode 100644 index 2107158dc..000000000 --- a/src/discovery/DiscoveryUser.tsx +++ /dev/null @@ -1,152 +0,0 @@ -//@ts-nocheck -import React, { Component } from 'react'; - -import { - TouchableOpacity, - Image, - StyleSheet, - Keyboard, - View, -} from 'react-native'; - -import { observer } from 'mobx-react'; - -import { MINDS_CDN_URI } from '../config/Config'; - -import { FLAG_SUBSCRIBE, FLAG_VIEW } from '../common/Permissions'; -import SubscriptionButton from '../channel/subscription/SubscriptionButton'; -import ThemedStyles from '../styles/ThemedStyles'; -import MText from '../common/components/MText'; - -type PropsType = { - row: any; -}; - -type StateType = { - guid: string | null; -}; - -@observer -class DiscoveryUser extends Component { - /** - * State - */ - state = { - guid: null, - }; - - /** - * Derive state from props - * @param {object} nextProps - * @param {object} prevState - */ - static getDerivedStateFromProps(nextProps, prevState) { - if (prevState.guid !== nextProps.row.item.guid) { - return { - guid: nextProps.row.item.guid, - source: { - uri: MINDS_CDN_URI + 'icon/' + nextProps.row.item.guid + '/medium', - }, - }; - } - - return null; - } - - /** - * Navigate To channel - */ - _navToChannel = () => { - Keyboard.dismiss(); - if (this.props.navigation) { - if ( - this.props.row.item.isOpen() && - !this.props.row.item.can(FLAG_VIEW, true) - ) { - return; - } - this.props.navigation.push('Channel', { entity: this.props.row.item }); - } - }; - - /** - * Render right button - */ - renderRightButton() { - const channel = this.props.row.item; - - if ( - channel.isOwner() || - this.props.hideButtons || - (channel.isOpen() && !channel.can(FLAG_SUBSCRIBE)) - ) { - return; - } - - const testID = this.props.testID - ? `${this.props.testID}SubscriptionButton` - : 'subscriptionButton'; - - return ; - } - - /** - * Render - */ - render() { - const { row, ...otherProps } = this.props; - - return ( - - - - - {row.item.name} - - - @{row.item.username} - - - {this.renderRightButton()} - - ); - } -} - -export default DiscoveryUser; - -const styles = { - row: { - flexDirection: 'row', - alignItems: 'center', - flexWrap: 'wrap', - paddingTop: 10, - paddingLeft: 12, - paddingBottom: 10, - paddingRight: 12, - }, - body: { - marginLeft: 8, - height: 22, - // flex: 1, - }, - avatar: { - height: 58, - width: 58, - borderRadius: 29, - borderWidth: StyleSheet.hairlineWidth, - borderColor: '#EEE', - }, -}; diff --git a/src/discovery/DiscoveryUserNew.tsx b/src/discovery/DiscoveryUserNew.tsx deleted file mode 100644 index 4e37d67b0..000000000 --- a/src/discovery/DiscoveryUserNew.tsx +++ /dev/null @@ -1,149 +0,0 @@ -//@ts-nocheck -import React, { Component } from 'react'; - -import { TouchableOpacity, Image, Keyboard, Text, View } from 'react-native'; - -import { observer } from 'mobx-react'; - -import { MINDS_CDN_URI } from '../config/Config'; - -import { FLAG_SUBSCRIBE, FLAG_VIEW } from '../common/Permissions'; -import SubscriptionButtonNew from '../channel/subscription/SubscriptionButtonNew'; -import ThemedStyles from '../styles/ThemedStyles'; -import type UserModel from '../channel/UserModel'; -import MText from '../common/components/MText'; - -type PropsType = { - row: { - index: number; - item: UserModel; - }; - navigation?: any; - onUserTap?: Function; -}; - -@observer -class DiscoveryUser extends Component { - /** - * State - */ - state = { - guid: null, - }; - - /** - * Derive state from props - * @param {object} nextProps - * @param {object} prevState - */ - static getDerivedStateFromProps(nextProps, prevState) { - if (prevState.guid !== nextProps.row.item.guid) { - return { - guid: nextProps.row.item.guid, - source: { - uri: MINDS_CDN_URI + 'icon/' + nextProps.row.item.guid + '/medium', - }, - }; - } - - return null; - } - - /** - * Navigate To channel - */ - _navToChannel = () => { - Keyboard.dismiss(); - if (this.props.onUserTap) { - this.props.onUserTap(this.props.row.item); - } - if (this.props.navigation) { - if ( - this.props.row.item.isOpen() && - !this.props.row.item.can(FLAG_VIEW, true) - ) { - return; - } - this.props.navigation.push('Channel', { entity: this.props.row.item }); - } - }; - - /** - * Render right button - */ - renderRightButton() { - const channel = this.props.row.item; - - if ( - channel.isOwner() || - this.props.hideButtons || - (channel.isOpen() && !channel.can(FLAG_SUBSCRIBE)) - ) { - return; - } - - const testID = this.props.testID - ? `${this.props.testID}SubscriptionButton` - : 'subscriptionButton'; - - return ; - } - - /** - * Render - */ - render() { - const theme = ThemedStyles.style; - const { row, subscribe, ...otherProps } = this.props; - const renderRightButton = !(subscribe === false); - return ( - - - - - {row.item.name} - - - @{row.item.username} - - - {renderRightButton && this.renderRightButton()} - - ); - } -} - -export default DiscoveryUser; - -const styles = { - row: { - flexDirection: 'row', - alignItems: 'center', - flex: 1, - flexWrap: 'wrap', - paddingTop: 10, - paddingLeft: 12, - paddingBottom: 10, - paddingRight: 12, - }, - body: { - marginLeft: 16, - height: 22, - }, - title: { - fontSize: 17, - fontWeight: '500', - }, - subtitle: { - fontSize: 14, - }, - avatar: { - height: 58, - width: 58, - borderRadius: 29, - }, -}; diff --git a/src/discovery/v2/DiscoveryV2Screen.tsx b/src/discovery/v2/DiscoveryV2Screen.tsx index 354f2ffdc..f93c7af5c 100644 --- a/src/discovery/v2/DiscoveryV2Screen.tsx +++ b/src/discovery/v2/DiscoveryV2Screen.tsx @@ -54,7 +54,12 @@ export const DiscoveryV2Screen = withErrorBoundary( title={i18n.t('boosts.emptyList')} subtitle={i18n.t('boosts.emptyListSubtitle')}> + + + ); +}; + +export default observer(SeeLatestPostsButton); + +const edges: Edge[] = ['top']; diff --git a/src/newsfeed/activity/Actions.tsx b/src/newsfeed/activity/Actions.tsx index 25f4c3a99..7d19d0acb 100644 --- a/src/newsfeed/activity/Actions.tsx +++ b/src/newsfeed/activity/Actions.tsx @@ -10,8 +10,6 @@ import WireAction from './actions/WireAction'; import CommentsAction from './actions/CommentsAction'; import RemindAction from './actions/RemindAction'; import BoostAction from './actions/BoostAction'; - -import featuresService from '../../common/services/features.service'; import BaseModel from '../../common/BaseModel'; import type ActivityModel from '../ActivityModel'; import { useNavigation } from '@react-navigation/native'; @@ -35,7 +33,6 @@ export const Actions = observer((props: PropsType) => { const entity = props.entity; const isOwner = entity.isOwner(); const hasWire = Platform.OS !== 'ios'; - const hasCrypto = featuresService.has('crypto'); const isScheduled = BaseModel.isScheduled( parseInt(entity.time_created, 10) * 1000, ); @@ -59,11 +56,11 @@ export const Actions = observer((props: PropsType) => { - {!isOwner && hasCrypto && hasWire && ( + {!isOwner && hasWire && ( )} - {isOwner && hasCrypto && !isScheduled && ( + {isOwner && !isScheduled && ( )} diff --git a/src/newsfeed/activity/ActivityActionSheet.tsx b/src/newsfeed/activity/ActivityActionSheet.tsx index b91ec052f..53b3fc235 100644 --- a/src/newsfeed/activity/ActivityActionSheet.tsx +++ b/src/newsfeed/activity/ActivityActionSheet.tsx @@ -1,13 +1,11 @@ import React, { PureComponent } from 'react'; import { Alert, Linking } from 'react-native'; import { IconButtonNext } from '~ui/icons'; -import { MINDS_URI } from '../../config/Config'; +import { IS_IOS, MINDS_URI } from '../../config/Config'; import { isFollowing } from '../NewsfeedService'; import shareService from '../../share/ShareService'; import i18n from '../../common/services/i18n.service'; -import featuresService from '../../common/services/features.service'; import translationService from '../../common/services/translation.service'; -import { FLAG_EDIT_POST } from '../../common/Permissions'; import sessionService from '../../common/services/session.service'; import NavigationService from '../../navigation/NavigationService'; import type ActivityModel from '../ActivityModel'; @@ -99,14 +97,15 @@ class ActivityActionSheet extends PureComponent { }> = []; const entity = this.props.entity; + const isReminded = entity.remind_users && entity.remind_users.length; - const reminded = + const remindedByMe = entity.remind_users && entity.remind_users.some( user => user.guid === sessionService.getUser().guid, ); - if (reminded) { + if (remindedByMe || (isReminded && sessionService.getUser().isAdmin())) { options.push({ title: i18n.t('undoRemind'), iconName: 'undo', @@ -124,10 +123,7 @@ class ActivityActionSheet extends PureComponent { } // if can edit - if ( - entity.isOwner() || - (featuresService.has('permissions') && entity.can(FLAG_EDIT_POST)) - ) { + if (entity.isOwner()) { // Edit options.push({ title: i18n.t('edit'), @@ -172,24 +168,21 @@ class ActivityActionSheet extends PureComponent { }); } - if (featuresService.has('allow-comments-toggle')) { - // Toggle comments - options.push({ - title: entity.allow_comments - ? i18n.t('disableComments') - : i18n.t('enableComments'), - iconName: 'pin-outline', - iconType: 'material-community', - onPress: async () => { - try { - this.hideActionSheet(); - await this.props.entity.toggleAllowComments(); - } catch (err) { - this.showError(); - } - }, - }); - } + options.push({ + title: entity.allow_comments + ? i18n.t('disableComments') + : i18n.t('enableComments'), + iconName: 'pin-outline', + iconType: 'material-community', + onPress: async () => { + try { + this.hideActionSheet(); + await this.props.entity.toggleAllowComments(); + } catch (err) { + this.showError(); + } + }, + }); } if (!!this.props.onTranslate && translationService.isTranslatable(entity)) { @@ -206,7 +199,7 @@ class ActivityActionSheet extends PureComponent { } // Permaweb - if (featuresService.has('permaweb') && entity.permaweb_id) { + if (entity.permaweb_id) { options.push({ title: i18n.t('permaweb.viewOnPermaweb'), iconName: 'format-paragraph', @@ -306,9 +299,10 @@ class ActivityActionSheet extends PureComponent { // if can delete if ( - entity.isOwner() || - sessionService.getUser().isAdmin() || - (group && (group['is:owner'] || group['is:moderator'])) + !isReminded && + (entity.isOwner() || + sessionService.getUser().isAdmin() || + (group && (group['is:owner'] || group['is:moderator']))) ) { options.push({ iconName: 'delete', @@ -333,7 +327,7 @@ class ActivityActionSheet extends PureComponent { }); } - if (entity.hasImage()) { + if (entity.hasImage() && !(entity.shouldBeBlured() && IS_IOS)) { options.push({ iconName: 'fullscreen', iconType: 'material-community', @@ -377,7 +371,6 @@ class ActivityActionSheet extends PureComponent { i18n.t('errorMessage') + '\n' + i18n.t('activity.tryAgain'), 'warning', 2000, - 'top', ); } diff --git a/src/newsfeed/activity/actions/ThumbUpAction.tsx b/src/newsfeed/activity/actions/ThumbUpAction.tsx index 5cd99859a..f0e293267 100644 --- a/src/newsfeed/activity/actions/ThumbUpAction.tsx +++ b/src/newsfeed/activity/actions/ThumbUpAction.tsx @@ -1,9 +1,8 @@ import React, { Component } from 'react'; import { View } from 'react-native'; import { observer } from 'mobx-react'; -import { motify } from 'moti'; import { Icon } from '~ui/icons'; -import withClass from '~ui/withClass'; +// import withClass from '~ui/withClass'; import { UISizing } from '~styles/Tokens'; // import { frameThrower } from '~ui/helpers'; import Counter from './Counter'; @@ -28,7 +27,7 @@ type PropsType = { touchableComponent?: React.ComponentClass; }; -const AnimatedIcon: any = motify(withClass(Icon))(); +// const AnimatedIcon: any = motify(withClass(Icon))(); const AnimatedThumb = ({ voted, @@ -105,18 +104,22 @@ const AnimatedThumb = ({ // // eslint-disable-next-line react-hooks/exhaustive-deps // }, [voted]); + // const disabled = !canVote; + // const active = !!(canVote && voted); + + // return ( + // + // ); const disabled = !canVote; const active = !!(canVote && voted); - return ( - - ); + return ; }; /** diff --git a/src/notifications/v3/NotificationsScreen.tsx b/src/notifications/v3/NotificationsScreen.tsx index fbea862b6..2a80469db 100644 --- a/src/notifications/v3/NotificationsScreen.tsx +++ b/src/notifications/v3/NotificationsScreen.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useRef, useState } from 'react'; +import React, { useCallback, useRef } from 'react'; import { observer } from 'mobx-react'; import { View, FlatList, ViewToken } from 'react-native'; import ThemedStyles from '../../styles/ThemedStyles'; @@ -17,6 +17,7 @@ import InteractionsBottomSheet from '~/common/components/interactions/Interactio import sessionService from '~/common/services/session.service'; import Topbar from '~/topbar/Topbar'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import { useFocusEffect } from '@react-navigation/native'; type PropsType = { navigation?: any; @@ -53,24 +54,16 @@ const map = data => { }; const NotificationsScreen = observer(({ navigation }: PropsType) => { - const [isRefreshing, setRefreshing] = useState(false); const theme = ThemedStyles.style; const { notifications } = useStores(); const interactionsBottomSheetRef = useRef(); - const filter = notifications.filter; - const params = { - filter, - limit: 15, - offset: notifications.offset, - }; - const { - result, - error, - loading, - fetch, - setResult, - } = useApiFetch('api/v3/notifications/list', { - params, + + const store = useApiFetch('api/v3/notifications/list', { + params: { + filter: notifications.filter, + limit: 15, + offset: notifications.offset, + }, updateStrategy: 'merge', dataField: 'notifications', map, @@ -83,54 +76,50 @@ const NotificationsScreen = observer(({ navigation }: PropsType) => { }).current; const onFetchMore = () => { - !loading && - result && - result['load-next'] && - notifications.setOffset(result['load-next']); + !store.loading && + store.result && + store.result['load-next'] && + notifications.setOffset(store.result['load-next']); }; const refresh = React.useCallback(() => { notifications.setOffset(''); - setResult(null); - fetch(params); - }, [notifications, fetch, params, setResult]); - - const handleListRefresh = React.useCallback(() => { - setRefreshing(true); - refresh(); - }, [refresh, setRefreshing]); - - const onFocus = React.useCallback(() => { - notifications.setUnread(0); - // only refresh if we already have notifications - if (result) { - refresh(); - } - }, [notifications, refresh, result]); + return store.refresh({ + filter: notifications.filter, + limit: 15, + offset: notifications.offset, + }); + }, [notifications, store]); + + /** + * + */ + const onFocus = React.useCallback( + (silentRefresh = true) => { + // only refresh if the data is already loaded (even empty array) + if (store.result === undefined) { + return; + } + notifications.setUnread(0); + // only refresh if we already have notifications + notifications.setSilentRefresh(silentRefresh); + refresh().finally(() => notifications.setSilentRefresh(false)); + }, + // Be extra careful with the dependencies here, it may cause too many refresh or an infinite loop + [notifications, refresh, store], + ); + // const isFocused = navigation.isFocused(); React.useEffect(() => { const unsubscribe = navigation.addListener( //@ts-ignore 'tabPress', - () => navigation.isFocused() && onFocus(), + () => navigation.isFocused() && onFocus(false), ); - return unsubscribe; }, [navigation, onFocus]); - React.useEffect(() => { - if (!notifications.loaded) { - notifications.setLoaded(true); - onFocus(); - } - }, [notifications, onFocus]); - - React.useEffect(() => { - if (!loading && isRefreshing) { - setRefreshing(false); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [loading]); + useFocusEffect(onFocus); const onViewableItemsChanged = React.useCallback( (viewableItems: { viewableItems: ViewToken[]; changed: ViewToken[] }) => { @@ -147,10 +136,10 @@ const NotificationsScreen = observer(({ navigation }: PropsType) => { ); const ListEmptyComponent = React.useMemo(() => { - if (error && !loading && !isRefreshing) { + if (store.error && !store.loading && !store.refreshing) { return ( - fetch()}> + {i18n.t('cantReachServer') + '\n'} {i18n.t('tryAgain')} @@ -158,7 +147,7 @@ const NotificationsScreen = observer(({ navigation }: PropsType) => { ); } - if (loading || isRefreshing) { + if (store.loading || store.refreshing) { return ( @@ -172,10 +161,18 @@ const NotificationsScreen = observer(({ navigation }: PropsType) => { } return ( - + ); - }, [error, loading, fetch, isRefreshing, filter]); + }, [ + store.error, + store.loading, + store.refreshing, + notifications.filter, + refresh, + ]); const user = sessionService.getUser(); @@ -196,7 +193,7 @@ const NotificationsScreen = observer(({ navigation }: PropsType) => { ); }, []); - const data = result?.notifications || []; + const data = store.result?.notifications || []; return ( @@ -209,17 +206,18 @@ const NotificationsScreen = observer(({ navigation }: PropsType) => { } + scrollEnabled={!store.refreshing} data={data.slice()} keyExtractor={keyExtractor} renderItem={renderItem} onEndReached={onFetchMore} - onRefresh={handleListRefresh} - refreshing={isRefreshing} + onRefresh={refresh} + refreshing={store.refreshing && !notifications.silentRefresh} onViewableItemsChanged={onViewableItemsChanged} // contentContainerStyle={} viewabilityConfig={viewabilityConfig} diff --git a/src/notifications/v3/createNotificationsStore.ts b/src/notifications/v3/createNotificationsStore.ts index 50787b6fc..fec5b8b72 100644 --- a/src/notifications/v3/createNotificationsStore.ts +++ b/src/notifications/v3/createNotificationsStore.ts @@ -1,3 +1,4 @@ +import { Timeout } from '~/types/Common'; import apiService from '../../common/services/api.service'; import badgeService from '../../common/services/badge.service'; import logService from '../../common/services/log.service'; @@ -16,13 +17,17 @@ const createNotificationsStore = () => ({ unread: 0, filter: '' as FilterType, offset: '', - pollInterval: null as number | null, + pollInterval: null as Timeout | null, pushNotificationsSettings: [] as PushNotificationsSettingModel[] | null, // null when failed to load mailsNotificationsSettings: [] as EmailNotificationsSettingModel[] | null, // null when failed to load loaded: false, + silentRefresh: false, setLoaded(loaded: boolean) { this.loaded = loaded; }, + setSilentRefresh(value: boolean) { + this.silentRefresh = value; + }, init() { sessionService.onSession((token: string) => { if (token) { @@ -87,6 +92,7 @@ const createNotificationsStore = () => ({ async markAsRead(notification: NotificationModel): Promise { try { await apiService.put('api/v3/notifications/read/' + notification.urn); + this.setUnread(this.unread - 1); } catch (err) { logService.exception('[NotificationsStore] markAsRead', err); } @@ -130,6 +136,8 @@ const createNotificationsStore = () => ({ } }, reset() { + this.silentRefresh = false; + this.filter = ''; this.unlisten(); this.stopPollCount(); this.setUnread(0); diff --git a/src/notifications/v3/notification/useNotificationRouter.ts b/src/notifications/v3/notification/useNotificationRouter.ts index 3103146ed..43af1dbd8 100644 --- a/src/notifications/v3/notification/useNotificationRouter.ts +++ b/src/notifications/v3/notification/useNotificationRouter.ts @@ -69,10 +69,11 @@ const navigator = { this.params = { Activity: activityParams, Tabs: { - screen: 'CaptureTab', + screen: 'More', params: { screen: 'Wallet', params: { currency: 'tokens', section: 'transactions' }, + initial: false, }, }, GroupView: { diff --git a/src/notifications/v3/settings/email/EmailNotificationsSettingModel.ts b/src/notifications/v3/settings/email/EmailNotificationsSettingModel.ts index 7a4958149..c653e1f25 100644 --- a/src/notifications/v3/settings/email/EmailNotificationsSettingModel.ts +++ b/src/notifications/v3/settings/email/EmailNotificationsSettingModel.ts @@ -1,20 +1,22 @@ import { action, computed, observable } from 'mobx'; import apiService from '../../../../common/services/api.service'; -import i18n from '../../../../common/services/i18n.service'; +import i18n, { LocaleType } from '../../../../common/services/i18n.service'; import logService from '../../../../common/services/log.service'; export type EmailNotificationsSettingType = { campaign: 'global' | 'when' | 'with'; guid: string; - topic: string; + topic: NotificationGroupType; user_guid: string; value: string; }; +type NotificationGroupType = keyof LocaleType['notificationSettings']; + export default class EmailNotificationsSettingModel { campaign: 'global' | 'when' | 'with'; guid: string; - _topic: string; + _topic: NotificationGroupType; user_guid: string; @observable value: string; oldValue = ''; @@ -29,7 +31,7 @@ export default class EmailNotificationsSettingModel { @computed get topic() { - let translation = i18n.t('notificationSettings.' + this._topic); + let translation = i18n.t(`notificationSettings.${this._topic}`); if ( translation.includes('missing') && translation.includes('translation') @@ -57,6 +59,7 @@ export default class EmailNotificationsSettingModel { }); } catch (err) { this._toggleValue(this.oldValue); + logService.exception('[NotificationsSettingModel] toggleEnabled', err); } } diff --git a/src/notifications/v3/settings/email/EmailNotificationsSettings.tsx b/src/notifications/v3/settings/email/EmailNotificationsSettings.tsx index 83b374fc6..e2ef15075 100644 --- a/src/notifications/v3/settings/email/EmailNotificationsSettings.tsx +++ b/src/notifications/v3/settings/email/EmailNotificationsSettings.tsx @@ -19,7 +19,7 @@ const campaingTypes = [ { tag: 'emailWhen', name: 'when' }, { tag: 'emailWith', name: 'with' }, { tag: 'emailUpdated', name: 'global' }, -]; +] as const; const topicsWithSelector = ['unread_notifications', 'top_posts']; diff --git a/src/notifications/v3/settings/push/PushNotificationsSettingModel.ts b/src/notifications/v3/settings/push/PushNotificationsSettingModel.ts index 0db06423f..954712f07 100644 --- a/src/notifications/v3/settings/push/PushNotificationsSettingModel.ts +++ b/src/notifications/v3/settings/push/PushNotificationsSettingModel.ts @@ -1,20 +1,25 @@ import { observable, action, computed } from 'mobx'; import apiService from '../../../../common/services/api.service'; -import i18n from '../../../../common/services/i18n.service'; +import i18n, { LocaleType } from '../../../../common/services/i18n.service'; import logService from '../../../../common/services/log.service'; +type NotificationGroupType = keyof LocaleType['notificationSettings']; + export default class PushNotificationsSettingModel { @observable enabled: boolean; - public notification_group: string; + public notification_group: NotificationGroupType; - constructor(setting: { enabled: boolean; notification_group: string }) { + constructor(setting: { + enabled: boolean; + notification_group: NotificationGroupType; + }) { this.notification_group = setting.notification_group; this.enabled = setting.enabled; } @computed get notificationGroup() { - let translation = i18n.t('notificationSettings.' + this.notification_group); + let translation = i18n.t(`notificationSettings.${this.notification_group}`); if ( translation.includes('missing') && translation.includes('translation') diff --git a/src/notifications/v3/settings/push/PushNotificationsSettings.tsx b/src/notifications/v3/settings/push/PushNotificationsSettings.tsx index 386d4a475..7627141ad 100644 --- a/src/notifications/v3/settings/push/PushNotificationsSettings.tsx +++ b/src/notifications/v3/settings/push/PushNotificationsSettings.tsx @@ -36,7 +36,7 @@ const PushNotificationsSettings = ({}: PropsType) => { <> { + const onOnboardingCompleted = () => { setTimeout(() => { navigation.navigate('Newsfeed'); - showNotification(i18n.t(message), 'success', 4000); + showNotification( + i18n.t('onboarding.onboardingCompleted'), + 'success', + 4000, + ); }, 300); }; const updateState = ( @@ -49,13 +53,13 @@ export default observer(function OnboardingScreen() { oldData: OnboardingGroupState, ) => { if (newData && oldData && newData.id !== oldData.id) { - onOnboardingCompleted('onboarding.onboardingCompleted'); + onOnboardingCompleted(); const m = moment().add(2, 'hours'); SettingsStore.setIgnoreOnboarding(m); // show old data (initial onboarding) return oldData; } else if (newData && newData.is_completed) { - onOnboardingCompleted('onboarding.improvedExperience'); + onOnboardingCompleted(); } // Check for post created locally (the backend check takes too long) @@ -111,6 +115,18 @@ export default observer(function OnboardingScreen() { VerifyEmailStep: { title: i18n.t('onboarding.verifyEmailAddress'), screen: 'VerifyEmail', + onPress: () => { + const done = progressStore.result?.steps.some( + s => s.id === 'VerifyEmailStep' && s.is_completed, + ); + if (!done) { + navigation.navigate('VerifyEmail', { + store: progressStore, + }); + } else { + showNotification(i18n.t('emailConfirm.alreadyConfirmed')); + } + }, }, SuggestedHashtagsStep: { title: i18n.t('onboarding.selectTags'), @@ -176,13 +192,9 @@ export default observer(function OnboardingScreen() { onPress: stepsMapping[s.id].onPress || (() => - navigation.navigate( - stepsMapping[s.id] - .screen as keyof ReactNavigation.RootParamList, - { - store: progressStore, - }, - )), + navigation.navigate(stepsMapping[s.id].screen, { + store: progressStore, + })), } : null, ) diff --git a/src/onboarding/v2/steps/ModalContainer.tsx b/src/onboarding/v2/steps/ModalContainer.tsx index f346c3deb..0d9c725c1 100644 --- a/src/onboarding/v2/steps/ModalContainer.tsx +++ b/src/onboarding/v2/steps/ModalContainer.tsx @@ -2,7 +2,7 @@ import React, { useRef } from 'react'; import { View, Platform, ViewStyle, TextStyle, StyleProp } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { IconButton } from '~ui/icons'; -import { ICON_SIZES, HORIZONTAL } from '~styles/Tokens'; +import { HORIZONTAL } from '~styles/Tokens'; import Handle from '../../../common/components/bottom-sheet/Handle'; import MText from '../../../common/components/MText'; import ThemedStyles, { useStyle } from '../../../styles/ThemedStyles'; @@ -12,6 +12,7 @@ type PropsType = { title: string; onPressBack: () => void; children: React.ReactNode; + leftButton?: React.ReactNode; marginTop?: number; contentContainer?: StyleProp; titleStyle?: StyleProp; @@ -50,9 +51,9 @@ export default function ModalContainer(props: PropsType) { {props.title} - - - + {props.leftButton} + + {props.children} @@ -65,12 +66,18 @@ const styles = ThemedStyles.create({ { flexDirection: 'row', alignItems: 'center', + justifyContent: 'space-between', paddingHorizontal: HORIZONTAL, }, 'paddingVertical2x', ], title: [ - { fontSize: 20, marginLeft: ICON_SIZES.large }, + { + fontSize: 20, + position: 'absolute', + width: '100%', + marginLeft: HORIZONTAL, + }, 'paddingVertical3x', 'textCenter', 'fontSemibold', diff --git a/src/onboarding/v2/steps/PhoneValidationScreen.tsx b/src/onboarding/v2/steps/PhoneValidationScreen.tsx index c765c9d30..cc84fdae4 100644 --- a/src/onboarding/v2/steps/PhoneValidationScreen.tsx +++ b/src/onboarding/v2/steps/PhoneValidationScreen.tsx @@ -46,7 +46,7 @@ export default observer(function PhoneValidationScreen() { title={i18n.t('wallet.phoneVerification')} onPressBack={navigation.goBack}> - + {Boolean(description) && ( {description} diff --git a/src/onboarding/v2/steps/SelectHashtagsScreen.tsx b/src/onboarding/v2/steps/SelectHashtagsScreen.tsx index c5d7bf37f..57f87b5bd 100644 --- a/src/onboarding/v2/steps/SelectHashtagsScreen.tsx +++ b/src/onboarding/v2/steps/SelectHashtagsScreen.tsx @@ -2,6 +2,7 @@ import { LinearGradient } from 'expo-linear-gradient'; import { observer } from 'mobx-react'; import React from 'react'; import { StyleSheet, View } from 'react-native'; +import { ScrollView } from 'react-native-gesture-handler'; import { showNotification } from '../../../../AppMessages'; import Button from '../../../common/components/Button'; import MText from '../../../common/components/MText'; @@ -60,34 +61,38 @@ export default observer(function SelectHashtagsScreen({ navigation, route }) { const startColor = backgroundColor + '00'; const endColor = backgroundColor + 'FF'; const gradient = ( - + ); return ( - - {i18n.t('onboarding.hashtagDescription')} - - + + + {i18n.t('onboarding.hashtagDescription')} + + + {gradient} + Requires restart @@ -60,4 +102,29 @@ const DevToolsScreen = () => { ); }; +export const HiddenTap = ({ + children, + count, + ...other +}: PressableProps & { + children: React.ReactNode; + count?: number; +}) => { + const { current: countRef } = React.useRef<{ count: number }>({ count: 0 }); + + const setDeveloperMode = (v: boolean) => { + countRef.count++; + if (countRef.count > (count || 15)) { + countRef.count = 0; + DEV_MODE.setDevMode(v); + } + }; + + return ( + setDeveloperMode(!DEV_MODE.isActive)} {...other}> + {children} + + ); +}; + export default DevToolsScreen; diff --git a/src/settings/screens/EmailScreen.tsx b/src/settings/screens/EmailScreen.tsx index 3fa92aed2..a0fb89018 100644 --- a/src/settings/screens/EmailScreen.tsx +++ b/src/settings/screens/EmailScreen.tsx @@ -1,28 +1,26 @@ import React, { Component } from 'react'; -import { View, Alert } from 'react-native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { Alert } from 'react-native'; import settingsService from '../SettingsService'; import i18n from '../../common/services/i18n.service'; import validator from '../../common/services/validator.service'; import CenteredLoading from '../../common/components/CenteredLoading'; -import ModalConfirmPassword from '../../auth/ModalConfirmPassword'; import { inject } from 'mobx-react'; import ThemedStyles from '../../styles/ThemedStyles'; import MText from '../../common/components/MText'; import { Button } from '~ui'; import InputContainer from '~/common/components/InputContainer'; -import { MoreStackParamList } from '~/navigation/NavigationTypes'; import type UserStore from '~/auth/UserStore'; -type NavigationProp = StackNavigationProp; +import DismissKeyboard from '~/common/components/DismissKeyboard'; + /** * Email settings screen */ @inject('user') class EmailScreen extends Component< { - navigation: NavigationProp; + navigation: any; user: UserStore; }, { @@ -101,7 +99,10 @@ class EmailScreen extends Component< }; confirmPassword = () => { - this.setState({ isVisible: true }); + this.props.navigation.navigate('PasswordConfirmation', { + title: i18n.t('auth.confirmpassword'), + onConfirm: this.save, + }); }; dismissModal = () => { @@ -137,7 +138,7 @@ class EmailScreen extends Component< ) : null; return ( - {confirmNote} - - + ); } } diff --git a/src/settings/screens/OtherScreen.js b/src/settings/screens/OtherScreen.js index 57d9f3f72..8d153e66c 100644 --- a/src/settings/screens/OtherScreen.js +++ b/src/settings/screens/OtherScreen.js @@ -5,7 +5,6 @@ import ThemedStyles from '../../styles/ThemedStyles'; import i18n from '../../common/services/i18n.service'; import MenuSubtitle from '../../common/components/menus/MenuSubtitle'; import NavigationService from '../../navigation/NavigationService'; -import featuresService from '../../common/services/features.service'; function useNavCallback(screen) { return useCallback(() => { @@ -75,8 +74,7 @@ export default function ({ navigation }) { {generateSection(i18n.t('settings.otherOptions.a'), contentAdmin)} {generateSection(i18n.t('settings.otherOptions.g'), referrals)} - {featuresService.has('paywall-2020') && - generateSection(i18n.t('settings.otherOptions.b'), paidContent)} + {generateSection(i18n.t('settings.otherOptions.b'), paidContent)} {generateSection( i18n.t('settings.otherOptions.contentMigration'), contentMigration, diff --git a/src/settings/screens/PasswordScreen.tsx b/src/settings/screens/PasswordScreen.tsx index e80acb6d9..8f9626737 100644 --- a/src/settings/screens/PasswordScreen.tsx +++ b/src/settings/screens/PasswordScreen.tsx @@ -3,10 +3,8 @@ import { View } from 'react-native'; import { useNavigation } from '@react-navigation/native'; import { observer, useLocalStore } from 'mobx-react'; -import Input from '../../common/components/Input'; import ThemedStyles from '../../styles/ThemedStyles'; import i18n from '../../common/services/i18n.service'; -import { DISABLE_PASSWORD_INPUTS } from '../../config/Config'; import validatePassword from '../../common/helpers/validatePassword'; import authService from '../../auth/AuthService'; import settingsService from '../SettingsService'; @@ -15,6 +13,8 @@ import { isUserError } from '../../common/UserError'; import { showNotification } from '../../../AppMessages'; import { Button } from '~ui'; import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'; +import PasswordInput from '~/common/components/password-input/PasswordInput'; +import AuthService from '../../auth/AuthService'; export default observer(function () { const theme = ThemedStyles.style; @@ -27,20 +27,27 @@ export default observer(function () { newPassword: '', newPasswordError: '', confirmationPassword: '', + confirmationPasswordError: '', passwordFocused: false, setCurrentPassword(password) { + store.currentPasswordError = ''; store.currentPassword = password; }, setCurrentPasswordError(error) { store.currentPasswordError = error; }, setNewPassword(password) { + store.newPasswordError = ''; store.newPassword = password; }, setNewPasswordError(error) { store.newPasswordError = error; }, + setConfirmationPasswordError(error) { + store.confirmationPasswordError = error; + }, setConfirmationPassword(password) { + store.confirmationPasswordError = ''; store.confirmationPassword = password; }, setPasswordFocused(value) { @@ -51,23 +58,27 @@ export default observer(function () { store.setNewPassword(''); store.setConfirmationPassword(''); }, - currentPasswordFocus() { - store.setCurrentPassword(''); - }, newPasswordBlurred() { store.setPasswordFocused(false); }, - confirmationPasswordFocus() { - store.setConfirmationPassword(''); - }, newPasswordFocus() { - store.setNewPassword(''); store.setPasswordFocused(true); }, })); const confirmPassword = useCallback(async () => { // missing data + + if (!store.currentPassword) { + store.setCurrentPasswordError(i18n.t('auth.fieldRequired')); + } + if (!store.newPassword) { + store.setNewPasswordError(i18n.t('auth.fieldRequired')); + } + if (!store.confirmationPassword) { + store.setConfirmationPasswordError(i18n.t('auth.fieldRequired')); + } + if ( !store.currentPassword || !store.newPassword || @@ -81,7 +92,7 @@ export default observer(function () { store.setCurrentPasswordError(''); await authService.validatePassword(store.currentPassword); } catch (err) { - store.setCurrentPasswordError(i18n.t('settings.invalidPassword')); + store.setCurrentPasswordError(i18n.t('auth.invalidPassword')); return; } @@ -109,9 +120,12 @@ export default observer(function () { try { await settingsService.submitSettings(params); store.clearInputs(); + AuthService.revokeTokens(); showNotification(i18n.t('settings.passwordChanged'), 'success'); } catch (err) { - if (!isUserError(err)) showNotification(err.message, 'danger'); + if (!isUserError(err) && err instanceof Error) { + showNotification(err.message, 'danger'); + } } }, [store]); @@ -126,92 +140,47 @@ export default observer(function () { ), }); - const getInput = useCallback( - props => { - const wrapperStyle = [ - theme.paddingLeft3x, - theme.paddingTop3x, - theme.bgSecondaryBackground, - props.wrapperBorder, - theme.bcolorPrimaryBorder, - ]; - - const labelStyle = [ - theme.colorSecondaryText, - theme.fontL, - theme.paddingLeft, - ]; - - return ( - - {})} - error={props.error} - ref={props.ref ?? (() => {})} - /> - - ); - }, - [theme], - ); - const subContainer = !store.passwordFocused ? [theme.paddingTop7x] : []; return ( - {!store.passwordFocused && - getInput({ - placeholder: i18n.t('settings.currentPassword'), - onChangeText: store.setCurrentPassword, - value: store.currentPassword, - testID: 'currentPasswordInput', - onFocus: store.currentPasswordFocus, - error: store.currentPasswordError, - wrapperBorder: [theme.borderTop, theme.borderBottom], - })} + {!store.passwordFocused && ( + + )} {store.passwordFocused && ( )} - {getInput({ - placeholder: i18n.t('settings.newPassword'), - onChangeText: store.setNewPassword, - value: store.newPassword, - testID: 'newPasswordInput', - onFocus: store.newPasswordFocus, - onBlur: store.newPasswordBlurred, - error: store.newPasswordError, - wrapperBorder: theme.borderTop, - })} - {getInput({ - placeholder: i18n.t('settings.confirmNewPassword'), - onChangeText: store.setConfirmationPassword, - value: store.confirmationPassword, - testID: 'confirmationPasswordPasswordInput', - onFocus: store.confirmationPasswordFocus, - onBlur: store.newPasswordBlurred, - wrapperBorder: [theme.borderBottom, theme.borderTop], - })} + + + ); }); - -const styles = { - inputHeight: { - height: 40, - }, -}; diff --git a/src/settings/screens/ResourcesScreen.tsx b/src/settings/screens/ResourcesScreen.tsx index db9aba298..6c1fb2d30 100644 --- a/src/settings/screens/ResourcesScreen.tsx +++ b/src/settings/screens/ResourcesScreen.tsx @@ -160,19 +160,23 @@ const items = [ }, ], }, -]; +] as const; + +type Items = typeof items[number]; +type Options = typeof items[T]['options'][number]; const ResourcesScreen = ({}: PropsType) => { return ( - {items.map(item => ( + {items.map((item: Items, index) => ( <> {i18n.t(`settings.${item.id}.title`).toUpperCase()} - {item.options.map((option, i) => ( + {item.options.map((option: Options, i) => ( { } } catch (err) { response = false; - throw new UserError(err.message); + throw new UserError( + err && err instanceof Error ? err.message : 'Unexpected error', + ); } finally { return response; } diff --git a/src/settings/screens/blocked/BlockedChannel.tsx b/src/settings/screens/blocked/BlockedChannel.tsx index 9c2e0170d..f993f172d 100644 --- a/src/settings/screens/blocked/BlockedChannel.tsx +++ b/src/settings/screens/blocked/BlockedChannel.tsx @@ -1,12 +1,10 @@ import React, { useCallback } from 'react'; -import { View } from 'react-native'; +import ChannelListItem from '~/common/components/ChannelListItem'; import UserModel from '../../../channel/UserModel'; import Button from '../../../common/components/Button'; import apiService from '../../../common/services/api.service'; import blockListService from '../../../common/services/block-list.service'; import i18n from '../../../common/services/i18n.service'; -import DiscoveryUser from '../../../discovery/DiscoveryUserNew'; -import ThemedStyles from '../../../styles/ThemedStyles'; import { BlockedChannelsStore } from './createBlockedChannelsStore'; export type Row = { @@ -20,8 +18,7 @@ type PropsType = { }; const BlockedChannel = ({ row, localStore }: PropsType) => { - const theme = ThemedStyles.style; - row.item = UserModel.checkOrCreate(row.item); + const user = UserModel.checkOrCreate(row.item); const unblock = useCallback( async (guid: string) => { @@ -33,16 +30,15 @@ const BlockedChannel = ({ row, localStore }: PropsType) => { ); return ( - - - + + ) : ( + <> + {localStore.settings === false && } + {localStore.settings !== false && ( + + {!isIos && } + + {localStore.method === 'usd' && ( + + + + )} + + + )} + )} ); diff --git a/src/wallet/WalletStore.ts b/src/wallet/WalletStore.ts index 0e09916ed..e16209686 100644 --- a/src/wallet/WalletStore.ts +++ b/src/wallet/WalletStore.ts @@ -5,6 +5,7 @@ import token from '../common/helpers/token'; import number from '../common/helpers/number'; import TokensStore from './tokens/TokensStore'; import type { ApiResponse } from '../common/services/api.service'; +import { Timeout } from '~/types/Common'; interface WalletResponse extends ApiResponse { balance: number; @@ -36,7 +37,7 @@ class WalletStore { refreshing: boolean = false; loaded: boolean = false; - interval!: number; + interval!: Timeout; isOnboardingShown!: boolean; diff --git a/src/wallet/v2/TransactionList/components/Item.tsx b/src/wallet/v2/TransactionList/components/Item.tsx index 6ca365969..bb8bc14a3 100644 --- a/src/wallet/v2/TransactionList/components/Item.tsx +++ b/src/wallet/v2/TransactionList/components/Item.tsx @@ -41,7 +41,7 @@ const getTypeLabel = (type: string, currency: currencyType) => { wire: i18n.t('wallet.transactions.onchainWire'), reward: i18n.t('blockchain.receiver'), token: i18n.t('purchase'), - withdraw: i18n.t('withdraw.title'), + withdraw: i18n.t('wallet.withdraw.title'), 'offchain:boost': i18n.t('wallet.transactions.offchainBoost'), boost: i18n.t('wallet.transactions.onchainBoost'), pro_earning: i18n.t('wallet.transactions.proEarningsFilter'), diff --git a/src/wallet/v2/address/BankInfoScreen.tsx b/src/wallet/v2/address/BankInfoScreen.tsx index 8f8283881..1ea780e9e 100644 --- a/src/wallet/v2/address/BankInfoScreen.tsx +++ b/src/wallet/v2/address/BankInfoScreen.tsx @@ -89,7 +89,7 @@ const BankInfoScreen = observer(({ navigation, route }: PropsType) => { await walletStore.createStripeAccount(form); } catch (err) { - if (!isUserError(err)) { + if (!isUserError(err) && err instanceof Error) { logService.exception('[BankInfoScreen] createStripeAccount', err); } } finally { @@ -122,7 +122,7 @@ const BankInfoScreen = observer(({ navigation, route }: PropsType) => { await walletStore.addStripeBank(form); navigation.goBack(); } catch (err) { - if (!isUserError(err)) { + if (!isUserError(err) && err instanceof Error) { logService.exception('[BankInfoScreen] createStripeAccount', err); } } finally { diff --git a/src/wallet/v2/address/bank-info/CashOnboarding.tsx b/src/wallet/v2/address/bank-info/CashOnboarding.tsx index c32d128c9..8fda475fa 100644 --- a/src/wallet/v2/address/bank-info/CashOnboarding.tsx +++ b/src/wallet/v2/address/bank-info/CashOnboarding.tsx @@ -27,7 +27,7 @@ const CashOnboarding = observer( ); return ( - + { const navigation = useNavigation(); const walletActions = [ - { - title: i18n.t('wallet.transferToOnchain'), - onPress: () => { - navigation.navigate('WalletWithdrawal'); - }, - noIcon: true, - }, { title: i18n.t('wallet.leanMore'), onPress: navToTokens, @@ -37,6 +31,16 @@ const TokensOverview = observer(({ walletStore }: PropsType) => { }, ]; + if (ONCHAIN_ENABLED) { + walletActions.unshift({ + title: i18n.t('wallet.transferToOnchain'), + onPress: () => { + navigation.navigate('WalletWithdrawal'); + }, + noIcon: true, + }); + } + return ( <> diff --git a/src/wallet/v3/TokenPrice.tsx b/src/wallet/v3/TokenPrice.tsx index 5f30663b5..d82029e09 100644 --- a/src/wallet/v3/TokenPrice.tsx +++ b/src/wallet/v3/TokenPrice.tsx @@ -18,8 +18,6 @@ export default observer(function TokenPrice() { if (!result) { return null; } - - // .get('api/v3/blockchain/token-prices') return ( diff --git a/src/wallet/v3/currency-tabs/AccordionHeaderTitle.tsx b/src/wallet/v3/currency-tabs/AccordionHeaderTitle.tsx index b11fc20e9..b63d03f32 100644 --- a/src/wallet/v3/currency-tabs/AccordionHeaderTitle.tsx +++ b/src/wallet/v3/currency-tabs/AccordionHeaderTitle.tsx @@ -4,6 +4,7 @@ import React from 'react'; import sessionService from '../../../common/services/session.service'; import { getFriendlyLabel } from './EarningsOverview'; import { B1, B2, Column } from '~ui'; +import { PRO_PLUS_SUBSCRIPTION_ENABLED } from '~/config/Config'; type PropsType = { earningId: string; @@ -39,7 +40,7 @@ const AccordionHeaderTitle = observer(({ earningId }: PropsType) => { return ( {getFriendlyLabel(earningId)} - {earningId === 'partner' && !user.pro && ( + {earningId === 'partner' && !user.pro && PRO_PLUS_SUBSCRIPTION_ENABLED && ( Upgrade to{' '} {!user.plus && ( diff --git a/src/wallet/v3/currency-tabs/tokens/OnchainButton.tsx b/src/wallet/v3/currency-tabs/tokens/OnchainButton.tsx index bbc59481e..25c866876 100644 --- a/src/wallet/v3/currency-tabs/tokens/OnchainButton.tsx +++ b/src/wallet/v3/currency-tabs/tokens/OnchainButton.tsx @@ -11,6 +11,7 @@ import { isConnected as isWalletConnected, } from '../../useUniqueOnchain'; import { B2, Icon, Row } from '~ui'; +import { ONCHAIN_ENABLED } from '~/config/Config'; type PropsType = { containerStyle?: ViewStyle | Array; @@ -32,22 +33,28 @@ const OnchainButton = observer((props: PropsType) => { const children: any = {}; children.childrenButton1 = ( - {props.walletStore.wallet.eth.balance} ETH + + {props.walletStore.wallet.eth.balance} ETH{!ONCHAIN_ENABLED ? ' ' : ''} + ); - children.childrenButton2 = !isConnected ? ( - + if (ONCHAIN_ENABLED) { + children.childrenButton2 = !isConnected ? ( + + + {i18n.t(hasReceiver ? 'wallet.reconnect' : 'wallet.connect') + ' '} + + + + ) : ( - {i18n.t(hasReceiver ? 'wallet.reconnect' : 'wallet.connect') + ' '} + {props.walletStore.wallet.receiver.address?.substr(0, 6)}... + {props.walletStore.wallet.receiver.address?.substr(-6)} - - - ) : ( - - {props.walletStore.wallet.receiver.address?.substr(0, 6)}... - {props.walletStore.wallet.receiver.address?.substr(-6)} - - ); + ); + } else { + children.childrenButton2 = null; + } return props.onchainStore.loading ? ( diff --git a/src/wallet/v3/currency-tabs/tokens/TokenTabOptions.tsx b/src/wallet/v3/currency-tabs/tokens/TokenTabOptions.tsx index 436f32e29..bb907a0e4 100644 --- a/src/wallet/v3/currency-tabs/tokens/TokenTabOptions.tsx +++ b/src/wallet/v3/currency-tabs/tokens/TokenTabOptions.tsx @@ -12,7 +12,7 @@ import { BottomSheetButton, MenuItem, } from '../../../../common/components/bottom-sheet'; -import { ONCHAIN_ENABLED } from '../../../../config/Config'; +import { IS_IOS, ONCHAIN_ENABLED } from '../../../../config/Config'; type PropsType = { walletStore: WalletStoreType; @@ -52,15 +52,16 @@ const TokenTabOptions = observer((props: PropsType) => { iconName: 'arrow-right', iconType: 'material-community', }); - actions.push({ - title: i18n.t('buyTokensScreen.title'), - onPress: () => { - close(); - navigation.navigate('BuyTokens'); - }, - iconName: 'coins', - iconType: 'font-awesome-5', - }); + !IS_IOS && + actions.push({ + title: i18n.t('buyTokensScreen.title'), + onPress: () => { + close(); + navigation.navigate('BuyTokens'); + }, + iconName: 'coins', + iconType: 'font-awesome-5', + }); if (isConnected) { actions.push({ title: i18n.t('copyToClipboard'), @@ -76,6 +77,10 @@ const TokenTabOptions = observer((props: PropsType) => { return actions; }, [address, close, isConnected, navigation]); + if (dismissOptions.length === 0) { + return null; + } + return ( <> diff --git a/src/wallet/v3/currency-tabs/tokens/TokenTopBar.tsx b/src/wallet/v3/currency-tabs/tokens/TokenTopBar.tsx index 3b1867a00..45f4bb0df 100644 --- a/src/wallet/v3/currency-tabs/tokens/TokenTopBar.tsx +++ b/src/wallet/v3/currency-tabs/tokens/TokenTopBar.tsx @@ -9,6 +9,7 @@ import OnchainButton from './OnchainButton'; import TokenTabOptions from './TokenTabOptions'; import MindsTokens from '../MindsTokens'; import { Row, Spacer } from '~ui'; +import { ONCHAIN_ENABLED } from '~/config/Config'; type PropsType = { walletStore: WalletStoreType; @@ -24,43 +25,54 @@ const TokenTopBar = ({ const theme = ThemedStyles.style; const tooltipRef = useRef(); const screen = useDimensions().screen; + const tokens = ( + <> + }> + tooltipRef.current.toggleTooltip()}> + + + + + + ); + const onchain = ( + + ); + return ( - - }> - tooltipRef.current.toggleTooltip()}> - - - - - - - - + {ONCHAIN_ENABLED ? ( + <> + {tokens} + {onchain} + + ) : ( + + {tokens} + {onchain} + + )} ); }; diff --git a/src/wallet/v3/currency-tabs/tokens/TokensTab.tsx b/src/wallet/v3/currency-tabs/tokens/TokensTab.tsx index 666792ced..93f050b66 100644 --- a/src/wallet/v3/currency-tabs/tokens/TokensTab.tsx +++ b/src/wallet/v3/currency-tabs/tokens/TokensTab.tsx @@ -22,6 +22,7 @@ import { TokensTabStore } from './createTokensTabStore'; import i18n from '../../../../common/services/i18n.service'; import { Screen, Column } from '~ui'; import TransactionsListWithdrawals from './widthdrawal/TransactionsListWithdrawals'; +import { ONCHAIN_ENABLED } from '~/config/Config'; type PropsType = { walletStore: WalletStoreType; @@ -50,6 +51,9 @@ const TokensTab = observer(({ walletStore, navigation, store }: PropsType) => { ]; const connectWallet = React.useCallback(async () => { + if (!ONCHAIN_ENABLED) { + return; + } const user = sessionService.getUser(); const msg = JSON.stringify({ @@ -97,23 +101,26 @@ const TokensTab = observer(({ walletStore, navigation, store }: PropsType) => { } } catch (err) { console.error('There was an error', err); - showNotification(err.toString(), 'danger'); + if (err instanceof Error) { + showNotification(err.toString(), 'danger'); + } } finally { onchainStore.setLoading(false); } }, [onchainStore, walletStore, wc]); - const mustVerify = !sessionService.getUser().rewards - ? () => { - const onComplete = () => { - connectWallet(); - }; - //@ts-ignore - navigation.navigate('PhoneValidation', { - onComplete, - }); - } - : undefined; + const mustVerify = + !sessionService.getUser().rewards && ONCHAIN_ENABLED + ? () => { + const onComplete = () => { + connectWallet(); + }; + //@ts-ignore + navigation.navigate('PhoneValidation', { + onComplete, + }); + } + : undefined; let body; switch (store.option) { diff --git a/src/wallet/v3/currency-tabs/tokens/widthdrawal/createWithdrawStore.ts b/src/wallet/v3/currency-tabs/tokens/widthdrawal/createWithdrawStore.ts index 993a5f1a1..b998cd84c 100644 --- a/src/wallet/v3/currency-tabs/tokens/widthdrawal/createWithdrawStore.ts +++ b/src/wallet/v3/currency-tabs/tokens/widthdrawal/createWithdrawStore.ts @@ -106,7 +106,7 @@ const createWithdrawStore = (p: { return response && response.entity; } catch (err) { - if (err.message !== 'E_CANCELLED') { + if (err instanceof Error && err.message !== 'E_CANCELLED') { const error = err.message || i18n.t('wallet.withdraw.errorWithdrawing'); showNotification(error, 'warning'); diff --git a/src/wallet/v3/transaction-list/components/Filter.tsx b/src/wallet/v3/transaction-list/components/Filter.tsx index 77bc0223a..027dbdee0 100644 --- a/src/wallet/v3/transaction-list/components/Filter.tsx +++ b/src/wallet/v3/transaction-list/components/Filter.tsx @@ -12,7 +12,13 @@ import { } from '../../../../common/components/bottom-sheet'; import { B3, Icon, Row } from '~ui'; -const filters: Array<{ id: transactionTypes; title: string }> = [ +type titleType = + | 'allFilter' + | 'rewardsFilter' + | 'boostsFilter' + | 'transferFilter'; + +const filters: Array<{ id: transactionTypes; title: titleType }> = [ { id: 'all', title: 'allFilter' }, { id: 'offchain:reward', title: 'rewardsFilter' }, { id: 'offchain:boost', title: 'boostsFilter' }, diff --git a/src/wire/WireTypes.ts b/src/wire/WireTypes.ts index a9bc33dee..56def71c8 100644 --- a/src/wire/WireTypes.ts +++ b/src/wire/WireTypes.ts @@ -4,7 +4,7 @@ export type Currency = 'tokens' | 'usd' | 'eth' | 'btc'; export type Reward = { amount: number; - description: 'string'; + description: string; currency: Currency; }; diff --git a/src/wire/lock/Lock.tsx b/src/wire/lock/Lock.tsx deleted file mode 100644 index 2000a72dc..000000000 --- a/src/wire/lock/Lock.tsx +++ /dev/null @@ -1,215 +0,0 @@ -import React, { PureComponent } from 'react'; - -import { View, Alert, StyleSheet } from 'react-native'; - -import { Icon } from 'react-native-elements'; -import FastImage from 'react-native-fast-image'; - -import currency from '../../common/helpers/currency'; -import Button from '../../common/components/Button'; - -import { MINDS_ASSETS_CDN_URI, MINDS_CDN_URI } from '../../config/Config'; - -import i18n from '../../common/services/i18n.service'; -import type ActivityModel from '../../newsfeed/ActivityModel'; -import ThemedStyles from '../../styles/ThemedStyles'; -import MText from '../../common/components/MText'; - -type PropsType = { - entity: ActivityModel; - navigation: any; -}; - -const imageStyle = { height: 200, width: '100%' }; -const iconStyle = { fontSize: 22 }; - -/** - * Wire lock component - */ -export default class Lock extends PureComponent { - state = { - unlocking: false, - }; - - /** - * Render - */ - render() { - const entity = this.props.entity; - const theme = ThemedStyles.style; - - if (entity.isOwner()) { - return ( - - - {this.getOwnerIntro()} - - - - - {i18n.t('locked')} - - - - ); - } - - const intro = this.getIntro(); - - const imageUri = { uri: this.getBackground() }; - - return ( - - - - {intro} - - - - - - - - {i18n.t('wire.amountMonth', { amount: this.getFormatedAmount() })} - - - {i18n.t('wire.amountMonthDescription', { - amount: this.getFormatedAmount().toUpperCase(), - name: entity.ownerObj.name.toUpperCase(), - })} - - - - ); - } - - /** - * Unlock - */ - unlock = () => { - this.setState({ unlocking: true }); - - this.props.entity.unlock(true).then(result => { - this.setState({ unlocking: false }); - if (result) return; - this.props.navigation.navigate('WireFab', { - owner: this.props.entity.ownerObj, - default: this.props.entity.wire_threshold, - onComplete: (resultComplete: any) => { - if (resultComplete && resultComplete.payload.method === 'onchain') { - setTimeout(() => { - Alert.alert( - i18n.t('wire.weHaveReceivedYourTransaction'), - i18n.t('wire.pleaseTryUnlockingMessage'), - ); - }, 400); - } else { - this.props.entity.unlock(); - } - }, - }); - }); - }; - - /** - * Get lock background image uri - */ - getBackground() { - const entity = this.props.entity; - - if (entity._preview) { - return entity.ownerObj.merchant.exclusive._backgroundPreview; - } - - let background = entity.get('ownerObj.merchant.exclusive.background'); - - if (!background) { - return ( - MINDS_ASSETS_CDN_URI + 'front/dist/assets/photos/andromeda-galaxy.jpg' - ); - } - return ( - MINDS_CDN_URI + - 'fs/v1/paywall/preview/' + - entity.ownerObj.guid + - '/' + - background - ); - } - - /** - * Get intro for owners - */ - getOwnerIntro() { - return i18n.t('wire.onlySupportersWhoWire', { - amount: this.getFormatedAmount(), - }); - } - - /** - * Get intro - */ - getIntro() { - const entity = this.props.entity; - - let intro = entity.get('ownerObj.merchant.exclusive.intro'); - if (intro) return intro; - - intro = i18n.t('wire.wireMeOver', { amount: this.getFormatedAmount() }); - return intro; - } - - /** - * Get the formated amount - */ - getFormatedAmount(): string { - const entity = this.props.entity; - if ( - entity.wire_threshold && - 'min' in entity.wire_threshold && - entity.wire_threshold.min - ) { - return currency( - entity.wire_threshold.min, - entity.wire_threshold.type, - 'suffix', - ); - } - return '0'; - } -} - -const styles = StyleSheet.create({ - textContainer: { - flex: 1, - padding: 8, - }, - mask: { - position: 'absolute', - bottom: 0, - height: 200, - width: '100%', - backgroundColor: 'rgba(0,0,0,0.4)', - }, -}); diff --git a/src/wire/methods/PaymentMethodSelector.tsx b/src/wire/methods/PaymentMethodSelector.tsx index 51d7beecb..2cffcd4ec 100644 --- a/src/wire/methods/PaymentMethodSelector.tsx +++ b/src/wire/methods/PaymentMethodSelector.tsx @@ -1,8 +1,5 @@ import React from 'react'; - import { View, TouchableOpacity } from 'react-native'; - -import featuresService from '../../common/services/features.service'; import testID from '../../common/helpers/testID'; import PaymentMethodIcon from './PaymentMethodIcon'; import ThemedStyles from '../../styles/ThemedStyles'; @@ -17,27 +14,12 @@ type PropsType = { * Payment method selector */ export default class PaymentMethodSelector extends React.PureComponent { - methods: Array; - - /** - * @param {PropsType} props - */ - constructor(props: PropsType) { - super(props); - - if (featuresService.has('wire-multi-currency')) { - this.methods = [ - { label: 'Tokens', handle: (): any => this.onSelect('tokens') }, - { label: 'USD', handle: (): any => this.onSelect('usd') }, - { label: 'BTC', handle: (): any => this.onSelect('btc') }, - { label: 'ETH', handle: (): any => this.onSelect('eth') }, - ]; - } else { - this.methods = [ - { label: 'Tokens', handle: (): any => this.onSelect('tokens') }, - ]; - } - } + methods = [ + { label: 'Tokens', handle: (): any => this.onSelect('tokens') }, + { label: 'USD', handle: (): any => this.onSelect('usd') }, + { label: 'BTC', handle: (): any => this.onSelect('btc') }, + { label: 'ETH', handle: (): any => this.onSelect('eth') }, + ]; /** * On method selected diff --git a/src/wire/methods/StripeCardSelector.tsx b/src/wire/methods/StripeCardSelector.tsx index 89f83f2b9..3fc3d0cc0 100644 --- a/src/wire/methods/StripeCardSelector.tsx +++ b/src/wire/methods/StripeCardSelector.tsx @@ -4,7 +4,7 @@ import { View, Alert } from 'react-native'; import api, { ApiResponse } from '../../common/services/api.service'; import stripe, { initStripe } from '../../common/services/stripe.service'; import Button from '../../common/components/Button'; -import i18nService from '../../common/services/i18n.service'; +import i18n from '../../common/services/i18n.service'; import StripeCardCarousel from './StripeCardCarousel'; import type { StripeCard } from '../WireTypes'; import ActivityIndicator from '../../common/components/ActivityIndicator'; @@ -116,7 +116,7 @@ export default class StripeCardSelector extends React.PureComponent< * @param {string} message */ showError(message: string) { - Alert.alert(message + '\n' + i18nService.t('tryAgain')); + Alert.alert(message + '\n' + i18n.t('tryAgain')); } /** @@ -131,7 +131,7 @@ export default class StripeCardSelector extends React.PureComponent< this.intentId = intent.id; return true; } catch (err) { - this.showError(i18nService.t('cantReachServer')); + this.showError(i18n.t('cantReachServer')); return false; } } @@ -193,11 +193,14 @@ export default class StripeCardSelector extends React.PureComponent< // finally we save the card this.saveCard(); } catch (err) { - if (err.message && err.message === 'Cancelled by user') { - return; + if (err instanceof Error) { + if (err.message && err.message === 'Cancelled by user') { + return; + } + this.showError(err.message || i18n.t('errorMessage')); + } else { + this.showError(i18n.t('errorMessage')); } - this.showError(err.message || i18nService.t('errorMessage')); - console.log(err); } }; diff --git a/src/wire/methods/v2/StripeCardSelector.tsx b/src/wire/methods/v2/StripeCardSelector.tsx index 1559fd24d..ae9a9982f 100644 --- a/src/wire/methods/v2/StripeCardSelector.tsx +++ b/src/wire/methods/v2/StripeCardSelector.tsx @@ -236,11 +236,15 @@ export default class StripeCardSelector extends React.PureComponent< // finally we save the card this.saveCard(); } catch (err) { - if (err.message && err.message === 'Cancelled by user') { - return; - } - this.showError(err.message || i18n.t('errorMessage')); console.log(err); + if (err instanceof Error) { + if (err.message && err.message === 'Cancelled by user') { + return; + } + this.showError(err.message || i18n.t('errorMessage')); + } else { + this.showError(i18n.t('errorMessage')); + } } }; diff --git a/src/wire/tiers/SubscriptionTierCarousel.tsx b/src/wire/tiers/SubscriptionTierCarousel.tsx index a27124158..f97d526ed 100644 --- a/src/wire/tiers/SubscriptionTierCarousel.tsx +++ b/src/wire/tiers/SubscriptionTierCarousel.tsx @@ -2,7 +2,6 @@ import React, { PureComponent } from 'react'; import { View, StyleSheet } from 'react-native'; import Carousel, { Pagination } from 'react-native-snap-carousel'; -import featuresService from '../../common/services/features.service'; import viewportPercentage from '../../common/helpers/viewportPercentage'; import i18n from '../../common/services/i18n.service'; import ThemedStyles from '../../styles/ThemedStyles'; @@ -63,13 +62,10 @@ export default class SubscriptionTierCarousel extends PureComponent { }, ]; const methodsMap: Array = [ - { method: 'tokens', currency: 'tokens' } as MethodCurrencyMapper, + { method: 'tokens', currency: 'tokens' }, + { method: 'money', currency: 'usd' }, ]; - if (featuresService.has('wire-multi-currency')) { - methodsMap.push({ method: 'money', currency: 'usd' }); - } - for (const { method, currency } of methodsMap) { if (this.props.rewards[method]) { for (const reward of this.props.rewards[method]) { diff --git a/src/wire/v2/FabScreen.tsx b/src/wire/v2/FabScreen.tsx index 2ab418d0a..0d0efad1b 100644 --- a/src/wire/v2/FabScreen.tsx +++ b/src/wire/v2/FabScreen.tsx @@ -1,4 +1,4 @@ -import React, { Fragment, useEffect } from 'react'; +import React, { useEffect } from 'react'; import { observer, useLocalStore } from 'mobx-react'; import { View, StyleSheet, ScrollView, Alert, Platform } from 'react-native'; import ThemedStyles from '../../styles/ThemedStyles'; @@ -18,6 +18,7 @@ import useWalletConnect from '../../blockchain/v2/walletconnect/useWalletConnect import { WCStore } from '../../blockchain/v2/walletconnect/WalletConnectContext'; import { storages } from '../../common/services/storage/storages.service'; import MText from '../../common/components/MText'; +import DismissKeyboard from '~/common/components/DismissKeyboard'; const isIos = Platform.OS === 'ios'; @@ -120,12 +121,14 @@ const createFabScreenStore = ({ wc }: { wc: WCStore }) => { this.goBack(); } } catch (e) { - if (!e || e.message !== 'E_CANCELLED') { + if (!e || (e instanceof Error && e.message !== 'E_CANCELLED')) { logService.error(e); Alert.alert( i18n.t('wire.errorSendingWire'), - (e && e.message) || 'Unknown internal error', + e && e instanceof Error && e.message + ? e.message + : 'Unknown internal error', [{ text: i18n.t('ok') }], { cancelable: false }, ); @@ -177,7 +180,7 @@ const FabScreen = observer(({ route, navigation }) => { const cleanTop = insets.top ? { marginTop: insets.top } : null; return ( - + @@ -209,7 +212,7 @@ const FabScreen = observer(({ route, navigation }) => { - + ); }); diff --git a/tsconfig.json b/tsconfig.json index ab19923b0..900c38218 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,6 +10,7 @@ "esModuleInterop": true, "isolatedModules": true, "skipLibCheck": true, + "resolveJsonModule": true, "jsx": "react-native", "lib": ["es6"], "module": "commonjs", diff --git a/yarn.lock b/yarn.lock index 024e0ce1b..bd88e4b8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== @@ -23,6 +23,13 @@ dependencies: "@babel/highlight" "^7.16.0" +"@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + "@babel/code-frame@~7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" @@ -30,11 +37,16 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/compat-data@^7.12.13", "@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.12", "@babel/compat-data@^7.13.8": +"@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.8": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1" integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" + integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== + "@babel/compat-data@^7.14.5": version "7.14.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" @@ -50,28 +62,6 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== -"@babel/core@7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" - integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.0" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.9.0" - "@babel/parser" "^7.9.0" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.9.0" - "@babel/types" "^7.9.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - "@babel/core@^7.0.0": version "7.15.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.5.tgz#f8ed9ace730722544609f90c9bb49162dc3bf5b9" @@ -157,7 +147,7 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.13.0", "@babel/generator@^7.13.9", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": +"@babel/generator@^7.13.0", "@babel/generator@^7.13.9", "@babel/generator@^7.4.0": version "7.13.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== @@ -193,6 +183,24 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== + dependencies: + "@babel/types" "^7.16.8" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.17.3": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" + integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== + dependencies: + "@babel/types" "^7.17.0" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" @@ -207,6 +215,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" @@ -215,7 +230,15 @@ "@babel/helper-explode-assignable-expression" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/helper-compilation-targets@^7.12.17", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.10", "@babel/helper-compilation-targets@^7.13.8": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.10", "@babel/helper-compilation-targets@^7.13.8": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz#1310a1678cb8427c07a753750da4f8ce442bdd0c" integrity sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA== @@ -255,7 +278,17 @@ browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.12.13", "@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.6.0": +"@babel/helper-compilation-targets@^7.16.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" + integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.6.0": version "7.13.11" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== @@ -266,6 +299,19 @@ "@babel/helper-replace-supers" "^7.13.0" "@babel/helper-split-export-declaration" "^7.12.13" +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" + integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-create-regexp-features-plugin@^7.12.13": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" @@ -274,6 +320,14 @@ "@babel/helper-annotate-as-pure" "^7.12.13" regexpu-core "^4.7.1" +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" + integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^5.0.1" + "@babel/helper-define-polyfill-provider@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" @@ -288,6 +342,27 @@ resolve "^1.14.2" semver "^6.1.2" +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + dependencies: + "@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/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-explode-assignable-expression@^7.12.13": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" @@ -295,6 +370,13 @@ dependencies: "@babel/types" "^7.13.0" +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-function-name@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" @@ -331,6 +413,15 @@ "@babel/template" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-get-function-arity@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" @@ -359,13 +450,12 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz#5d5882e855b5c5eda91e0cadc26c6e7a2c8593d8" - integrity sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g== +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== dependencies: - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" + "@babel/types" "^7.16.7" "@babel/helper-hoist-variables@^7.14.5": version "7.14.5" @@ -388,6 +478,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" @@ -416,6 +513,20 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" + integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== + dependencies: + "@babel/types" "^7.17.0" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" @@ -444,7 +555,7 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.9.0": +"@babel/helper-module-transforms@^7.13.0": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz#600e58350490828d82282631a1422268e982ba96" integrity sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ== @@ -500,6 +611,20 @@ "@babel/traverse" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" + integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" @@ -528,6 +653,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" @@ -538,14 +670,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-remap-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" - integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" +"@babel/helper-plugin-utils@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== "@babel/helper-remap-async-to-generator@^7.16.0": version "7.16.4" @@ -556,6 +684,15 @@ "@babel/helper-wrap-function" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + "@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" @@ -596,6 +733,17 @@ "@babel/traverse" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" @@ -624,6 +772,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-simple-access@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" + integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== + dependencies: + "@babel/types" "^7.17.0" + "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" @@ -631,6 +786,13 @@ dependencies: "@babel/types" "^7.12.1" +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== + dependencies: + "@babel/types" "^7.16.0" + "@babel/helper-split-export-declaration@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" @@ -659,6 +821,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" @@ -679,6 +848,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + "@babel/helper-validator-option@^7.12.17": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" @@ -689,15 +863,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== -"@babel/helper-wrap-function@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" - integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== "@babel/helper-wrap-function@^7.16.0": version "7.16.0" @@ -709,7 +878,17 @@ "@babel/traverse" "^7.16.0" "@babel/types" "^7.16.0" -"@babel/helpers@^7.13.10", "@babel/helpers@^7.9.0": +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helpers@^7.13.10": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== @@ -772,7 +951,16 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10", "@babel/parser@^7.4.3", "@babel/parser@^7.9.0": +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10", "@babel/parser@^7.4.3": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.12.tgz#ba320059420774394d3b0c0233ba40e4250b81d1" integrity sha512-4T7Pb244rxH24yR116LAuJ+adxXXnHhZaLJjegJVKSdoNCe4x1eDBaud5YIcQFcqzsaD5BHvJw5BQ0AZapdCRw== @@ -792,22 +980,39 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.7.tgz#0c3ed4a2eb07b165dfa85b3cc45c727334c4edae" integrity sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" - integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== +"@babel/parser@^7.16.10", "@babel/parser@^7.16.7": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== + +"@babel/parser@^7.17.3": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" + integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-async-generator-functions@^7.12.13", "@babel/plugin-proposal-async-generator-functions@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1" - integrity sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + +"@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@7.5.5": @@ -818,7 +1023,7 @@ "@babel/helper-create-class-features-plugin" "^7.5.5" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.12.13", "@babel/plugin-proposal-class-properties@^7.13.0": +"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.1.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== @@ -826,13 +1031,22 @@ "@babel/helper-create-class-features-plugin" "^7.13.0" "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-proposal-class-properties@~7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz#3d2ce350367058033c93c098e348161d6dc0d8c8" - integrity sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA== +"@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" + integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.17.6" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@7.6.0": version "7.6.0" @@ -843,21 +1057,23 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-decorators" "^7.2.0" -"@babel/plugin-proposal-decorators@^7.6.0": - version "7.13.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.5.tgz#d28071457a5ba8ee1394b23e38d5dcf32ea20ef7" - integrity sha512-i0GDfVNuoapwiheevUOuSW67mInqJ8qw7uWfpjNVeHMn143kXblEy/bmL9AdZ/0yf/4BMQeWXezK0tQIvNPqag== +"@babel/plugin-proposal-decorators@^7.12.9": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.8.tgz#4f0444e896bee85d35cf714a006fc5418f87ff00" + integrity sha512-U69odN4Umyyx1xO1rTII0IDkAEC+RNlcKXtqOblfpzqy1C+aOplb76BQNq0+XdpVkOaPlpEDwd++joY8FNFJKA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-decorators" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.17.6" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/plugin-syntax-decorators" "^7.17.0" + charcodes "^0.2.0" -"@babel/plugin-proposal-dynamic-import@^7.12.17", "@babel/plugin-proposal-dynamic-import@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" - integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-proposal-export-default-from@^7.0.0": @@ -868,31 +1084,31 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-export-default-from" "^7.12.13" -"@babel/plugin-proposal-export-namespace-from@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" - integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.12.13", "@babel/plugin-proposal-json-strings@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" - integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.12.13", "@babel/plugin-proposal-logical-assignment-operators@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" - integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.13", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== @@ -900,15 +1116,23 @@ "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" - integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.12.13", "@babel/plugin-proposal-object-rest-spread@^7.13.8": +"@babel/plugin-proposal-object-rest-spread@^7.0.0": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== @@ -919,7 +1143,18 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.13.0" -"@babel/plugin-proposal-optional-catch-binding@^7.0.0", "@babel/plugin-proposal-optional-catch-binding@^7.12.13", "@babel/plugin-proposal-optional-catch-binding@^7.13.8": +"@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" + integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== + dependencies: + "@babel/compat-data" "^7.17.0" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.0.0": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== @@ -927,7 +1162,15 @@ "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.1.0", "@babel/plugin-proposal-optional-chaining@^7.12.17", "@babel/plugin-proposal-optional-chaining@^7.13.12": +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.1.0": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866" integrity sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ== @@ -936,15 +1179,42 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.12.13", "@babel/plugin-proposal-private-methods@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" - integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== +"@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== @@ -952,7 +1222,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": +"@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== @@ -973,14 +1243,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-decorators@^7.12.13", "@babel/plugin-syntax-decorators@^7.2.0": +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz#a2be3b2c9fe7d78bd4994e790896bc411e2f166d" + integrity sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-syntax-decorators@^7.2.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz#fac829bf3c7ef4a1bc916257b403e58c6bdaf648" integrity sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": +"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== @@ -1015,7 +1299,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": +"@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== @@ -1029,6 +1313,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-jsx@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" + integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -1036,7 +1327,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== @@ -1050,28 +1341,42 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-chaining@^7.0.0", "@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": +"@babel/plugin-syntax-optional-chaining@^7.0.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== @@ -1085,6 +1390,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-typescript@^7.16.7": + version "7.17.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz#80031e6042cad6a95ed753f672ebd23c30933195" + integrity sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-typescript@^7.7.2": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716" @@ -1092,13 +1404,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.12.13", "@babel/plugin-transform-arrow-functions@^7.13.0": +"@babel/plugin-transform-arrow-functions@^7.0.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== dependencies: "@babel/helper-plugin-utils" "^7.13.0" +"@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-async-to-generator@^7.0.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz#df12637f9630ddfa0ef9d7a11bc414d629d38604" @@ -1108,30 +1427,44 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-remap-async-to-generator" "^7.16.0" -"@babel/plugin-transform-async-to-generator@^7.12.13", "@babel/plugin-transform-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" - integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== +"@babel/plugin-transform-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" -"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.12.13": +"@babel/plugin-transform-block-scoped-functions@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.12.13": +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-block-scoping@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.12.13", "@babel/plugin-transform-classes@^7.13.0": +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-classes@^7.0.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== @@ -1144,21 +1477,57 @@ "@babel/helper-split-export-declaration" "^7.12.13" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.12.13", "@babel/plugin-transform-computed-properties@^7.13.0": +"@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.0.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== dependencies: "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.12.13", "@babel/plugin-transform-destructuring@^7.13.0": +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-destructuring@^7.0.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== dependencies: "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": +"@babel/plugin-transform-destructuring@^7.16.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1" + integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-dotall-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-dotall-regex@^7.4.4": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== @@ -1166,14 +1535,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-duplicate-keys@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.12.13": +"@babel/plugin-transform-exponentiation-operator@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== @@ -1181,6 +1550,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.12.13": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz#58177a48c209971e8234e99906cb6bd1122addd3" @@ -1189,14 +1566,21 @@ "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-flow" "^7.12.13" -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.12.13", "@babel/plugin-transform-for-of@^7.13.0": +"@babel/plugin-transform-for-of@^7.0.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== dependencies: "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.12.13": +"@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-function-name@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== @@ -1204,30 +1588,53 @@ "@babel/helper-function-name" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.12.13": +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== + dependencies: + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-literals@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.12.13": +"@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-member-expression-literals@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-modules-amd@^7.12.13", "@babel/plugin-transform-modules-amd@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" - integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.12.13", "@babel/plugin-transform-modules-commonjs@^7.13.8": +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.1.0": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== @@ -1237,47 +1644,64 @@ "@babel/helper-simple-access" "^7.12.13" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.12.13", "@babel/plugin-transform-modules-systemjs@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" - integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== +"@babel/plugin-transform-modules-commonjs@^7.16.8": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz#d86b217c8e45bb5f2dbc11eefc8eab62cf980d19" + integrity sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA== dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.12.13", "@babel/plugin-transform-modules-umd@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" - integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859" + integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-new-target@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-object-assign@^7.0.0", "@babel/plugin-transform-object-assign@^7.10.4": +"@babel/plugin-transform-object-assign@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.13.tgz#d9b9200a69e03403a813e44a933ad9f4bddfd050" integrity sha512-4QxDMc0lAOkIBSfCrnSGbAJ+4epDBF2XXwcLXuBcG1xl9u7LrktNVD4+LwhL47XuKVPQ7R25e/WdcV+h97HyZA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.12.13": +"@babel/plugin-transform-object-assign@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz#5fe08d63dccfeb6a33aa2638faf98e5c584100f8" + integrity sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-object-super@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== @@ -1285,20 +1709,42 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/helper-replace-supers" "^7.12.13" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.12.13", "@babel/plugin-transform-parameters@^7.13.0": +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== dependencies: "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.12.13": +"@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-property-literals@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-react-display-name@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd" @@ -1331,19 +1777,37 @@ "@babel/plugin-syntax-jsx" "^7.12.13" "@babel/types" "^7.13.12" -"@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.12.13": +"@babel/plugin-transform-react-jsx@^7.12.17": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" + integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.16.7" + "@babel/types" "^7.17.0" + +"@babel/plugin-transform-regenerator@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== +"@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-runtime@^7.0.0", "@babel/plugin-transform-runtime@^7.5.5": version "7.13.10" @@ -1357,14 +1821,21 @@ babel-plugin-polyfill-regenerator "^0.1.2" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.12.13": +"@babel/plugin-transform-shorthand-properties@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.12.13", "@babel/plugin-transform-spread@^7.13.0": +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-spread@^7.0.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== @@ -1372,28 +1843,50 @@ "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" -"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.12.13": +"@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + +"@babel/plugin-transform-sticky-regex@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.12.13", "@babel/plugin-transform-template-literals@^7.13.0": +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-template-literals@^7.0.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== dependencies: "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-typeof-symbol@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typescript@^7.12.17", "@babel/plugin-transform-typescript@^7.13.0", "@babel/plugin-transform-typescript@^7.5.0": +"@babel/plugin-transform-typescript@^7.13.0", "@babel/plugin-transform-typescript@^7.5.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853" integrity sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ== @@ -1402,14 +1895,23 @@ "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-typescript" "^7.12.13" -"@babel/plugin-transform-unicode-escapes@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" - integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== +"@babel/plugin-transform-typescript@^7.16.7": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" + integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-typescript" "^7.16.7" + +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.12.13": +"@babel/plugin-transform-unicode-regex@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== @@ -1417,31 +1919,43 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/preset-env@^7.6.3": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.12.tgz#6dff470478290582ac282fb77780eadf32480237" - integrity sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA== - dependencies: - "@babel/compat-data" "^7.13.12" - "@babel/helper-compilation-targets" "^7.13.10" - "@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-class-properties" "^7.13.0" - "@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" - "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" - "@babel/plugin-proposal-numeric-separator" "^7.12.13" - "@babel/plugin-proposal-object-rest-spread" "^7.13.8" - "@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-unicode-property-regex" "^7.12.13" +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/preset-env@^7.12.9": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== + dependencies: + "@babel/compat-data" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" "@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" @@ -1451,119 +1965,48 @@ "@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-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-classes" "^7.13.0" - "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.13.0" - "@babel/plugin-transform-dotall-regex" "^7.12.13" - "@babel/plugin-transform-duplicate-keys" "^7.12.13" - "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.13.0" - "@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-systemjs" "^7.13.8" - "@babel/plugin-transform-modules-umd" "^7.13.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-reserved-words" "^7.12.13" - "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.13.0" - "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.13.0" - "@babel/plugin-transform-typeof-symbol" "^7.12.13" - "@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" - core-js-compat "^3.9.0" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.8" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.8" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.20.2" semver "^6.3.0" -"@babel/preset-env@~7.12.13": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.17.tgz#94a3793ff089c32ee74d76a3c03a7597693ebaaa" - integrity sha512-9PMijx8zFbCwTHrd2P4PJR5nWGH3zWebx2OcpTjqQrHhCiL2ssSR2Sc9ko2BsI2VmVBfoaQmPrlMTCui4LmXQg== - dependencies: - "@babel/compat-data" "^7.12.13" - "@babel/helper-compilation-targets" "^7.12.17" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-proposal-async-generator-functions" "^7.12.13" - "@babel/plugin-proposal-class-properties" "^7.12.13" - "@babel/plugin-proposal-dynamic-import" "^7.12.17" - "@babel/plugin-proposal-export-namespace-from" "^7.12.13" - "@babel/plugin-proposal-json-strings" "^7.12.13" - "@babel/plugin-proposal-logical-assignment-operators" "^7.12.13" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.13" - "@babel/plugin-proposal-numeric-separator" "^7.12.13" - "@babel/plugin-proposal-object-rest-spread" "^7.12.13" - "@babel/plugin-proposal-optional-catch-binding" "^7.12.13" - "@babel/plugin-proposal-optional-chaining" "^7.12.17" - "@babel/plugin-proposal-private-methods" "^7.12.13" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.12.13" - "@babel/plugin-transform-async-to-generator" "^7.12.13" - "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.12.13" - "@babel/plugin-transform-classes" "^7.12.13" - "@babel/plugin-transform-computed-properties" "^7.12.13" - "@babel/plugin-transform-destructuring" "^7.12.13" - "@babel/plugin-transform-dotall-regex" "^7.12.13" - "@babel/plugin-transform-duplicate-keys" "^7.12.13" - "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.12.13" - "@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.12.13" - "@babel/plugin-transform-modules-commonjs" "^7.12.13" - "@babel/plugin-transform-modules-systemjs" "^7.12.13" - "@babel/plugin-transform-modules-umd" "^7.12.13" - "@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.12.13" - "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.12.13" - "@babel/plugin-transform-reserved-words" "^7.12.13" - "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.12.13" - "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.12.13" - "@babel/plugin-transform-typeof-symbol" "^7.12.13" - "@babel/plugin-transform-unicode-escapes" "^7.12.13" - "@babel/plugin-transform-unicode-regex" "^7.12.13" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.12.17" - core-js-compat "^3.8.0" - semver "^5.5.0" - "@babel/preset-flow@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.12.13.tgz#71ee7fe65a95b507ac12bcad65a4ced27d8dfc3e" @@ -1572,10 +2015,10 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-transform-flow-strip-types" "^7.12.13" -"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -1592,14 +2035,14 @@ "@babel/helper-validator-option" "^7.12.17" "@babel/plugin-transform-typescript" "^7.13.0" -"@babel/preset-typescript@~7.12.13": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.17.tgz#8ecf04618956c268359dd9feab775dc14a666eb5" - integrity sha512-T513uT4VSThRcmWeqcLkITKJ1oGQho9wfWuhQm10paClQkp1qyd0Wf8mvC8Se7UYssMyRSj4tZYpVTkCmAK/mA== +"@babel/preset-typescript@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" + integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-transform-typescript" "^7.12.17" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.16.7" "@babel/register@^7.0.0": version "7.13.8" @@ -1612,13 +2055,20 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.14.0": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2" + integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.2.0": version "7.15.3" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b" @@ -1626,7 +2076,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.0.0", "@babel/template@^7.12.13", "@babel/template@^7.3.3", "@babel/template@^7.4.0", "@babel/template@^7.8.6": +"@babel/template@^7.0.0", "@babel/template@^7.12.13", "@babel/template@^7.3.3", "@babel/template@^7.4.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== @@ -1662,7 +2112,16 @@ "@babel/parser" "^7.16.0" "@babel/types" "^7.16.0" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.9.0": +"@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.4.3": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== @@ -1722,7 +2181,39 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.17", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.9.0": +"@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" + integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.3" + "@babel/types" "^7.17.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.4.5": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.12.tgz#edbf99208ef48852acdff1c8a681a1e4ade580cd" integrity sha512-K4nY2xFN4QMvQwkQ+zmBDp6ANMbVNw6BbxWmYA4qNjhR9W+Lj/8ky5MEY2Me5r+B2c6/v6F53oMndG+f9s3IiA== @@ -1752,7 +2243,23 @@ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-validator-identifier" "^7.15.7" + to-fast-properties "^2.0.0" + +"@babel/types@^7.16.7", "@babel/types@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@babel/types@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1789,7 +2296,7 @@ dependencies: "@types/hammerjs" "^2.0.36" -"@emotion/is-prop-valid@^0.8.2": +"@emotion/is-prop-valid@^0.8.2", "@emotion/is-prop-valid@^0.8.8": version "0.8.8" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== @@ -1801,6 +2308,16 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== +"@emotion/stylis@^0.8.4": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== + +"@emotion/unitless@^0.7.4": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + "@eslint/eslintrc@^0.2.1": version "0.2.2" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" @@ -1991,32 +2508,37 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" -"@expo/config-plugins@2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-2.0.4.tgz#955fd70a2aeefbe99ec71cecb1d7ea7b626dc79e" - integrity sha512-JGt/X2tFr7H8KBQrKfbGo9hmCubQraMxq5sj3bqDdKmDOLcE1a/EDCP9g0U4GHsa425J8VDIkQUHYz3h3ndEXQ== +"@expo/config-plugins@4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-4.0.6.tgz#ef52f0e4d96ddd52b4cd4cc8c6efbe3d9576c72d" + integrity sha512-K/KQaw/CU8uLQgk7sFnZC54YGHoGucKFfdjYeZx5ds2eyzbuMAiKzGFcxZ/S+1dVBZ8QHzwowsVBW3kuYhnQ3Q== dependencies: - "@expo/config-types" "^41.0.0" - "@expo/json-file" "8.2.30" - "@expo/plist" "0.0.13" + "@expo/config-types" "^43.0.1" + "@expo/json-file" "8.2.33" + "@expo/plist" "0.0.15" + "@react-native/normalize-color" "^2.0.0" + chalk "^4.1.2" debug "^4.3.1" find-up "~5.0.0" fs-extra "9.0.0" getenv "^1.0.0" glob "7.1.6" resolve-from "^5.0.0" + semver "^7.3.5" slash "^3.0.0" xcode "^3.0.1" - xml2js "^0.4.23" + xml2js "0.4.23" -"@expo/config-plugins@3.1.0", "@expo/config-plugins@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-3.1.0.tgz#0752ff33c5eab21cf42034a44e79df97f0f867f8" - integrity sha512-V5qxaxCAExBM0TXmbU1QKiZcAGP3ecu7KXede8vByT15cro5PkcWu2sSdJCYbHQ/gw6Vf/i8sr8gKlN8V8TSLg== - dependencies: - "@expo/config-types" "^42.0.0" - "@expo/json-file" "8.2.33" - "@expo/plist" "0.0.14" +"@expo/config-plugins@4.1.0", "@expo/config-plugins@^4.0.2": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-4.1.0.tgz#0365e2e51e2e3e3b4e7db1fbbada5be661798be6" + integrity sha512-+Uq7kzi1StUZZZivnnqNV6+v8b+SMF6MDgH+cEZxCoM9uwLXOK0rTAURzBGtl+C6EEbKnoZmnKGuzABBGPRP7A== + dependencies: + "@expo/config-types" "^44.0.0" + "@expo/json-file" "8.2.34" + "@expo/plist" "0.0.17" + "@expo/sdk-runtime-versions" "^1.0.0" + "@react-native/normalize-color" "^2.0.0" chalk "^4.1.2" debug "^4.3.1" find-up "~5.0.0" @@ -2027,26 +2549,26 @@ semver "^7.3.5" slash "^3.0.0" xcode "^3.0.1" - xml2js "^0.4.23" + xml2js "0.4.23" -"@expo/config-types@^41.0.0": - version "41.0.0" - resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-41.0.0.tgz#ffe1444c6c26e0e3a8f7149b4afe486e357536d1" - integrity sha512-Ax0pHuY5OQaSrzplOkT9DdpdmNzaVDnq9VySb4Ujq7UJ4U4jriLy8u93W98zunOXpcu0iiKubPsqD6lCiq0pig== +"@expo/config-types@^43.0.1": + version "43.0.1" + resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-43.0.1.tgz#3e047dccb371741a540980eaff26fb0c95039c30" + integrity sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ== -"@expo/config-types@^42.0.0": - version "42.0.0" - resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-42.0.0.tgz#3e3e125ec092c0c34dbfaf19be5480402de3d677" - integrity sha512-Rj02OMZke2MrGa/1Y/EScmR7VuWbDEHPJyvfFyyLbadUt+Yv6isCdeFzDt71I7gJlPR9T4fzixeYLrtXXOTq0w== +"@expo/config-types@^44.0.0": + version "44.0.0" + resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-44.0.0.tgz#d3480fe2c99f9e895dae4ebba58b74ed72d03e26" + integrity sha512-d+gpdKOAhqaD5RmcMzGgKzNtvE1w+GCqpFQNSXLliYlXjj+Tv0eL8EPeAdPtvke0vowpPFwd5McXLA90dgY6Jg== -"@expo/config@5.0.9": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@expo/config/-/config-5.0.9.tgz#5221af5394599d861515ef8513731f21fbb322db" - integrity sha512-eZj+cf03wkQQdHSpYvrmiqAsn2dJV10uhHIwXyeFBaFvhds0NgThOldJZfOppQ4QUaGobB/vaJ7UqUa3B0PCMw== +"@expo/config@6.0.6": + version "6.0.6" + resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.6.tgz#64b49b93f07cb046f5a8538a1793bef9070d8d52" + integrity sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w== dependencies: "@babel/code-frame" "~7.10.4" - "@expo/config-plugins" "3.1.0" - "@expo/config-types" "^42.0.0" + "@expo/config-plugins" "4.0.6" + "@expo/config-types" "^43.0.1" "@expo/json-file" "8.2.33" getenv "^1.0.0" glob "7.1.6" @@ -2056,73 +2578,75 @@ slugify "^1.3.4" sucrase "^3.20.0" -"@expo/config@^4.0.0": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@expo/config/-/config-4.0.4.tgz#48686c2b83bc00db469e01592e396e973e91e11d" - integrity sha512-O3xRlwMCidOgk1WHIy6eOjh2yp0h/kgBDRNKqPe21+YDiOufyTGGNvbWgHwoax8goa1iMg443WQO7GhvaH286g== - dependencies: - "@babel/core" "7.9.0" - "@babel/plugin-proposal-class-properties" "~7.12.13" - "@babel/preset-env" "~7.12.13" - "@babel/preset-typescript" "~7.12.13" - "@expo/config-plugins" "2.0.4" - "@expo/config-types" "^41.0.0" - "@expo/json-file" "8.2.30" - fs-extra "9.0.0" +"@expo/config@^6.0.6": + version "6.0.19" + resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.19.tgz#26a7f7ffb6419cc6e6d4205b3c7764aa9ecb551a" + integrity sha512-UkLnnKnt4zP382K7s0UDnUNY646Gdw8PoDWnxaIGAL515R9IX8oWef7+7hX/dZMi27d/WLJPmWNRYsEL8Q/3rw== + dependencies: + "@babel/code-frame" "~7.10.4" + "@expo/config-plugins" "4.1.0" + "@expo/config-types" "^44.0.0" + "@expo/json-file" "8.2.34" getenv "^1.0.0" glob "7.1.6" require-from-string "^2.0.2" resolve-from "^5.0.0" semver "7.3.2" slugify "^1.3.4" + sucrase "^3.20.0" -"@expo/json-file@8.2.30": - version "8.2.30" - resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.30.tgz#bd855b6416b5c3af7e55b43f6761c1e7d2b755b0" - integrity sha512-vrgGyPEXBoFI5NY70IegusCSoSVIFV3T3ry4tjJg1MFQKTUlR7E0r+8g8XR6qC705rc2PawaZQjqXMAVtV6s2A== +"@expo/json-file@8.2.33": + version "8.2.33" + resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.33.tgz#78f56f33a2cfb807b23c81e00237a33159aa1f32" + integrity sha512-CDnhjdirUs6OdN5hOSTJ2y3i9EiJMk7Z5iDljC5xyCHCrUex7oyI8vbRsZEojAahxZccgL/PrO+CjakiFFWurg== dependencies: "@babel/code-frame" "~7.10.4" - fs-extra "9.0.0" json5 "^1.0.1" write-file-atomic "^2.3.0" -"@expo/json-file@8.2.33": - version "8.2.33" - resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.33.tgz#78f56f33a2cfb807b23c81e00237a33159aa1f32" - integrity sha512-CDnhjdirUs6OdN5hOSTJ2y3i9EiJMk7Z5iDljC5xyCHCrUex7oyI8vbRsZEojAahxZccgL/PrO+CjakiFFWurg== +"@expo/json-file@8.2.34": + version "8.2.34" + resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.34.tgz#2f24e90a677195f7a81e167115460eb2902c3130" + integrity sha512-ZxtBodAZGxdLtgKzmsC+8ViUxt1mhFW642Clu2OuG3f6PAyAFsU/SqEGag9wKFaD3x3Wt8VhL+3y5fMJmUFgPw== dependencies: "@babel/code-frame" "~7.10.4" json5 "^1.0.1" write-file-atomic "^2.3.0" -"@expo/metro-config@^0.1.70": - version "0.1.84" - resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.1.84.tgz#ddcc7b4f1087c29f86bc9d916933d29bacd2c726" - integrity sha512-xWSfM0+AxcKw0H8mc1RuKs4Yy4JT4SJfn4yDnGLAlKkHlEC+D2seZvb/Tdd173e/LANmcarNd+OcDYu03AmVWA== +"@expo/metro-config@~0.2.6": + version "0.2.8" + resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.2.8.tgz#c0fd56723e2fb9bb352e788e8f8fe0e218aaf663" + integrity sha512-8g0QrHfvSgTLzryuE4JXRwFwBZ7EmqE55zR39Yy7jEVR3epYL0JbBK0/IDFmf6auwsDFtMjAZjFL4WEhRN5bEQ== dependencies: - "@expo/config" "5.0.9" + "@expo/config" "6.0.6" chalk "^4.1.0" + debug "^4.3.2" getenv "^1.0.0" - metro-react-native-babel-transformer "^0.59.0" + sucrase "^3.20.0" -"@expo/plist@0.0.13": - version "0.0.13" - resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.0.13.tgz#700a48d9927aa2b0257c613e13454164e7371a96" - integrity sha512-zGPSq9OrCn7lWvwLLHLpHUUq2E40KptUFXn53xyZXPViI0k9lbApcR9KlonQZ95C+ELsf0BQ3gRficwK92Ivcw== +"@expo/plist@0.0.15": + version "0.0.15" + resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.0.15.tgz#41ef37b7bbe6b81c48bf4a5c359661c766bb9e90" + integrity sha512-LDxiS0KNZAGJu4fIJhbEKczmb+zeftl1NU0LE0tj0mozoMI5HSKdMUchgvnBm35bwBl8ekKkAfJJ0ONxljWQjQ== dependencies: + "@xmldom/xmldom" "~0.7.0" base64-js "^1.2.3" xmlbuilder "^14.0.0" - xmldom "~0.5.0" -"@expo/plist@0.0.14": - version "0.0.14" - resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.0.14.tgz#a756903bd28aabe0a961222df2e7858a39a218c9" - integrity sha512-bb4Ua1M/OdNgS8KiGdSDUjZ/bbPfv3xdPY/lz8Ctp/adlj/QgB8xA7tVPeqSSfJPZqFRwU0qLCnRhpUOnP51VQ== +"@expo/plist@0.0.17": + version "0.0.17" + resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.0.17.tgz#0f6c594e116f45a28f5ed20998dadb5f3429f88b" + integrity sha512-5Ul3d/YOYE6mfum0jCE25XUnkKHZ5vGlU/X2275ZmCtGrpRn1Fl8Nq+jQKSaks3NqTfxdyXROi/TgH8Zxeg2wg== dependencies: "@xmldom/xmldom" "~0.7.0" base64-js "^1.2.3" xmlbuilder "^14.0.0" +"@expo/sdk-runtime-versions@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c" + integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ== + "@expo/vector-icons@^12.0.4": version "12.0.5" resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-12.0.5.tgz#bc508ad05fb7e9a3e008704977cfec6c18aa7728" @@ -2140,6 +2664,55 @@ resolved "https://registry.yarnpkg.com/@flyerhq/react-native-android-uri-path/-/react-native-android-uri-path-2.3.0.tgz#399579172de19a06a9d8374a95d930e0205b37d7" integrity sha512-qqSopL07BuWh3j20AAdc3MqJsvbXjv7MQaf1KusDX6+VU3Kys/bXOoXuHl4nkPbdqK3XB0CxMVu3d5+Q+eLg5g== +"@formatjs/ecma402-abstract@1.11.3": + version "1.11.3" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.3.tgz#f25276dfd4ef3dac90da667c3961d8aa9732e384" + integrity sha512-kP/Buv5vVFMAYLHNvvUzr0lwRTU0u2WTy44Tqwku1X3C3lJ5dKqDCYVqA8wL+Y19Bq+MwHgxqd5FZJRCIsLRyQ== + dependencies: + "@formatjs/intl-localematcher" "0.2.24" + tslib "^2.1.0" + +"@formatjs/intl-getcanonicallocales@1.9.1", "@formatjs/intl-getcanonicallocales@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-1.9.1.tgz#f61dd8f05368a639f949187eb2a281897256d5fb" + integrity sha512-cqxVpDzfBYJRA/8bBPvlxHRlLE0ngi0eP8Evek7YXcC3AvKHJoeaZZeFYOvWxOKIOZVdWH87Btvc5h0TvDTofA== + dependencies: + tslib "^2.1.0" + +"@formatjs/intl-locale@^2.4.46": + version "2.4.46" + resolved "https://registry.yarnpkg.com/@formatjs/intl-locale/-/intl-locale-2.4.46.tgz#40c4d3aa1dd89b6a0c33df06a09555542ff15ce1" + integrity sha512-6UAGbAf2TxC4lzznEd0tDs3R1h8llUJfWsEs4n5Uf3NRhq1auaQFCgE48SqpDkkTFnX2o8gC3r8uOkOxp/cu+g== + dependencies: + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/intl-getcanonicallocales" "1.9.1" + tslib "^2.1.0" + +"@formatjs/intl-localematcher@0.2.24": + version "0.2.24" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.24.tgz#b49fd753c0f54421f26a3c1d0e9cf98a3966e78f" + integrity sha512-K/HRGo6EMnCbhpth/y3u4rW4aXkmQNqRe1L2G+Y5jNr3v0gYhvaucV8WixNju/INAMbPBlbsRBRo/nfjnoOnxQ== + dependencies: + tslib "^2.1.0" + +"@formatjs/intl-numberformat@^7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-numberformat/-/intl-numberformat-7.4.2.tgz#8033ad9d32a90393e59314f2aee5738de21aa7b3" + integrity sha512-k0eN5cRf3pvnY/Y6GBYB2RFyZ4X5GQEw5IsUN17kg278a/0ewpVgtK8IKX97zsuz2gCSLNZ1x5vzxGFVm/e+jA== + dependencies: + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/intl-localematcher" "0.2.24" + tslib "^2.1.0" + +"@formatjs/intl-pluralrules@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-4.3.2.tgz#8ac4b8592bc231fd2adcccc6e3012d17d007c638" + integrity sha512-ptV6vYF9asaDWbU3WvfXCgLYRZLGbl3LuiY1hFRr/BJtVXSLP+ocgLs2k6oEME401p3ucW+ZVMeqxftRTH8BFA== + dependencies: + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/intl-localematcher" "0.2.24" + tslib "^2.1.0" + "@gorhom/bottom-sheet@^4.1.5": version "4.1.5" resolved "https://registry.yarnpkg.com/@gorhom/bottom-sheet/-/bottom-sheet-4.1.5.tgz#35341d45799de28082c380db6639537b04fa0b26" @@ -2554,6 +3127,17 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + "@jimp/bmp@^0.16.1": version "0.16.1" resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.16.1.tgz#6e2da655b2ba22e721df0795423f34e92ef13768" @@ -2863,17 +3447,17 @@ resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== -"@motify/components@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@motify/components/-/components-0.16.1.tgz#252601820910275f82df5ab277e8b710c77c4274" - integrity sha512-UvHpVP72TNz7kSa1cWUMFKpSqs1xPaOrAj7Xbpn5rA43ZyfY3kFg7jDZ/sMCcMJRgTRTCOna2HKYGKv7Y2eHFg== +"@motify/components@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@motify/components/-/components-0.17.1.tgz#96888fb0d5c6d41f484d98c9364764e511d83086" + integrity sha512-nUOEuNDmnjRVFD202goOilPYtjrZGr26/VCIMnPE5Jpfs9ds/4ezIhQ75zBXd3BuCcgfMRsKrnw01/O0rdWYsg== dependencies: - "@motify/core" "^0.16.1" + "@motify/core" "^0.17.1" -"@motify/core@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@motify/core/-/core-0.16.1.tgz#f99b2152017f2b817868f6a92d0a6fef42e2b95d" - integrity sha512-tmh4bSyZbMHCMKoQrSngwx5VoZgo4nb5IwZNkL8l0JZJh//spjA3dVNmDWpXwTNc53RpkTsWHFm5OWGl1kNW/w== +"@motify/core@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@motify/core/-/core-0.17.1.tgz#1d3f0aac54ae30a636f43d069c02c8040ca67efc" + integrity sha512-czFnaE4o0gCNS7F3u0CdSxzx72b6Yzw2LGD/e/J5DPM7KPL70qyzj5cZ8Rq1sKnUZMfgvCfxyGql21FbGdyhew== dependencies: framer-motion "^3.9.1" @@ -2882,6 +3466,14 @@ resolved "https://registry.yarnpkg.com/@msantang78/react-native-pager/-/react-native-pager-0.2.4.tgz#df8f53349786557061ff468593910f55f9d2f9ec" integrity sha512-CCLQRMjckRghyBUuDEH3uK8PjNfBAr7ktsZ0sxzTbAWggemZ5mbNdcothzfGn0vUxNEbGu0OOlugEVB+mlq3tg== +"@msantang78/react-native-styled-toast@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@msantang78/react-native-styled-toast/-/react-native-styled-toast-1.3.2.tgz#98165ba40dd13780c652317b98c44fcaf1b2b8af" + integrity sha512-R+VLyVBIABZTs5cOgR8jY46IYGu5FA0+vzdppVMO/pFgeqmoktwYWEb8EyGc4AQOm1XAB/Z3+upCFR7wOV/g0A== + dependencies: + "@types/styled-components" "^5.1.1" + react-native-status-bar-height "^2.5.0" + "@nodelib/fs.scandir@2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" @@ -3131,6 +3723,11 @@ resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-1.0.0.tgz#c52a99d4fe01049102d47dc45d40cbde4f720ab6" integrity sha512-xUNRvNmCl3UGCPbbHvfyFMnpvLPoOjDCcp5bT9m2k+TF/ZBklEQwhPZlkrxRx2NhgFh1X3a5uL7mJ7ZR+8G7Qg== +"@react-native/normalize-color@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.0.0.tgz#da955909432474a9a0fe1cbffc66576a0447f567" + integrity sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw== + "@react-native/polyfills@2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@react-native/polyfills/-/polyfills-2.0.0.tgz#4c40b74655c83982c8cf47530ee7dc13d957b6aa" @@ -3352,6 +3949,11 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + "@sinonjs/commons@^1.7.0": version "1.8.2" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" @@ -3378,6 +3980,96 @@ resolved "https://registry.yarnpkg.com/@snowplow/react-native-tracker/-/react-native-tracker-1.0.0.tgz#5e024f4a348b91c0468a4be720be0998457d861c" integrity sha512-bbrNfcyxMx1sbBa7uWXED7/a6/Ei9wH33yappS9XYqVQkuCUw0+wDR8YRep/aAHKRJ9xMGZovoiPH5h3/AWyXA== +"@styled-system/background@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/background/-/background-5.1.2.tgz#75c63d06b497ab372b70186c0bf608d62847a2ba" + integrity sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A== + dependencies: + "@styled-system/core" "^5.1.2" + +"@styled-system/border@^5.1.5": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@styled-system/border/-/border-5.1.5.tgz#0493d4332d2b59b74bb0d57d08c73eb555761ba6" + integrity sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A== + dependencies: + "@styled-system/core" "^5.1.2" + +"@styled-system/color@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/color/-/color-5.1.2.tgz#b8d6b4af481faabe4abca1a60f8daa4ccc2d9f43" + integrity sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA== + dependencies: + "@styled-system/core" "^5.1.2" + +"@styled-system/core@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/core/-/core-5.1.2.tgz#b8b7b86455d5a0514f071c4fa8e434b987f6a772" + integrity sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw== + dependencies: + object-assign "^4.1.1" + +"@styled-system/css@^5.1.5": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@styled-system/css/-/css-5.1.5.tgz#0460d5f3ff962fa649ea128ef58d9584f403bbbc" + integrity sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A== + +"@styled-system/flexbox@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/flexbox/-/flexbox-5.1.2.tgz#077090f43f61c3852df63da24e4108087a8beecf" + integrity sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ== + dependencies: + "@styled-system/core" "^5.1.2" + +"@styled-system/grid@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/grid/-/grid-5.1.2.tgz#7165049877732900b99cd00759679fbe45c6c573" + integrity sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg== + dependencies: + "@styled-system/core" "^5.1.2" + +"@styled-system/layout@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/layout/-/layout-5.1.2.tgz#12d73e79887e10062f4dbbbc2067462eace42339" + integrity sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw== + dependencies: + "@styled-system/core" "^5.1.2" + +"@styled-system/position@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/position/-/position-5.1.2.tgz#56961266566836f57a24d8e8e33ce0c1adb59dd3" + integrity sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A== + dependencies: + "@styled-system/core" "^5.1.2" + +"@styled-system/shadow@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/shadow/-/shadow-5.1.2.tgz#beddab28d7de03cd0177a87ac4ed3b3b6d9831fd" + integrity sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg== + dependencies: + "@styled-system/core" "^5.1.2" + +"@styled-system/space@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/space/-/space-5.1.2.tgz#38925d2fa29a41c0eb20e65b7c3efb6e8efce953" + integrity sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA== + dependencies: + "@styled-system/core" "^5.1.2" + +"@styled-system/typography@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/typography/-/typography-5.1.2.tgz#65fb791c67d50cd2900d234583eaacdca8c134f7" + integrity sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg== + dependencies: + "@styled-system/core" "^5.1.2" + +"@styled-system/variant@^5.1.5": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@styled-system/variant/-/variant-5.1.5.tgz#8446d8aad06af3a4c723d717841df2dbe4ddeafd" + integrity sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw== + dependencies: + "@styled-system/core" "^5.1.2" + "@styled-system/css" "^5.1.5" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -3385,6 +4077,13 @@ dependencies: defer-to-connect "^1.0.1" +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + "@testing-library/jest-native@^3.3.0": version "3.4.3" resolved "https://registry.yarnpkg.com/@testing-library/jest-native/-/jest-native-3.4.3.tgz#fa6f902a442e2693f27563568a71e61bf11f8a53" @@ -3404,6 +4103,16 @@ dependencies: pretty-format "^26.0.1" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@types/aria-query@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.0.tgz#df2d64b5cc73cca0d75e2a7793d6b5c199c2f7b2" + integrity sha512-P+dkdFu0n08PDIvw+9nT9ByQnd+Udc8DaWPb9HKfaPwCvWvQpC5XaMRx2xLWECm9x1VKNps6vEAlirjA6+uNrQ== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.0", "@types/babel__core@^7.1.7": version "7.1.14" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" @@ -3444,6 +4153,16 @@ dependencies: "@types/node" "*" +"@types/cacheable-request@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" + integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + "@types/cheerio@^0.22.22": version "0.22.28" resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.28.tgz#90808aabb44fec40fa2950f4c72351e3e4eb065b" @@ -3451,11 +4170,33 @@ dependencies: "@types/node" "*" +"@types/diff@^5.0.0": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.2.tgz#dd565e0086ccf8bc6522c6ebafd8a3125c91c12b" + integrity sha512-uw8eYMIReOwstQ0QKF0sICefSy8cNO/v7gOTiIy9SbwuHyEecJUm7qlgueOO5S1udZ5I/irVydHVwMchgzbKTg== + +"@types/easy-table@^0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/easy-table/-/easy-table-0.0.33.tgz#b1f7ec29014ec24906b4f28d8368e2e99b399313" + integrity sha512-/vvqcJPmZUfQwCgemL0/34G7bIQnCuvgls379ygRlcC1FqNqk3n+VZ15dAO51yl6JNDoWd8vsk+kT8zfZ1VZSw== + +"@types/ejs@^3.0.5": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.0.tgz#ab8109208106b5e764e5a6c92b2ba1c625b73020" + integrity sha512-DCg+Ka+uDQ31lJ/UtEXVlaeV3d6t81gifaVWKJy4MYVVgvJttyX/viREy+If7fz+tK/gVxTGMtyrFPnm4gjrVA== + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== +"@types/fs-extra@^9.0.4": + version "9.0.13" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" + integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== + dependencies: + "@types/node" "*" + "@types/graceful-fs@^4.1.2": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" @@ -3468,7 +4209,7 @@ resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.39.tgz#4be64bbacf3813c79c0dab895c6b0fdc7d5e513f" integrity sha512-lYR2Y/tV2ujpk/WyUc7S0VLI0a9hrtVIN9EwnrNo5oSEJI2cK2/XrgwOQmXLL3eTulOESvh9qP6si9+DWM9cOA== -"@types/hoist-non-react-statics@^3.3.1": +"@types/hoist-non-react-statics@*", "@types/hoist-non-react-statics@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== @@ -3476,6 +4217,19 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/inquirer@^8.1.2": + version "8.2.1" + resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-8.2.1.tgz#28a139be3105a1175e205537e8ac10830e38dbf4" + integrity sha512-wKW3SKIUMmltbykg4I5JzCVzUhkuD9trD6efAmYgN2MrSntY0SMRQzEnD3mkyJ/rv9NLbTC7g3hKKE86YwEDLw== + dependencies: + "@types/through" "*" + rxjs "^7.2.0" + "@types/invariant@^2.2.35": version "2.2.35" resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.35.tgz#cd3ebf581a6557452735688d8daba6cf0bd5a3be" @@ -3508,18 +4262,62 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^24.0.24": - version "24.9.1" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" - integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q== +"@types/jasmine@3.10.3": + version "3.10.3" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.10.3.tgz#a89798b3d5a8bd23ca56e855a9aee3e5a93bdaaa" + integrity sha512-SWyMrjgdAUHNQmutvDcKablrJhkDLy4wunTme8oYLjKp41GnHGxMRXr2MQMvy/qy8H3LdzwQk9gH4hZ6T++H8g== + +"@types/jest@^26.0.24": + version "26.0.24" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" + integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== dependencies: - jest-diff "^24.3.0" + jest-diff "^26.0.0" + pretty-format "^26.0.0" + +"@types/json-buffer@~3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/json-buffer/-/json-buffer-3.0.0.tgz#85c1ff0f0948fc159810d4b5be35bf8c20875f64" + integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ== "@types/json-schema@^7.0.3": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/keyv@*": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/lodash.flattendeep@^4.4.6": + version "4.4.7" + resolved "https://registry.yarnpkg.com/@types/lodash.flattendeep/-/lodash.flattendeep-4.4.7.tgz#0ce3dccbe006826d58e9824b27df4b00ed3e90e6" + integrity sha512-1h6GW/AeZw/Wej6uxrqgmdTDZX1yFS39lRsXYkg+3kWvOWWrlGCI6H7lXxlUHOzxDT4QeYGmgPpQ3BX9XevzOg== + dependencies: + "@types/lodash" "*" + +"@types/lodash.pickby@^4.6.6": + version "4.6.7" + resolved "https://registry.yarnpkg.com/@types/lodash.pickby/-/lodash.pickby-4.6.7.tgz#fd089a5a7f8cbe7294ae5c90ea5ecd9f4cae4d2c" + integrity sha512-4ebXRusuLflfscbD0PUX4eVknDHD9Yf+uMtBIvA/hrnTqeAzbuHuDjvnYriLjUrI9YrhCPVKUf4wkRSXJQ6gig== + dependencies: + "@types/lodash" "*" + +"@types/lodash.union@^4.6.6": + version "4.6.7" + resolved "https://registry.yarnpkg.com/@types/lodash.union/-/lodash.union-4.6.7.tgz#ceace5ed9f3610652ba4a72e0e0afb2a0eec7a4d" + integrity sha512-6HXM6tsnHJzKgJE0gA/LhTGf/7AbjUk759WZ1MziVm+OBNAATHhdgj+a3KVE8g76GCLAnN4ZEQQG1EGgtBIABA== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.182" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" + integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== + "@types/minimatch@^3.0.3": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" @@ -3535,11 +4333,21 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.6.tgz#7b73cce37352936e628c5ba40326193443cfba25" integrity sha512-sRVq8d+ApGslmkE9e3i+D3gFGk7aZHAT+G4cIpIEdLJYPsWiSPwcAnJEjddLQQDqV3Ra2jOclX/Sv6YrvGYiWA== +"@types/node@^17.0.4": + version "17.0.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.25.tgz#527051f3c2f77aa52e5dc74e45a3da5fb2301448" + integrity sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w== + "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/object-inspect@^1.8.0": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@types/object-inspect/-/object-inspect-1.8.1.tgz#7c08197ad05cc0e513f529b1f3919cc99f720e1f" + integrity sha512-0JTdf3CGV0oWzE6Wa40Ayv2e2GhpP3pEJMcrlM74vBSJPuuNkVwfDnl0SZxyFCXETcB4oKA/MpTVfuYSMOelBg== + "@types/pbkdf2@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" @@ -3608,6 +4416,20 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/recursive-readdir@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@types/recursive-readdir/-/recursive-readdir-2.2.1.tgz#330f5ec0b73e8aeaf267a6e056884e393f3543a3" + integrity sha512-Xd+Ptc4/F2ueInqy5yK2FI5FxtwwbX2+VZpcg+9oYsFJVen8qQKGapCr+Bi5wQtHU1cTXT8s+07lo/nKPgu8Gg== + dependencies: + "@types/node" "*" + +"@types/responselike@*", "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + "@types/scheduler@*": version "0.16.1" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" @@ -3630,6 +4452,49 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== +"@types/stream-buffers@^3.0.3": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/stream-buffers/-/stream-buffers-3.0.4.tgz#bf128182da7bc62722ca0ddf5458a9c65f76e648" + integrity sha512-qU/K1tb2yUdhXkLIATzsIPwbtX6BpZk0l3dPW6xqWyhfzzM1ECaQ/8faEnu3CNraLiQ9LHyQQPBGp7N9Fbs25w== + dependencies: + "@types/node" "*" + +"@types/styled-components@^5.1.1": + version "5.1.21" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.21.tgz#39f6bdc4103254d899531ef099dae5619b039cdb" + integrity sha512-lQzA0T6CaLXoeiOkSe2US2JfFgJV2/yJ8W1BaJubQQh2wdq7H+qScQQfbjURyLkgI1Ig+S/jRHCrWikfMHC6zA== + dependencies: + "@types/hoist-non-react-statics" "*" + "@types/react" "*" + csstype "^3.0.2" + +"@types/supports-color@^8.1.0": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@types/supports-color/-/supports-color-8.1.1.tgz#1b44b1b096479273adf7f93c75fc4ecc40a61ee4" + integrity sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw== + +"@types/through@*": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895" + integrity sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg== + dependencies: + "@types/node" "*" + +"@types/tmp@^0.2.0": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.3.tgz#908bfb113419fd6a42273674c00994d40902c165" + integrity sha512-dDZH/tXzwjutnuk4UacGgFRwV+JSLaXL1ikvidfJprkb7L9Nx1njcRHHmi3Dsvt7pgqqTEeucQuOrWHPFgzVHA== + +"@types/ua-parser-js@^0.7.33": + version "0.7.36" + resolved "https://registry.yarnpkg.com/@types/ua-parser-js/-/ua-parser-js-0.7.36.tgz#9bd0b47f26b5a3151be21ba4ce9f5fa457c5f190" + integrity sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ== + +"@types/which@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/which/-/which-1.3.2.tgz#9c246fc0c93ded311c8512df2891fb41f6227fdf" + integrity sha512-8oDqyLC7eD4HM307boe2QWKyuzdzWBj56xI/imSl2cpL+U3tCMaTAkMJ4ee5JBZ/FsOJlvRGeIShiZDAl1qERA== + "@types/yargs-parser@*": version "20.2.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" @@ -3656,6 +4521,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@^1.5.0": version "1.13.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f" @@ -3764,21 +4636,6 @@ "@typescript-eslint/types" "4.22.1" eslint-visitor-keys "^2.0.0" -"@unimodules/core@~7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@unimodules/core/-/core-7.1.2.tgz#5181b99586476a5d87afd0958f26a04714c47fa1" - integrity sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg== - dependencies: - compare-versions "^3.4.0" - -"@unimodules/react-native-adapter@~6.3.7": - version "6.3.9" - resolved "https://registry.yarnpkg.com/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz#2f4bef6b7532dce5bf9f236e69f96403d0243c30" - integrity sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw== - dependencies: - expo-modules-autolinking "^0.0.3" - invariant "^2.2.4" - "@walletconnect/browser-utils@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.4.0.tgz#2998d0433086a0a4376d6c883b708a54ea18a3de" @@ -3883,6 +4740,169 @@ "@walletconnect/utils" "^1.4.0" web3-provider-engine "16.0.1" +"@wdio/browserstack-service@^7.19.5": + version "7.19.5" + resolved "https://registry.yarnpkg.com/@wdio/browserstack-service/-/browserstack-service-7.19.5.tgz#83d8ccb481ab1c6f2cf6227946b50bb8ff0ac830" + integrity sha512-T/y5+OC1w3doN8csJj+109B0eH0Zijs3Yj6vItuktW6vl8/CSlh8ZE4ehlB3PWypnrX6Y4YImGfo2nISg3Z0iQ== + dependencies: + "@types/node" "^17.0.4" + "@wdio/logger" "7.19.0" + "@wdio/types" "7.19.5" + browserstack-local "^1.4.5" + got "^11.0.2" + webdriverio "7.19.5" + +"@wdio/cli@^7.19.6": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@wdio/cli/-/cli-7.19.6.tgz#0b9054fba7f4161185ef80f20f259c9a45c3493a" + integrity sha512-lcHos0zyIQumdt+uzCbzVwJuzMyCI/Tv7nt6CcaJtIkpuut5WZ9H7V6IM3j1UYV0SEqz58KU+VPB82qazEP+YQ== + dependencies: + "@types/ejs" "^3.0.5" + "@types/fs-extra" "^9.0.4" + "@types/inquirer" "^8.1.2" + "@types/lodash.flattendeep" "^4.4.6" + "@types/lodash.pickby" "^4.6.6" + "@types/lodash.union" "^4.6.6" + "@types/node" "^17.0.4" + "@types/recursive-readdir" "^2.2.0" + "@wdio/config" "7.19.5" + "@wdio/logger" "7.19.0" + "@wdio/types" "7.19.5" + "@wdio/utils" "7.19.5" + async-exit-hook "^2.0.1" + chalk "^4.0.0" + chokidar "^3.0.0" + cli-spinners "^2.1.0" + ejs "^3.0.1" + fs-extra "^10.0.0" + inquirer "8.2.2" + lodash.flattendeep "^4.4.0" + lodash.pickby "^4.6.0" + lodash.union "^4.6.0" + mkdirp "^1.0.4" + recursive-readdir "^2.2.2" + webdriverio "7.19.5" + yargs "^17.0.0" + yarn-install "^1.0.0" + +"@wdio/config@7.19.5": + version "7.19.5" + resolved "https://registry.yarnpkg.com/@wdio/config/-/config-7.19.5.tgz#aa8158d648e1ffb28a7e53474d5ce171066e82f7" + integrity sha512-GyG0SSUjw9RyDgEwculgwiWyQ0eEeFAgaKTAa4RHC6ZgHHTgfyxzkWqBmNLzHfiB6GSR2DyZDcDsPT7ZAHkiEg== + dependencies: + "@wdio/logger" "7.19.0" + "@wdio/types" "7.19.5" + deepmerge "^4.0.0" + glob "^7.1.2" + +"@wdio/jasmine-framework@^7.19.5": + version "7.19.5" + resolved "https://registry.yarnpkg.com/@wdio/jasmine-framework/-/jasmine-framework-7.19.5.tgz#6ee627987dfa103b76049dbac39006706a4e0e87" + integrity sha512-rv6k9PshHbKhvzQRAfjtrUMk3LSGguAJbrCnab3jWuN5shAihWXIh1OAtVhXQuEidrLEpwpWtqU80SMDz0GqNA== + dependencies: + "@types/jasmine" "3.10.3" + "@types/node" "^17.0.4" + "@wdio/logger" "7.19.0" + "@wdio/types" "7.19.5" + "@wdio/utils" "7.19.5" + expect-webdriverio "^3.0.0" + jasmine "3.10.0" + +"@wdio/local-runner@^7.19.5": + version "7.19.5" + resolved "https://registry.yarnpkg.com/@wdio/local-runner/-/local-runner-7.19.5.tgz#1a2a519e0e8eb7fd5197bda7651ffbc813a2c1e0" + integrity sha512-VZr726za6JHY+14SqEEq/VolKIsC2QgMH9BhX3sw0yWUsRxWy4M7STl2fiQWgJbW0bc2Z74TRLrx7TYfncIPpw== + dependencies: + "@types/stream-buffers" "^3.0.3" + "@wdio/logger" "7.19.0" + "@wdio/repl" "7.19.5" + "@wdio/runner" "7.19.5" + "@wdio/types" "7.19.5" + async-exit-hook "^2.0.1" + split2 "^4.0.0" + stream-buffers "^3.0.2" + +"@wdio/logger@7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-7.19.0.tgz#23697a4b4aaea56c3bd477a0393af2a5c175fc85" + integrity sha512-xR7SN/kGei1QJD1aagzxs3KMuzNxdT/7LYYx+lt6BII49+fqL/SO+5X0FDCZD0Ds93AuQvvz9eGyzrBI2FFXmQ== + dependencies: + chalk "^4.0.0" + loglevel "^1.6.0" + loglevel-plugin-prefix "^0.8.4" + strip-ansi "^6.0.0" + +"@wdio/protocols@7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@wdio/protocols/-/protocols-7.19.0.tgz#cd753752c64b9c1dd7ace05398c1d11c46af41ab" + integrity sha512-ji74rQag6v+INSNd0J8eAh2rpH5vOXgeiP5Qr32K6PWU6HzYWuAFH2x4srXsH0JawHCdTK2OQAOYrLmMb44hug== + +"@wdio/repl@7.19.5": + version "7.19.5" + resolved "https://registry.yarnpkg.com/@wdio/repl/-/repl-7.19.5.tgz#e99d1e24c52ac34b7434d21c94419c46eabcfbf8" + integrity sha512-Rej9SrH2DIPQ2342o4ixF48fJYsaeU4rtz+R7wYv6J1RZaNQvINdO21HoODfJ7DIDltVWzvLhCOe4CgzGubRGA== + dependencies: + "@wdio/utils" "7.19.5" + +"@wdio/reporter@7.19.5": + version "7.19.5" + resolved "https://registry.yarnpkg.com/@wdio/reporter/-/reporter-7.19.5.tgz#2099bd46df6ed4af753d9f56f4bb6c8f66131c54" + integrity sha512-1h2IM+xF1Oc483HZElhOVgKrgSxI8erMQJ8fTgPo17aeWQFU2rl5HsdY49+LRU5YEmSHNm3HbNn8fs1nkpSnIA== + dependencies: + "@types/diff" "^5.0.0" + "@types/node" "^17.0.4" + "@types/object-inspect" "^1.8.0" + "@types/supports-color" "^8.1.0" + "@types/tmp" "^0.2.0" + "@wdio/types" "7.19.5" + diff "^5.0.0" + fs-extra "^10.0.0" + object-inspect "^1.10.3" + supports-color "8.1.1" + +"@wdio/runner@7.19.5": + version "7.19.5" + resolved "https://registry.yarnpkg.com/@wdio/runner/-/runner-7.19.5.tgz#c9ca9574264143070c27ff73c02739be7bcb19c8" + integrity sha512-9eKoTqT/Ht8RPlVfqBcDTvhluP/nwyHOvqw0+zHUoJHTtLFCsZNcAXnBgAuozIrHFgyX5e4LMQLvY0voWDmqCQ== + dependencies: + "@wdio/config" "7.19.5" + "@wdio/logger" "7.19.0" + "@wdio/types" "7.19.5" + "@wdio/utils" "7.19.5" + deepmerge "^4.0.0" + gaze "^1.1.2" + webdriver "7.19.5" + webdriverio "7.19.5" + +"@wdio/spec-reporter@^7.19.5": + version "7.19.5" + resolved "https://registry.yarnpkg.com/@wdio/spec-reporter/-/spec-reporter-7.19.5.tgz#55d5c1fc99c7b3b2595889abdb332909e1062c65" + integrity sha512-ovkjhOowpSJKblEIC5Si+pOmr0/fUqo+bNkxZwYDNSzIwPyxJnED17WSNYw+JAzSp2PgfNwjELoQfMNCDPQvAQ== + dependencies: + "@types/easy-table" "^0.0.33" + "@wdio/reporter" "7.19.5" + "@wdio/types" "7.19.5" + chalk "^4.0.0" + easy-table "^1.1.1" + pretty-ms "^7.0.0" + +"@wdio/types@7.19.5": + version "7.19.5" + resolved "https://registry.yarnpkg.com/@wdio/types/-/types-7.19.5.tgz#e05790f61dfab54ee6683ac799cb5f96615d1d0f" + integrity sha512-S1lC0pmtEO7NVH/2nM1c7NHbkgxLZH3VVG/z6ym3Bbxdtcqi2LMsEvvawMAU/fmhyiIkMsGZCO8vxG9cRw4z4A== + dependencies: + "@types/node" "^17.0.4" + got "^11.8.1" + +"@wdio/utils@7.19.5": + version "7.19.5" + resolved "https://registry.yarnpkg.com/@wdio/utils/-/utils-7.19.5.tgz#9c2d17e1ae3d21824409806f80faec1d7c78baff" + integrity sha512-UvZK8PvY50aUEg5CYSDkkT2NsDA0+Eo7QWjreA3L5ff50jaFrYnpVOyfX4PjWhErH8gZtYSwep+DSgldCUInGQ== + dependencies: + "@wdio/logger" "7.19.0" + "@wdio/types" "7.19.5" + p-iteration "^1.1.8" + "@welldone-software/why-did-you-render@^6.1.1": version "6.1.1" resolved "https://registry.yarnpkg.com/@welldone-software/why-did-you-render/-/why-did-you-render-6.1.1.tgz#3dcf66620fcafbf79e5260bd6ace5e51254055ac" @@ -3962,6 +4982,11 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== +acorn-walk@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" @@ -3972,6 +4997,11 @@ acorn@^8.0.5: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== +acorn@^8.7.0: + version "8.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" + integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== + add@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" @@ -3987,7 +5017,12 @@ after@0.8.2: resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= -agent-base@6: +agent-base@5: + version "5.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" + integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== + +agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -4070,6 +5105,16 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -4115,11 +5160,57 @@ anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +appcenter-file-upload-client@0.0.24: + version "0.0.24" + resolved "https://registry.yarnpkg.com/appcenter-file-upload-client/-/appcenter-file-upload-client-0.0.24.tgz#ba1fb3c0f0073d56168a1853f5e9e9cf38a5114c" + integrity sha512-DqeXWXs68YYXdq7ieBfJ/lOmGvbFuzLrpe1SW5an2TDwkr1QfFfEpz5SHgwJirWfq/dXtGFbk2oTcsLyLFssQQ== + dependencies: + detect-node "^2.0.4" + superagent "5.1.0" + url-parse "^1.4.7" + appdirsjs@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/appdirsjs/-/appdirsjs-1.2.4.tgz#3ab582acc9fdfaaa0c1f81b3a25422ad4d95f9d4" integrity sha512-WO5StDORR6JF/xYnXk/Fm0yu+iULaV5ULKuUw0Tu+jbgiTlSquaWBCgbpnsHLMXldf+fM3Gxn5p7vjond7He6w== +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6" + integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.3" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.0.0" + tar-stream "^2.2.0" + zip-stream "^4.1.0" + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -4132,6 +5223,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +aria-query@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" + integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -4277,6 +5373,13 @@ ast-types@0.14.2: dependencies: tslib "^2.0.1" +ast-types@^0.13.2: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -4289,6 +5392,11 @@ async-eventemitter@^0.2.2: dependencies: async "^2.4.0" +async-exit-hook@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" + integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== + async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" @@ -4313,6 +5421,11 @@ async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0: dependencies: lodash "^4.17.14" +async@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" + integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -4450,17 +5563,6 @@ babel-plugin-jest-hoist@^26.6.2: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-module-resolver@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" - integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== - dependencies: - find-babel-config "^1.1.0" - glob "^7.1.2" - pkg-up "^2.0.0" - reselect "^3.0.1" - resolve "^1.4.0" - babel-plugin-module-resolver@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2" @@ -4481,6 +5583,15 @@ babel-plugin-polyfill-corejs2@^0.1.4: "@babel/helper-define-polyfill-provider" "^0.1.5" semver "^6.1.1" +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.1" + semver "^6.1.1" + babel-plugin-polyfill-corejs3@^0.1.3: version "0.1.7" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" @@ -4489,6 +5600,14 @@ babel-plugin-polyfill-corejs3@^0.1.3: "@babel/helper-define-polyfill-provider" "^0.1.5" core-js-compat "^3.8.1" +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" + babel-plugin-polyfill-regenerator@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz#0fe06a026fe0faa628ccc8ba3302da0a6ce02f3f" @@ -4496,10 +5615,32 @@ babel-plugin-polyfill-regenerator@^0.1.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.1.5" -babel-plugin-react-native-web@~0.13.6: - version "0.13.18" - resolved "https://registry.yarnpkg.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.13.18.tgz#f0b640412b81acd02d8036b7a935ffb3ab446e4e" - integrity sha512-f8pAxyKqXBNRIh8l4Sqju055BNec+DQlItdtutByYxULU0iJ1F7evIYE3skPKAkTB/xJH17l+n3Z8dVabGIIGg== +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + +babel-plugin-react-native-web@~0.17.1: + version "0.17.7" + resolved "https://registry.yarnpkg.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.7.tgz#1580e27a2e3c6692127535d3880fe1e247ef6414" + integrity sha512-UBLfIsfU3vi//Ab4i0WSWAfm1whLTK9uJoH0RPZ6a67eS/h9JGYjKy7+1RpHxSBviHi9NIMiYfWseTLjyIsE1g== + +"babel-plugin-styled-components@>= 1.12.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.2.tgz#0fac11402dc9db73698b55847ab1dc73f5197c54" + integrity sha512-7eG5NE8rChnNTDxa6LQfynwgHTVOYYaHJbUYSlOhk8QBXIQiMBKq4gyfHBBKPrxUcVBXVJL61ihduCpCQbuNbw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-module-imports" "^7.16.0" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.11" + +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: version "7.0.0-beta.0" @@ -4524,18 +5665,19 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-expo@~8.4.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-8.4.1.tgz#fbe6a2439fe73bb6ec1eff8742310312f8d8c9b2" - integrity sha512-bfNX+GWhBCC8SzOzuF5VI5rKftv+E+Leyq83R9h3S+nTzDEtGSnMsRoPCqGHXDbleJApBVKXGZpxWXR5B91HlQ== +babel-preset-expo@~9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-9.0.2.tgz#018bafbe29c61491d55bf5c1b603534b54a13bf1" + integrity sha512-NKVichCkbmb+ZIJ4hvuxzX3PnvHUKT42NxYIYTsKAfHPUKuaSAawtpsmMThph6pUc0GUYcLvCRql8ZX5A1zYNw== dependencies: - "@babel/plugin-proposal-decorators" "^7.6.0" - "@babel/preset-env" "^7.6.3" - babel-plugin-module-resolver "^3.2.0" - babel-plugin-react-native-web "~0.13.6" - metro-react-native-babel-preset "~0.59.0" + "@babel/plugin-proposal-decorators" "^7.12.9" + "@babel/plugin-transform-react-jsx" "^7.12.17" + "@babel/preset-env" "^7.12.9" + babel-plugin-module-resolver "^4.1.0" + babel-plugin-react-native-web "~0.17.1" + metro-react-native-babel-preset "~0.64.0" -babel-preset-fbjs@^3.3.0, babel-preset-fbjs@^3.4.0: +babel-preset-fbjs@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz#38a14e5a7a3b285a3f3a86552d650dca5cf6111c" integrity sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow== @@ -4653,6 +5795,11 @@ bignumber.js@^9.0.0: resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -4660,6 +5807,15 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + blakejs@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" @@ -4748,6 +5904,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -4764,7 +5927,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -4875,6 +6038,27 @@ browserslist@^4.17.5: node-releases "^2.0.1" picocolors "^1.0.0" +browserslist@^4.19.1: + version "4.20.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" + integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA== + dependencies: + caniuse-lite "^1.0.30001317" + electron-to-chromium "^1.4.84" + escalade "^3.1.1" + node-releases "^2.0.2" + picocolors "^1.0.0" + +browserstack-local@^1.4.5, browserstack-local@^1.4.9: + version "1.4.9" + resolved "https://registry.yarnpkg.com/browserstack-local/-/browserstack-local-1.4.9.tgz#5d3e405d425ee5a3ec5cba853c9a078242d944db" + integrity sha512-V+q8HQwRQFr9nd32xR66ZZ3VDWa3Kct4IMMudhKgcuD7cWrvvFARZOibx71II+Rf7P5nMQpWWxl9z/3p927nbg== + dependencies: + https-proxy-agent "^4.0.0" + is-running "^2.1.0" + ps-tree "=1.2.0" + temp-fs "^0.9.9" + bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -4916,6 +6100,11 @@ buffer-alloc@^1.1.0, buffer-alloc@^1.2.0: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -4963,7 +6152,7 @@ buffer@^4.9.1: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.0.5, buffer@^5.2.0, buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0: +buffer@^5.0.5, buffer@^5.2.0, buffer@^5.2.1, buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -5019,6 +6208,24 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cac@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/cac/-/cac-3.0.4.tgz#6d24ceec372efe5c9b798808bc7f49b47242a4ef" + integrity sha1-bSTO7Dcu/lybeYgIvH9JtHJCpO8= + dependencies: + camelcase-keys "^3.0.0" + chalk "^1.1.3" + indent-string "^3.0.0" + minimist "^1.2.0" + read-pkg-up "^1.0.1" + suffix "^0.1.0" + text-table "^0.2.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -5034,6 +6241,11 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -5047,6 +6259,19 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -5079,11 +6304,24 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-3.0.0.tgz#fc0c6c360363f7377e3793b9a16bccf1070c1ca4" + integrity sha1-/AxsNgNj9zd+N5O5oWvM8QcMHKQ= + dependencies: + camelcase "^3.0.0" + map-obj "^1.0.0" + camelcase@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -5099,6 +6337,11 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== +camelize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= + can-promise@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/can-promise/-/can-promise-0.0.1.tgz#7a7597ad801fb14c8b22341dfec314b6bd6ad8d3" @@ -5116,6 +6359,11 @@ caniuse-lite@^1.0.30001280: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz#3e9debad420419618cfdf52dc9b6572b28a8fff6" integrity sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ== +caniuse-lite@^1.0.30001317: + version "1.0.30001325" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz#2b4ad19b77aa36f61f2eaf72e636d7481d55e606" + integrity sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -5128,6 +6376,17 @@ caseless@^0.12.0, caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -5153,7 +6412,7 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -5166,6 +6425,11 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +charcodes@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" + integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -5211,11 +6475,36 @@ child-process-promise@^2.2.0: node-version "^1.0.0" promise-polyfill "^6.0.1" +chokidar@^3.0.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +chrome-launcher@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.15.0.tgz#5144a57aba0cf2f4cbe61dccefdde024fb3ca7fc" + integrity sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA== + dependencies: + "@types/node" "*" + escape-string-regexp "^4.0.0" + is-wsl "^2.2.0" + lighthouse-logger "^1.0.0" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -5282,16 +6571,33 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + cli-spinners@^2.0.0: version "2.6.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== +cli-spinners@^2.1.0, cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + cli-width@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -5355,6 +6661,18 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +code-push@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/code-push/-/code-push-4.0.5.tgz#e4b308ed7b61d19aaddcd046ac92998d18f1481d" + integrity sha512-YPhPFDySKVFv/ikB2FTNaiiIwU3A1cu5i5WKS3YY9EmmxlUWdt41xr7FLP7RSslA4YaMNIdg6CsKiLiRJLABZQ== + dependencies: + appcenter-file-upload-client "0.0.24" + recursive-fs "^2.1.0" + slash "^3.0.0" + superagent "^6.1.0" + superagent-proxy "^3.0.0" + yazl "^2.5.1" + collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -5418,7 +6736,7 @@ colors@^1.0.3, colors@^1.1.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -5465,7 +6783,7 @@ component-bind@1.0.0: resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= -component-emitter@^1.2.1, component-emitter@~1.3.0: +component-emitter@^1.2.1, component-emitter@^1.3.0, component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -5475,6 +6793,24 @@ component-inherit@0.0.3: resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= +compress-brotli@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/compress-brotli/-/compress-brotli-1.3.6.tgz#64bd6f21f4f3e9841dbac392f4c29218caf5e9d9" + integrity sha512-au99/GqZtUtiCBliqLFbWlhnCxn+XSYjwZ77q6mKN4La4qOXDoLVPZ50iXr0WmAyMxl8yqoq3Yq4OeQNPPkyeQ== + dependencies: + "@types/json-buffer" "~3.0.0" + json-buffer "~3.0.1" + +compress-commons@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" + integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.2" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -5570,12 +6906,25 @@ cookiejar@^2.1.1: resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== +cookiejar@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.8.0, core-js-compat@^3.8.1, core-js-compat@^3.9.0: +core-js-compat@^3.20.2, core-js-compat@^3.21.0: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" + integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== + dependencies: + browserslist "^4.19.1" + semver "7.0.0" + +core-js-compat@^3.8.1: version "3.9.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.9.1.tgz#4e572acfe90aff69d76d8c37759d21a5c59bb455" integrity sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA== @@ -5611,6 +6960,19 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: js-yaml "^3.13.1" parse-json "^4.0.0" +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc32-stream@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" + integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + create-ecdh@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" @@ -5642,6 +7004,13 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +cross-fetch@3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + cross-fetch@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.3.tgz#e8a0b3c54598136e037f8650f8e823ccdfac198e" @@ -5650,13 +7019,6 @@ cross-fetch@^2.1.0: node-fetch "2.1.2" whatwg-fetch "2.0.4" -cross-fetch@^3.0.4: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.2.tgz#ee0c2f18844c4fde36150c2a4ddc068d20c1bc41" - integrity sha512-+JhD65rDNqLbGmB3Gzs3HrEKC0aQnD+XA3SY6RjgkF88jV2q5cTc5+CwxlS3sdmLk98gpPt5CF9XRnPdlxZe6w== - dependencies: - node-fetch "2.6.1" - cross-spawn@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" @@ -5716,6 +7078,11 @@ crypto-js@^3.1.9-1: resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= + css-select@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" @@ -5737,6 +7104,20 @@ css-select@^3.1.2: domutils "^2.4.3" nth-check "^2.0.0" +css-shorthand-properties@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz#1c808e63553c283f289f2dd56fcee8f3337bd935" + integrity sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A== + +css-to-react-native@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" + integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + css-tree@^1.0.0-alpha.39: version "1.1.2" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" @@ -5745,6 +7126,11 @@ css-tree@^1.0.0-alpha.39: mdn-data "2.0.14" source-map "^0.6.1" +css-value@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/css-value/-/css-value-0.0.1.tgz#5efd6c2eea5ea1fd6b6ac57ec0427b18452424ea" + integrity sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo= + css-what@^3.2.1: version "3.4.2" resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" @@ -5792,6 +7178,11 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-uri-to-buffer@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -5806,7 +7197,7 @@ dayjs@^1.8.15: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2" integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -5820,6 +7211,13 @@ debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" +debug@4.3.4, debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debug@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" @@ -5861,6 +7259,13 @@ decompress-response@^3.2.0, decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + dedent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.6.0.tgz#0e6da8f0ce52838ef5cec5c8f9396b0c1b64a3cb" @@ -5881,7 +7286,7 @@ deepmerge@^3.1.0, deepmerge@^3.2.0: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA== -deepmerge@^4.2.2: +deepmerge@^4.0.0, deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== @@ -5898,6 +7303,11 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + deferred-leveldown@~1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" @@ -5934,6 +7344,16 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +degenerator@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-3.0.2.tgz#6a61fcc42a702d6e50ff6023fe17bff435f68235" + integrity sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ== + dependencies: + ast-types "^0.13.2" + escodegen "^1.8.1" + esprima "^4.0.0" + vm2 "^3.9.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -5944,6 +7364,11 @@ denodeify@^1.2.1: resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE= +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -5972,6 +7397,11 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + detox@^18.18.1: version "18.18.1" resolved "https://registry.yarnpkg.com/detox/-/detox-18.18.1.tgz#11fdfbcf698ee79f6baaecc7f09bacc37134841b" @@ -6003,6 +7433,35 @@ detox@^18.18.1: yargs "^16.0.3" yargs-unparser "^2.0.0" +devtools-protocol@0.0.981744: + version "0.0.981744" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.981744.tgz#9960da0370284577d46c28979a0b32651022bacf" + integrity sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg== + +devtools-protocol@^0.0.982423: + version "0.0.982423" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.982423.tgz#39ac3791d4c5b90ebb416d4384663b7b0cc44154" + integrity sha512-FnVW2nDbjGNw1uD/JRC+9U5768W7e1TfUwqbDTcSsAu1jXFjITSX8w3rkW5FEpHRMPPGpvNSmO1pOpqByiWscA== + +devtools@7.19.5: + version "7.19.5" + resolved "https://registry.yarnpkg.com/devtools/-/devtools-7.19.5.tgz#6a310e4d52b526fc89110dee5ec174df51ee8984" + integrity sha512-O62fArKiAT7fxTgn3GagEFZPpKF2Kfx/HkzGmJVIlBktrN4bJ+DAwZh6d27U9hE6qraMbVPEw+tW6T3RWoj0Sw== + dependencies: + "@types/node" "^17.0.4" + "@types/ua-parser-js" "^0.7.33" + "@wdio/config" "7.19.5" + "@wdio/logger" "7.19.0" + "@wdio/protocols" "7.19.0" + "@wdio/types" "7.19.5" + "@wdio/utils" "7.19.5" + chrome-launcher "^0.15.0" + edge-paths "^2.1.0" + puppeteer-core "^13.1.3" + query-selector-shadow-dom "^1.0.0" + ua-parser-js "^1.0.1" + uuid "^8.0.0" + diff-sequences@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" @@ -6018,11 +7477,21 @@ diff-sequences@^27.0.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -6131,6 +7600,11 @@ domutils@^2.4.3, domutils@^2.4.4: domelementtype "^2.0.1" domhandler "^4.0.0" +dotenv@^16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.0.tgz#c619001253be89ebb638d027b609c75c26e47411" + integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q== + dtrace-provider@~0.8: version "0.8.8" resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.8.tgz#2996d5490c37e1347be263b423ed7b297fb0d97e" @@ -6143,6 +7617,20 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +duplexer@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +easy-table@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.2.0.tgz#ba9225d7138fee307bfd4f0b5bc3c04bdc7c54eb" + integrity sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww== + dependencies: + ansi-regex "^5.0.1" + optionalDependencies: + wcwidth "^1.0.1" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -6158,11 +7646,26 @@ ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer "^5.0.1" +edge-paths@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/edge-paths/-/edge-paths-2.2.1.tgz#d2d91513225c06514aeac9843bfce546abbf4391" + integrity sha512-AI5fC7dfDmCdKo3m5y7PkYE8m6bMqR6pvVpgtrZkkhcJXFLelUgkjrhk3kXXx8Kbw2cRaTT4LkOR7hqf39KJdw== + dependencies: + "@types/which" "^1.3.2" + which "^2.0.2" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +ejs@^3.0.1: + version "3.1.7" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.7.tgz#c544d9c7f715783dd92f0bddcf73a59e6962d006" + integrity sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw== + dependencies: + jake "^10.8.5" + electron-to-chromium@^1.3.649: version "1.3.701" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.701.tgz#5e796ed7ce88cd77bc7bf831cf311ef6b067c389" @@ -6178,6 +7681,11 @@ electron-to-chromium@^1.3.896: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.14.tgz#b0aa41fbfbf2eff8c2c6f7a871c03075250f8956" integrity sha512-RsGkAN9JEAYMObS72kzUsPPcPGMqX1rBqGuXi9aa4TBKLzICoLf+DAAtd0fVFzrniJqYzpby47gthCUoObfs0Q== +electron-to-chromium@^1.4.84: + version "1.4.103" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz#abfe376a4d70fa1e1b4b353b95df5d6dfd05da3a" + integrity sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg== + elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -6226,7 +7734,7 @@ encoding@^0.1.11: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -6470,7 +7978,7 @@ escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -6480,6 +7988,18 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escodegen@^1.8.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + escodegen@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" @@ -6683,7 +8203,7 @@ esrecurse@^4.1.0, esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: +estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -6969,6 +8489,19 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +event-stream@=3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + event-target-shim@^5.0.0, event-target-shim@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" @@ -7078,6 +8611,14 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" +expect-webdriverio@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/expect-webdriverio/-/expect-webdriverio-3.2.1.tgz#7db8f450784b7e9fa231798f9761bffd70586d3a" + integrity sha512-bN3FGCKvddmtlt1A8SW3A1HK9lUbNybrvwUEDu5nEjJMwC8oTnE+9kDogA/6aEN1kRX9cX3tKB8WdyqbGPYnoA== + dependencies: + expect "^27.0.2" + jest-matcher-utils "^27.0.2" + expect@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" @@ -7090,6 +8631,16 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" +expect@^27.0.2: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== + dependencies: + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + expect@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/expect/-/expect-27.0.6.tgz#a4d74fbe27222c718fff68ef49d78e26a8fd4c05" @@ -7102,15 +8653,15 @@ expect@^27.0.6: jest-message-util "^27.0.6" jest-regex-util "^27.0.6" -expo-application@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-3.2.0.tgz#d029445cbc486b66f31ec3b8d556334119cebf48" - integrity sha512-NDPQAtB05Jeiw771bDYsecbLrLA39X33Jk8uP1VUVdHMy6cCfJrL8PSDssgMLElAzR94K8toeqdGsGx9mVv8zw== +expo-application@~4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-4.0.2.tgz#860dbd12132a56de7cf75fe7b5146b6cd97ed30e" + integrity sha512-ngTaFplTkWn0X45gMC+VNXGyJfGxX4wOwKmtr17rNMVWOQUhhLlyMkTj9bAamzsuwZh35l3S/eD/N1aMWWUwMw== -expo-asset@~8.3.3: - version "8.3.3" - resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.3.3.tgz#b54ab9999efb3d2086329fc5b1bed04fede8f682" - integrity sha512-qCm5d14tzswY8DcmRJ+0WkY9tc3OiVikBAiw2hCMC+bFpK/bEdqy4Zwfd69MFIAJ0taJpHWhdUoBRO0byQLlfg== +expo-asset@~8.4.6: + version "8.4.6" + resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.4.6.tgz#1c40e9badac66dbd3d2be2810711937e5b9b09bd" + integrity sha512-Kpzcmmf1lceHnZkAdJOvq7l7SU/hCL59vAj2xUZS66U6lFkUf7LNEA/NzILA56loCd4cka5ShYlWs+BMchyFDQ== dependencies: blueimp-md5 "^2.10.0" invariant "^2.2.4" @@ -7118,109 +8669,107 @@ expo-asset@~8.3.3: path-browserify "^1.0.0" url-parse "^1.4.4" -expo-av@^9.2.3: - version "9.2.3" - resolved "https://registry.yarnpkg.com/expo-av/-/expo-av-9.2.3.tgz#aa54da9c0bc1c3eb0251c1da17f5123f15d4f82f" - integrity sha512-If6+JqB2mqMKJxHgN8UAx75CWH4kPAzx2EyP+MFmcPVpcSBJZ/Fj+EfI+GJnk3tHPSB2Eld1IFEYOIJCkN/26Q== +expo-av@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/expo-av/-/expo-av-10.2.1.tgz#c08bce464d673d0e90c68cac082bfb75a9437f25" + integrity sha512-thrkHVg4HVn8L+jHKVnXYd4TLkJQblFE8QXd3d1hwrYG63gehQT2nK4DM0Frl50EcdV8YN9XjhwHobtK5oMc9A== dependencies: - "@expo/config-plugins" "^3.0.0" - expo-modules-core "~0.2.0" + "@expo/config-plugins" "^4.0.2" -expo-constants@~11.0.2: - version "11.0.2" - resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-11.0.2.tgz#069930145908fef7d76bf72a1a874a1d4621af82" - integrity sha512-CVjM+FbOMe/nFOSly5lnj0seMAYsjjc6+q3X8nIXG+gtw9iNBLwMX3Fz308rxiaPRJw+TBdd5/mcGJdNfoS+ew== +expo-constants@~13.0.2: + version "13.0.2" + resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-13.0.2.tgz#b489ecd575cc82a9a0b3dfbf2385d45a44300eb1" + integrity sha512-vGs/kI65vplPFvG8z4W1ariGEtVHHp9Avl28G0zJprt2v/q1E/BnXjwvFSBPc1GB+Zb/7crWSHWRwjaFULBjsg== dependencies: - "@expo/config" "^4.0.0" - expo-modules-core "~0.2.0" + "@expo/config" "^6.0.6" uuid "^3.3.2" -expo-error-recovery@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/expo-error-recovery/-/expo-error-recovery-2.2.0.tgz#89e5494d97347530dd53cd817d7ac63f07bf8de0" - integrity sha512-HKbu6VHAlfhoP7y+HaGJwJizoUTY2eBTBHAi1RE7l/r4sc+cAegTmwwqf/3AOR8C7VntDvuQKtW7NZIyA+62KQ== +expo-error-recovery@~3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/expo-error-recovery/-/expo-error-recovery-3.0.5.tgz#1802b733e998606a8fcfb0abe6682c334319ef75" + integrity sha512-VM6OOecjt0aPu5/eCdGGJfNjvAZIemaQym0JF/+SA5IlLiPpEfbVCDTO/5yiS8Zb5fKpeABx+GCRmtfnFqvRRw== -expo-file-system@~11.1.3: - version "11.1.3" - resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-11.1.3.tgz#f344bd175a5f65e2a97d2d6a1fd4c8da06386639" - integrity sha512-FBRcD6ojrkrZiTZ8O7Fbo833HhZtkhKtLDj4RNZIMpF1i+ZBD2bmeMcfLMeRHNYcBeJno9C4AVXoNQFqDCGQDg== +expo-file-system@~13.1.3: + version "13.1.4" + resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-13.1.4.tgz#08fc20d49b2182e1fd195d95c40cf7eddfe7bd91" + integrity sha512-/C2FKCzrdWuEt4m8Pzl9J4MhKgfU0denVLbqoKjidv8DnsLQrscFNlLhXuiooqWwsxB2OWAtGEVnPGJBWVuNEQ== dependencies: - "@expo/config-plugins" "^3.0.0" - expo-modules-core "~0.2.0" + "@expo/config-plugins" "^4.0.2" uuid "^3.4.0" -expo-font@~9.2.1: - version "9.2.1" - resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-9.2.1.tgz#c7586b009bf3c4c2427d33c360015d354960bd70" - integrity sha512-sT9nm2Dt1nTLz+Ir1fSpyzqH40eJX324Wu5sPyvT2Ivnmu2rw2rxt3gNa8Kvdb8BPRz4qrRvHR/E+YKMqa6ZgQ== +expo-font@~10.0.5: + version "10.0.5" + resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-10.0.5.tgz#8010060ec5326b3b462f7a1ac6b232dc4d1a7317" + integrity sha512-x9YwM0xLkDdSvFjeNbyuh33Q1Hk3uc2jbMuuAN5W2ZVcUZqG0M8GCX/KV/D/7rYqdXKbliQA5r44MyDwZe/XRw== dependencies: - expo-modules-core "~0.2.0" fontfaceobserver "^2.1.0" -expo-image-loader@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-2.2.0.tgz#b5d49ec65e576c033823050b223ef462c5ec5711" - integrity sha512-kTs/lW8LUXYFQ5t8wkdJs0A41zd7dIB8uRRC0a9L0EurSGUvQWiVTbHQoLo/GYWL7nM85OaPAe2qkHfcz5KeyA== +expo-image-loader@~3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-3.1.1.tgz#f88d94e66c5a102f15d858973c03b92e10662575" + integrity sha512-ZX4Bh3K4CCX1aZflnmbOgFNLS+c0/GUys4wdvqxO+4A4KU1NNb3jE7RVa/OFYNPDcGhEw20c1QjyE/WsVURJpg== -expo-image-manipulator@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/expo-image-manipulator/-/expo-image-manipulator-9.2.2.tgz#0fc7d2032972961c0a5fb49511d230fe0788fa6f" - integrity sha512-rnwUpLmySEhclES+632/vl4cBQyjWE16PdR003WxvN/YBynTlYIi7If2FZRFt5lktX0Rz988XVE89EavHPn2ug== +expo-image-manipulator@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/expo-image-manipulator/-/expo-image-manipulator-10.2.1.tgz#6fd0db248f10a5e99b16e1f53d382ca77e660b4a" + integrity sha512-0klgPMn8fIUkbWpRVT0LVCtq0ozzm3gO60jZEcJPofJRQWDKuv3Rcf0+8pTqpn45J53eAGsuZ72/Yj0AJqaedQ== dependencies: - expo-modules-core "~0.2.0" + expo-image-loader "~3.1.0" -expo-keep-awake@~9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-9.2.0.tgz#9cbdcc8264c943ef29a58326236cd34267e98f43" - integrity sha512-R5jAx5j3MqrhKFB307FBpaHtYSYeVIFX/rVforBF5inKonYjXRWVhjGoBjolF4geAryNamC3NKhMfxyaaB0W6Q== +expo-keep-awake@~10.0.2: + version "10.0.2" + resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-10.0.2.tgz#706bda839782bb3e8ad4cbe43bde471a56368813" + integrity sha512-Ro1lgyKldbFs4mxhWM+goX9sg0S2SRR8FiJJeOvaRzf8xNhrZfWA00Zpr+/3ocCoWQ3eEL+X9UF4PXXHf0KoOg== -expo-linear-gradient@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/expo-linear-gradient/-/expo-linear-gradient-9.2.0.tgz#5ae16fcb8f141b1c51dc36bd4493dfd6566a9511" - integrity sha512-LnW2u9OT6GeyC6T8qEGjFYfNSk4KIBAwU0aRSjM4Y8hckWqhtKngGDz46DqGmJBzvZMSKuZZvj5xKn794r54ag== +expo-linear-gradient@11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/expo-linear-gradient/-/expo-linear-gradient-11.0.3.tgz#bc559b9a251c9dc8aa37fb6c66c7a497fe92993c" + integrity sha512-LuzTM5+iEHCQfC2TBHAAI+ZjPvf0TvGiA7GYMsyTnakGA2r4JtsV8Ah/miQPKhfG06jLDOo4grUoSMGqbmSrEw== -expo-modules-autolinking@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz#45ba8cb1798f9339347ae35e96e9cc70eafb3727" - integrity sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw== +expo-modules-autolinking@0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-0.5.5.tgz#6bcc42072dcbdfca79d207b7f549f1fdb54a2b74" + integrity sha512-bILEG0Fg+ZhIhdEaShHzsEN1WC0hUmXJ5Kcd4cd+8rVk1Ead9vRZxA/yLx1cNBDCOwMe0GAMrhF7TKT+A1P+YA== dependencies: chalk "^4.1.0" commander "^7.2.0" fast-glob "^3.2.5" - find-up "~5.0.0" + find-up "^5.0.0" fs-extra "^9.1.0" -expo-modules-core@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-0.2.0.tgz#68e5b6e53d0afbf8d131578831aed657589a2d42" - integrity sha512-inpfZ5X/BaTtbj2wG9PA9AC0MN8VyId6KSRlVuEg7+ziurHBy/kKDFxpOddUokhwiln2uhoYPSStJjR/tKypdw== +expo-modules-core@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-0.6.5.tgz#39a1b2f00af66e0bd03acb1f86a25bd29e1a95a5" + integrity sha512-h/9+SJ3m8XkDUV1QrPO8WeXaeRYWLBJrOqhokDyhgWUYSqe6JOuRx1ZkoGq/GmTiwjouRDbXPsXUBiU9HWLYyA== + dependencies: + compare-versions "^3.4.0" + invariant "^2.2.4" -expo@^42.0.4: - version "42.0.4" - resolved "https://registry.yarnpkg.com/expo/-/expo-42.0.4.tgz#07b0e044e43f7cb366e2082850b41b8bb5117a21" - integrity sha512-i1QvMb3cIXdsx7OQh0/N0KJHkPwFlBGEGsXRr/IF2DJFHMWd/J4DR8IaAnTAhx0ifborWHmENgXj5hgWJgirog== +expo@^44.0.6: + version "44.0.6" + resolved "https://registry.yarnpkg.com/expo/-/expo-44.0.6.tgz#5454f08abb07166e55eb55b5fc4d45b5ad416ff4" + integrity sha512-iHnra6uD5kXZgdSUrvxZ3sLjg1FtgtA4p4uaSKVQ39IaMHJBngo8RKqFUJ+BF2kPDpBLJ251eLlhgYUlnAyuag== dependencies: - "@babel/runtime" "^7.1.2" - "@expo/metro-config" "^0.1.70" + "@babel/runtime" "^7.14.0" + "@expo/metro-config" "~0.2.6" "@expo/vector-icons" "^12.0.4" - "@unimodules/core" "~7.1.2" - "@unimodules/react-native-adapter" "~6.3.7" - babel-preset-expo "~8.4.1" + babel-preset-expo "~9.0.2" cross-spawn "^6.0.5" - expo-application "~3.2.0" - expo-asset "~8.3.3" - expo-constants "~11.0.2" - expo-error-recovery "~2.2.0" - expo-file-system "~11.1.3" - expo-font "~9.2.1" - expo-keep-awake "~9.2.0" + expo-application "~4.0.2" + expo-asset "~8.4.6" + expo-constants "~13.0.2" + expo-file-system "~13.1.3" + expo-font "~10.0.5" + expo-keep-awake "~10.0.2" + expo-modules-autolinking "0.5.5" + expo-modules-core "0.6.5" fbemitter "^2.1.1" - invariant "^2.2.2" + invariant "^2.2.4" md5-file "^3.2.3" - pretty-format "^26.4.0" - react-native-safe-area-context "3.2.0" - serialize-error "^2.1.0" + pretty-format "^26.5.2" uuid "^3.4.0" + optionalDependencies: + expo-error-recovery "~3.0.5" express@^4.14.0: version "4.17.1" @@ -7308,6 +8857,17 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -7325,6 +8885,11 @@ fake-merkle-patricia-tree@^1.0.1: dependencies: checkpoint-store "^1.1.0" +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -7373,6 +8938,11 @@ fast-safe-stringify@^2.0.6: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== +fast-safe-stringify@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + fastq@^1.6.0: version "1.11.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" @@ -7394,11 +8964,6 @@ fbemitter@^2.1.1: dependencies: fbjs "^0.8.4" -fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" - integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== - fbjs@^0.8.4: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" @@ -7412,18 +8977,12 @@ fbjs@^0.8.4: setimmediate "^1.0.5" ua-parser-js "^0.7.18" -fbjs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.0.tgz#0907067fb3f57a78f45d95f1eacffcacd623c165" - integrity sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg== +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= dependencies: - cross-fetch "^3.0.4" - fbjs-css-vars "^1.0.0" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" + pend "~1.2.0" figures@^2.0.0: version "2.0.0" @@ -7432,6 +8991,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -7454,6 +9020,18 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +file-uri-to-path@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" + integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== + +filelist@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.3.tgz#448607750376484932f67ef1b9ff07386b036c83" + integrity sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q== + dependencies: + minimatch "^5.0.1" + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -7489,7 +9067,7 @@ finalhandler@1.1.2, finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-babel-config@^1.1.0, find-babel-config@^1.2.0: +find-babel-config@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== @@ -7506,7 +9084,15 @@ find-cache-dir@^2.0.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-up@^2.0.0, find-up@^2.1.0: +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -7528,7 +9114,7 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -find-up@~5.0.0: +find-up@^5.0.0, find-up@~5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -7604,6 +9190,24 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +form-data@^2.3.3: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -7613,6 +9217,11 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +formidable@^1.2.1, formidable@^1.2.2: + version "1.2.6" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" + integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -7648,6 +9257,16 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3" @@ -7667,6 +9286,15 @@ fs-extra@^1.0.0: jsonfile "^2.1.0" klaw "^1.0.0" +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -7724,11 +9352,19 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@^2.3.2: +fsevents@^2.1.2, fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +ftp@^0.3.10: + version "0.3.10" + resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" + integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= + dependencies: + readable-stream "1.1.x" + xregexp "2.0.0" + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -7764,7 +9400,14 @@ fuse.js@3.4.5: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.4.5.tgz#8954fb43f9729bd5dbcb8c08f251db552595a7a6" integrity sha512-s9PGTaQIkT69HaeoTVjwGsLfb8V8ScJLx5XGFcKHg0MqLUH/UZ4EKOtqtXX9k7AFqCGxD1aJmYb8Q5VYDibVRQ== -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: +gaze@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + +gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -7819,6 +9462,18 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-uri@3: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" + integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== + dependencies: + "@tootallnate/once" "1" + data-uri-to-buffer "3" + debug "4" + file-uri-to-path "2" + fs-extra "^8.1.0" + ftp "^0.3.10" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -7851,7 +9506,7 @@ gitconfiglocal@^2.1.0: dependencies: ini "^1.3.2" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.2: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -7881,7 +9536,7 @@ glob@^6.0.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.6: +glob@^7.0.5, glob@^7.1.6, glob@^7.1.7: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -7893,6 +9548,18 @@ glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +glob@~7.1.1: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global@~4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" @@ -7925,6 +9592,15 @@ globby@^11.0.1: merge2 "^1.3.0" slash "^3.0.0" +globule@^1.0.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.3.tgz#811919eeac1ab7344e905f2e3be80a13447973c2" + integrity sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg== + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + google-libphonenumber@^3.2.10: version "3.2.23" resolved "https://registry.yarnpkg.com/google-libphonenumber/-/google-libphonenumber-3.2.23.tgz#026dfbf856f566d59cefe742f261355b597c651e" @@ -7947,6 +9623,23 @@ got@9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" +got@^11.0.2, got@^11.8.1: + version "11.8.3" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.3.tgz#f496c8fdda5d729a90b4905d2b07dbd148170770" + integrity sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + got@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" @@ -7972,6 +9665,16 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -7990,6 +9693,13 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + has-bigints@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" @@ -8120,7 +9830,7 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -8178,6 +9888,17 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" @@ -8194,6 +9915,15 @@ http-https@^1.0.0: resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -8203,12 +9933,28 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^5.0.0: +https-proxy-agent@5: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== @@ -8216,6 +9962,14 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +https-proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" + integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== + dependencies: + agent-base "5" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -8359,6 +10113,26 @@ ini@^1.3.2, ini@^1.3.4: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +inquirer@8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.2.tgz#1310517a87a0814d25336c78a20b44c3d9b7629d" + integrity sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + inquirer@^6.2.0: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" @@ -8378,6 +10152,27 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" +inquirer@^8.1.5: + version "8.2.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.3.tgz#9c0b8a3fda91fdb00590557ec8530160e908c6e7" + integrity sha512-jmoBlmWUChXgVi1wGDZsD7pWCaibJKmL+8+E2jaiWiRj8OlJLwQdQQS2CIjgvdg8UUHX+oyagQKicVVcqwxi9Q== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + invariant@2.2.4, invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -8436,6 +10231,13 @@ is-bigint@^1.0.1: resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-blob@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-blob/-/is-blob-2.1.0.tgz#e36cd82c90653f1e1b930f11baf9c64216a05385" @@ -8592,11 +10394,23 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" +is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-hex-prefixed@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" @@ -8659,6 +10473,11 @@ is-retry-allowed@^1.0.0: resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== +is-running@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-running/-/is-running-2.1.0.tgz#30a73ff5cc3854e4fc25490809e9f5abf8de09e0" + integrity sha1-MKc/9cw4VOT8JUkICen1q/jeCeA= + is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -8702,6 +10521,16 @@ is-typedarray@1.0.0, is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -8836,11 +10665,34 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" +jake@^10.8.5: + version "10.8.5" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" + integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.1" + minimatch "^3.0.4" + jalaali-js@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/jalaali-js/-/jalaali-js-1.2.3.tgz#365775826d2eece5e6552b96aff384c8773bb406" integrity sha512-irl0pXL59Xl0Oz6jyOiJed/NxrVeS6fSx6a8atQOH/LsPWPZwBCxwe5XVEIqjnwt69FRxvnCCwQn5dTMxwbazQ== +jasmine-core@~3.10.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.10.1.tgz#7aa6fa2b834a522315c651a128d940eca553989a" + integrity sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA== + +jasmine@3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.10.0.tgz#acd3cd560a9d20d8fdad6bd2dd05867d188503f3" + integrity sha512-2Y42VsC+3CQCTzTwJezOvji4qLORmKIE0kwowWC+934Krn6ZXNQYljiwK5st9V3PVx96BSiDYXSB60VVah3IlQ== + dependencies: + glob "^7.1.6" + jasmine-core "~3.10.0" + jest-changed-files@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" @@ -8918,7 +10770,7 @@ jest-config@^26.6.3: micromatch "^4.0.2" pretty-format "^26.6.2" -jest-diff@^24.0.0, jest-diff@^24.3.0, jest-diff@^24.9.0: +jest-diff@^24.0.0, jest-diff@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== @@ -8928,7 +10780,7 @@ jest-diff@^24.0.0, jest-diff@^24.3.0, jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-diff@^26.6.2: +jest-diff@^26.0.0, jest-diff@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== @@ -8948,6 +10800,16 @@ jest-diff@^27.0.6: jest-get-type "^27.0.6" pretty-format "^27.0.6" +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + jest-docblock@^21.0.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" @@ -9022,6 +10884,11 @@ jest-get-type@^27.0.6: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + jest-haste-map@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" @@ -9134,6 +11001,16 @@ jest-matcher-utils@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" +jest-matcher-utils@^27.0.2, jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + dependencies: + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + jest-matcher-utils@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz#2a8da1e86c620b39459f4352eaa255f0d43e39a9" @@ -9188,6 +11065,21 @@ jest-message-util@^27.0.6: slash "^3.0.0" stack-utils "^2.0.3" +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + jest-mock@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" @@ -9696,6 +11588,11 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-buffer@3.0.1, json-buffer@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -9876,6 +11773,14 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +keyv@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.2.2.tgz#4b6f602c0228ef4d8214c03c520bef469ed6b768" + integrity sha512-uYS0vKTlBIjNCAUqrjlxmruxOEiZxZIHXyp32sdcGmP+ukFrmWUnE//RcPXJH3Vxrni1H2gsQbjHE0bH7MtMQQ== + dependencies: + compress-brotli "^1.3.6" + json-buffer "3.0.1" + keyvaluestorage-interface@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" @@ -9924,6 +11829,18 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +ky@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/ky/-/ky-0.30.0.tgz#a3d293e4f6c4604a9a4694eceb6ce30e73d27d64" + integrity sha512-X/u76z4JtDVq10u1JA5UQfatPxgPaVDMYTrgHyiTpGN2z4TMEJkIHsoSBBSg9SWZEIXTKsi9kHgiQ9o3Y/4yog== + +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -10009,6 +11926,14 @@ lie@3.1.1: dependencies: immediate "~3.0.5" +lighthouse-logger@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz#ba6303e739307c4eee18f08249524e7dafd510db" + integrity sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA== + dependencies: + debug "^2.6.9" + marky "^1.2.2" + lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -10028,6 +11953,17 @@ load-bmfont@^1.3.1, load-bmfont@^1.4.0: xhr "^2.0.1" xtend "^4.0.0" +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" @@ -10090,11 +12026,26 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + lodash.escape@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" @@ -10105,6 +12056,11 @@ lodash.filter@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" @@ -10145,6 +12101,11 @@ lodash.isnumber@^3.0.3: resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= +lodash.isobject@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" + integrity sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0= + lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" @@ -10155,6 +12116,11 @@ lodash.isstring@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= +lodash.merge@^4.6.1: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.omit@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" @@ -10175,6 +12141,11 @@ lodash.pick@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= +lodash.pickby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" + integrity sha1-feoh2MGNdwOifHBMFdO4SmfjOv8= + lodash.range@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.range/-/lodash.range-3.2.0.tgz#f461e588f66683f7eadeade513e38a69a565a15d" @@ -10210,7 +12181,17 @@ lodash.unescape@4.0.1: resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= -lodash@^4, lodash@^4.17.10, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0: +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash.zip@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" + integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= + +lodash@^4, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.10: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -10222,6 +12203,14 @@ log-symbols@^2.2.0: dependencies: chalk "^2.0.1" +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + logkitty@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/logkitty/-/logkitty-0.7.1.tgz#8e8d62f4085a826e8d38987722570234e33c6aa7" @@ -10231,6 +12220,16 @@ logkitty@^0.7.1: dayjs "^1.8.15" yargs "^15.1.0" +loglevel-plugin-prefix@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz#2fe0e05f1a820317d98d8c123e634c1bd84ff644" + integrity sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g== + +loglevel@^1.6.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" + integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -10276,6 +12275,13 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -10320,6 +12326,16 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -10327,6 +12343,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +marky@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.4.tgz#d02bb4c08be2366687c778ecd2a328971ce23d7f" + integrity sha512-zd2/GiSn6U3/jeFVZ0J9CA1LzQ8RfIVvXkb/U0swFHF/zT+dVohTAWjmo2DcIuofmIIIROlwTbd+shSeXmxr0w== + md5-file@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-3.2.3.tgz#f9bceb941eca2214a4c0727f5e700314e770f06f" @@ -10406,7 +12427,7 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: rlp "^2.0.0" semaphore ">=1.0.1" -methods@~1.1.2: +methods@^1.1.2, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= @@ -10425,14 +12446,6 @@ metro-babel-register@0.66.2: "@babel/register" "^7.0.0" escape-string-regexp "^1.0.5" -metro-babel-transformer@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.59.0.tgz#dda99c75d831b00142c42c020c51c103b29f199d" - integrity sha512-fdZJl8rs54GVFXokxRdD7ZrQ1TJjxWzOi/xSP25VR3E8tbm3nBZqS+/ylu643qSr/IueABR+jrlqAyACwGEf6w== - dependencies: - "@babel/core" "^7.0.0" - metro-source-map "0.59.0" - metro-babel-transformer@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.66.2.tgz#fce0a3e314d28a5e7141c135665e1cc9b8e7ce86" @@ -10500,11 +12513,12 @@ metro-minify-uglify@0.66.2: dependencies: uglify-es "^3.1.9" -metro-react-native-babel-preset@0.59.0, metro-react-native-babel-preset@~0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.59.0.tgz#20e020bc6ac9849e1477de1333d303ed42aba225" - integrity sha512-BoO6ncPfceIDReIH8pQ5tQptcGo5yRWQXJGVXfANbiKLq4tfgdZB1C1e2rMUJ6iypmeJU9dzl+EhPmIFKtgREg== +metro-react-native-babel-preset@0.66.2, metro-react-native-babel-preset@^0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.66.2.tgz#fddebcf413ad4ea617d4f47f7c1da401052de734" + integrity sha512-H/nLBAz0MgfDloSe1FjyH4EnbokHFdncyERvLPXDACY3ROVRCeUyFNo70ywRGXW2NMbrV4H7KUyU4zkfWhC2HQ== dependencies: + "@babel/core" "^7.14.0" "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-export-default-from" "^7.0.0" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" @@ -10517,6 +12531,7 @@ metro-react-native-babel-preset@0.59.0, metro-react-native-babel-preset@~0.59.0: "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" "@babel/plugin-syntax-optional-chaining" "^7.0.0" "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" "@babel/plugin-transform-block-scoping" "^7.0.0" "@babel/plugin-transform-classes" "^7.0.0" "@babel/plugin-transform-computed-properties" "^7.0.0" @@ -10544,12 +12559,12 @@ metro-react-native-babel-preset@0.59.0, metro-react-native-babel-preset@~0.59.0: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-preset@0.66.2, metro-react-native-babel-preset@^0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.66.2.tgz#fddebcf413ad4ea617d4f47f7c1da401052de734" - integrity sha512-H/nLBAz0MgfDloSe1FjyH4EnbokHFdncyERvLPXDACY3ROVRCeUyFNo70ywRGXW2NMbrV4H7KUyU4zkfWhC2HQ== +metro-react-native-babel-preset@~0.64.0: + version "0.64.0" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz#76861408681dfda3c1d962eb31a8994918c976f8" + integrity sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ== dependencies: - "@babel/core" "^7.14.0" + "@babel/core" "^7.0.0" "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-export-default-from" "^7.0.0" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" @@ -10562,7 +12577,6 @@ metro-react-native-babel-preset@0.66.2, metro-react-native-babel-preset@^0.66.2: "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" "@babel/plugin-syntax-optional-chaining" "^7.0.0" "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.0.0" "@babel/plugin-transform-block-scoping" "^7.0.0" "@babel/plugin-transform-classes" "^7.0.0" "@babel/plugin-transform-computed-properties" "^7.0.0" @@ -10603,17 +12617,6 @@ metro-react-native-babel-transformer@0.66.2, metro-react-native-babel-transforme metro-source-map "0.66.2" nullthrows "^1.1.1" -metro-react-native-babel-transformer@^0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.59.0.tgz#9b3dfd6ad35c6ef37fc4ce4d20a2eb67fabbb4be" - integrity sha512-1O3wrnMq4NcPQ1asEcl9lRDn/t+F1Oef6S9WaYVIKEhg9m/EQRGVrrTVP+R6B5Eeaj3+zNKbzM8Dx/NWy1hUbQ== - dependencies: - "@babel/core" "^7.0.0" - babel-preset-fbjs "^3.3.0" - metro-babel-transformer "0.59.0" - metro-react-native-babel-preset "0.59.0" - metro-source-map "0.59.0" - metro-resolver@0.66.2, metro-resolver@^0.66.1: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.66.2.tgz#f743ddbe7a12dd137d1f7a555732cafcaea421f8" @@ -10626,19 +12629,6 @@ metro-runtime@0.66.2, metro-runtime@^0.66.1: resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.66.2.tgz#3409ee957b949b6c7b72ef6ed2b9af9a4f4a910e" integrity sha512-vFhKBk2ot9FS4b+2v0OTa/guCF/QDAOJubY0CNg7PzCS5+w4y3IvZIcPX4SSS1t8pYEZBLvtdtTDarlDl81xmg== -metro-source-map@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.59.0.tgz#e9beb9fc51bfb4e060f95820cf1508fc122d23f7" - integrity sha512-0w5CmCM+ybSqXIjqU4RiK40t4bvANL6lafabQ2GP2XD3vSwkLY+StWzCtsb4mPuyi9R/SgoLBel+ZOXHXAH0eQ== - dependencies: - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - invariant "^2.2.4" - metro-symbolicate "0.59.0" - ob1 "0.59.0" - source-map "^0.5.6" - vlq "^1.0.0" - metro-source-map@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.66.2.tgz#b5304a282a5d55fa67b599265e9cf3217175cdd7" @@ -10653,17 +12643,6 @@ metro-source-map@0.66.2: source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.59.0.tgz#fc7f93957a42b02c2bfc57ed1e8f393f5f636a54" - integrity sha512-asLaF2A7rndrToGFIknL13aiohwPJ95RKHf0NM3hP/nipiLDoMzXT6ZnQvBqDxkUKyP+51AI75DMtb+Wcyw4Bw== - dependencies: - invariant "^2.2.4" - metro-source-map "0.59.0" - source-map "^0.5.6" - through2 "^2.0.1" - vlq "^1.0.0" - metro-symbolicate@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.66.2.tgz#addd095ce5f77e73ca21ddb5dfb396ff5d4fa041" @@ -10829,6 +12808,11 @@ mime@^2.4.1: resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== +mime@^2.4.4, mime@^2.4.6: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -10844,6 +12828,11 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -10861,13 +12850,27 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.0, minimatch@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@~3.0.2: + version "3.0.8" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -10896,6 +12899,11 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" +mkdirp-classic@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -10903,7 +12911,7 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*: +mkdirp@*, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -10942,11 +12950,6 @@ mock-fs@^4.1.0: resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.13.0.tgz#31c02263673ec3789f90eb7b6963676aa407a598" integrity sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA== -mockdate@^3.0.2: - version "3.0.5" - resolved "https://registry.yarnpkg.com/mockdate/-/mockdate-3.0.5.tgz#789be686deb3149e7df2b663d2bc4392bc3284fb" - integrity sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ== - modal-react-native-web@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/modal-react-native-web/-/modal-react-native-web-0.2.0.tgz#5daaa76213218fd25df739a267b11aed37e8c0c2" @@ -10988,13 +12991,13 @@ moo@^0.5.0: resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4" integrity sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w== -moti@^0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/moti/-/moti-0.16.1.tgz#7a22cf19680a52422c199086d23dd5b085e26449" - integrity sha512-AgbWHRZdt7DZ0BMZ/wrY7PUpaNqTSjIeEoHi346SK75oymB1a7SiEIJnRShtS6Z5t+8YY9I+7A5Zq/vzbjlNMw== +moti@^0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/moti/-/moti-0.17.1.tgz#6c0c3c5fa76cb2cd1af86787ef5596debb87c6da" + integrity sha512-AFpsKkiQ6GQcqbgWCuVt+Yd4guTZdO3iRBjMkV1SYcE9vTVH2JWrG5Rk3Xu6XcxJ9jDICQ5/NJj15nbAcymrYg== dependencies: - "@motify/components" "^0.16.1" - "@motify/core" "^0.16.1" + "@motify/components" "^0.17.1" + "@motify/core" "^0.17.1" mri@^1.1.5: version "1.1.6" @@ -11077,6 +13080,11 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + mv@~2: version "2.1.1" resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" @@ -11162,6 +13170,11 @@ neo-async@^2.5.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +netmask@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -11201,10 +13214,12 @@ node-fetch@2.1.2: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= -node-fetch@2.6.1, node-fetch@^2.0.0-alpha.8, node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" node-fetch@^1.0.1: version "1.7.3" @@ -11214,6 +13229,11 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" +node-fetch@^2.0.0-alpha.8, node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + node-gyp-build@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" @@ -11285,6 +13305,11 @@ node-releases@^2.0.1: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +node-releases@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" + integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== + node-stream-zip@^1.9.1: version "1.13.2" resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.13.2.tgz#2fce9d001fa7fda943a906eff239eb83fda124ba" @@ -11312,7 +13337,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -11329,6 +13354,11 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -11385,11 +13415,6 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -ob1@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.59.0.tgz#ee103619ef5cb697f2866e3577da6f0ecd565a36" - integrity sha512-opXMTxyWJ9m68ZglCxwo0OPRESIC/iGmKFPXEXzMZqsVIrgoRXOHmoMDkQzz4y3irVjbyPJRAh5pI9fd0MJTFQ== - ob1@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.66.2.tgz#8caf548202cf2688944bae47db405a08bca17a61" @@ -11409,6 +13434,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.10.3: + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== + object-inspect@^1.7.0, object-inspect@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" @@ -11618,6 +13648,21 @@ ora@^3.4.0: strip-ansi "^5.2.0" wcwidth "^1.0.1" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -11647,6 +13692,11 @@ p-cancelable@^1.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + p-each-series@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" @@ -11657,6 +13707,11 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-iteration@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/p-iteration/-/p-iteration-1.1.8.tgz#14df726d55af368beba81bcc92a26bb1b48e714a" + integrity sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -11723,6 +13778,30 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pac-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz#b718f76475a6a5415c2efbe256c1c971c84f635e" + integrity sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + get-uri "3" + http-proxy-agent "^4.0.1" + https-proxy-agent "5" + pac-resolver "^5.0.0" + raw-body "^2.2.0" + socks-proxy-agent "5" + +pac-resolver@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-5.0.0.tgz#1d717a127b3d7a9407a16d6e1b012b13b9ba8dc0" + integrity sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA== + dependencies: + degenerator "^3.0.1" + ip "^1.1.5" + netmask "^2.0.1" + pako@^1.0.5, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -11794,6 +13873,11 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + parse-svg-path@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb" @@ -11860,6 +13944,13 @@ path-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -11895,6 +13986,15 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -11919,6 +14019,13 @@ paths-js@^0.4.10: resolved "https://registry.yarnpkg.com/paths-js/-/paths-js-0.4.11.tgz#b2a9d5f94ee9949aa8fee945f78a12abff44599e" integrity sha512-3mqcLomDBXOo7Fo+UlaenG6f71bk1ZezPQy2JCmYHy2W2k5VKpP+Jbin9H0bjXynelTbglCqdFhSEkeIkKTYUA== +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= + dependencies: + through "~2.3" + pbkdf2@3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.8.tgz#2f8abf16ebecc82277945d748aba1d78761f61e2" @@ -11937,6 +14044,11 @@ pbkdf2@^3.0.17, pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -12016,26 +14128,19 @@ pixelmatch@^4.0.2: dependencies: pngjs "^3.0.0" -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.2.0: +pkg-dir@4.2.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== dependencies: - find-up "^2.1.0" + find-up "^3.0.0" pkg-up@^3.1.0: version "3.1.0" @@ -12061,6 +14166,14 @@ plist@^3.0.2: base64-js "^1.5.1" xmlbuilder "^9.0.7" +plist@^3.0.4: + version "3.0.5" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987" + integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA== + dependencies: + base64-js "^1.5.1" + xmlbuilder "^9.0.7" + pngjs@^3.0.0, pngjs@^3.3.0, pngjs@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" @@ -12086,6 +14199,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-value-parser@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + postinstall-postinstall@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" @@ -12148,7 +14266,7 @@ pretty-format@^24.0.0, pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" -pretty-format@^26.0.1, pretty-format@^26.4.0, pretty-format@^26.5.2, pretty-format@^26.6.2: +pretty-format@^26.0.0, pretty-format@^26.0.1, pretty-format@^26.5.2, pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== @@ -12168,6 +14286,22 @@ pretty-format@^27.0.6: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +pretty-ms@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" + integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== + dependencies: + parse-ms "^2.1.0" + pretty-quick@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.1.0.tgz#cb172e9086deb57455dea7c7e8f136cd0a4aef6c" @@ -12190,7 +14324,7 @@ process@^0.11.0, process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0, progress@^2.0.3: +progress@2.0.3, progress@^2.0.0, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -12270,7 +14404,21 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.1" -proxy-from-env@^1.1.0: +proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-5.0.0.tgz#d31405c10d6e8431fde96cba7a0c027ce01d633b" + integrity sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g== + dependencies: + agent-base "^6.0.0" + debug "4" + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" + lru-cache "^5.1.1" + pac-proxy-agent "^5.0.0" + proxy-from-env "^1.0.0" + socks-proxy-agent "^5.0.0" + +proxy-from-env@1.1.0, proxy-from-env@^1.0.0, proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== @@ -12280,6 +14428,13 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= +ps-tree@=1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" + integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== + dependencies: + event-stream "=3.3.4" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -12325,6 +14480,24 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +puppeteer-core@^13.1.3: + version "13.6.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-13.6.0.tgz#1626efbe789c19000a4c15309dbe55db5e936724" + integrity sha512-n692xT9uOTxbFKcCRkfOT2Go5LL0YBCHrSpBdbNsjLhcxO5yuhj2/4jgAIK9bT1blY17Pb4I35eBSuDzJ54ERw== + dependencies: + cross-fetch "3.1.5" + debug "4.3.4" + devtools-protocol "0.0.981744" + extract-zip "2.0.1" + https-proxy-agent "5.0.0" + pkg-dir "4.2.0" + progress "2.0.3" + proxy-from-env "1.1.0" + rimraf "3.0.2" + tar-fs "2.1.1" + unbzip2-stream "1.4.3" + ws "8.5.0" + pusher-js@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/pusher-js/-/pusher-js-7.0.3.tgz#f81c78cdf2ad32f546caa7532ec7f9081ef00b8d" @@ -12361,11 +14534,23 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@^6.7.0, qs@^6.9.4: + version "6.10.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +query-selector-shadow-dom@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.0.tgz#8fa7459a4620f094457640e74e953a9dbe61a38e" + integrity sha512-bK0/0cCI+R8ZmOF1QjT7HupDUYCxbf/9TJgAmSXQxZpftXmTAeil9DRoCnTDkWbvOyZzhcMBwKpptWcdkGFIMg== + query-string@6.13.5: version "6.13.5" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.5.tgz#99e95e2fb7021db90a6f373f990c0c814b3812d8" @@ -12414,6 +14599,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + r2@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/r2/-/r2-2.0.1.tgz#94cd802ecfce9a622549c8182032d8e4a2b2e612" @@ -12478,6 +14668,16 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +raw-body@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + react-addons-shallow-compare@15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/react-addons-shallow-compare/-/react-addons-shallow-compare-15.6.2.tgz#198a00b91fc37623db64a28fd17b596ba362702f" @@ -12529,7 +14729,7 @@ react-is@^16.12.0, react-is@^16.13.0, react-is@^16.13.1, react-is@^16.7.0, react resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-native-animatable@1.3.3, react-native-animatable@^1.3.3: +react-native-animatable@1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/react-native-animatable/-/react-native-animatable-1.3.3.tgz#a13a4af8258e3bb14d0a9d839917e9bb9274ec8a" integrity sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w== @@ -12541,10 +14741,10 @@ react-native-animated-spinkit@^1.5.2: resolved "https://registry.yarnpkg.com/react-native-animated-spinkit/-/react-native-animated-spinkit-1.5.2.tgz#b1c00ecbadf48634273e6a843f8dfbcb7c006186" integrity sha512-YCQGR3HzEQvyaAnepiyf/hv88Sta3UIZ2CFZPtFqwu+VbFJfMgjJZniOx4157TuR5AAYajEJP9Fgy+JLIU3jzQ== -react-native-blurhash@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/react-native-blurhash/-/react-native-blurhash-1.1.5.tgz#27545afb126347059a3a9324f5c3640a94b1ec53" - integrity sha512-RX5lgZ+wwl+XhdgSvR94YpGrPWj5KI6D/9I650Y+TF2W9PDuvJ3gDMz98ispvG2FaUqQrf9LM39pedUxBVWROA== +react-native-blurhash@^1.1.10: + version "1.1.10" + resolved "https://registry.yarnpkg.com/react-native-blurhash/-/react-native-blurhash-1.1.10.tgz#3969af24ebab098976cba90d100ba157760d3132" + integrity sha512-ScLdguCk+g9er2ccdwArNet1BOMoU7MClHV2MiNheHwn6HFr9vDkFPnUG011B5ddzCJlqj9JazFBNnxwhSWZhg== react-native-bootsplash@^3.2.4: version "3.2.4" @@ -12584,6 +14784,19 @@ react-native-clean-project@^3.6.4: resolved "https://registry.yarnpkg.com/react-native-clean-project/-/react-native-clean-project-3.6.4.tgz#7589fffe82a184f1bcc0554d6a95c7bac4b1e9ef" integrity sha512-bQij/EktcOb9VnEUg+UaC4bePWlGeqsLk0dyCJyQmHc4s1Cw7lo+cnnFVbuyFnjT0sEMSkDvDF0/rLD6437XMw== +react-native-code-push@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/react-native-code-push/-/react-native-code-push-7.0.4.tgz#13a9d3cc12bee24cb317defb6560caddcb937b71" + integrity sha512-zBCj1vUnyLCG6tt2x5rXzoyYjvgFVEpTnwJUFbs24C5TUKjRw6BJVq1bWsOQklEUWpFYoqhAaZXz/iq3pbqa7g== + dependencies: + code-push "^4.0.5" + glob "^7.1.7" + hoist-non-react-statics "^3.3.2" + inquirer "^8.1.5" + plist "^3.0.4" + semver "^7.3.5" + xcode "3.0.1" + react-native-codegen@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.7.tgz#86651c5c5fec67a8077ef7f4e36f7ed459043e14" @@ -12690,14 +14903,6 @@ react-native-file-type@^0.0.8: js-base64 "2.3.2" react-native-fs "2.11.15" -react-native-flash-message@^0.1.23: - version "0.1.23" - resolved "https://registry.yarnpkg.com/react-native-flash-message/-/react-native-flash-message-0.1.23.tgz#50a17201a2d9d6b22a2f174a97b22c30bff15638" - integrity sha512-T++KNGpIofXRqj3fT+/zJH/su1VgIjGcwiJerSvRsvEXwai1LdUl+O0tX7dz+Lgxi7yzswXKWcUQmY0dZrbG3g== - dependencies: - prop-types "^15.7.2" - react-native-iphone-x-helper "^1.3.0" - react-native-fs@2.11.15: version "2.11.15" resolved "https://registry.yarnpkg.com/react-native-fs/-/react-native-fs-2.11.15.tgz#b80ac78edf124137624697b4864f834c1caf4f43" @@ -12722,15 +14927,15 @@ react-native-fs@^2.18.0: base-64 "^0.1.0" utf8 "^3.0.0" -react-native-gesture-handler@^1.8.0: - version "1.10.3" - resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.10.3.tgz#942bbf2963bbf49fa79593600ee9d7b5dab3cfc0" - integrity sha512-cBGMi1IEsIVMgoox4RvMx7V2r6bNKw0uR1Mu1o7NbuHS6BRSVLq0dP34l2ecnPlC+jpWd3le6Yg1nrdCjby2Mw== +react-native-gesture-handler@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.4.1.tgz#f4cb1784b6dcdf41ae35b4fff6022ec21038e2cd" + integrity sha512-qJHkZAWyuvZvEm8jV6TsYKeTgkYmoNsKrO/CEx0YaisAcHSiaiMx2Dy/0/QQ7oZr3t5aL4rJqWtOEZCADNbfeQ== dependencies: "@egjs/hammerjs" "^2.0.17" - fbjs "^3.0.0" hoist-non-react-statics "^3.3.0" invariant "^2.2.4" + lodash "^4.17.21" prop-types "^15.7.2" react-native-image-colors@^1.3.1: @@ -12767,15 +14972,14 @@ react-native-image-progress@^1.1.1: dependencies: prop-types "^15.5.10" -react-native-inappbrowser-reborn@^3.6.3: +"react-native-inappbrowser-reborn@https://github.com/proyecto26/react-native-inappbrowser": version "3.6.3" - resolved "https://registry.yarnpkg.com/react-native-inappbrowser-reborn/-/react-native-inappbrowser-reborn-3.6.3.tgz#12938733e5337a9f328973557da0cfd13085bfbd" - integrity sha512-fqF708GVZ/7zja0/GyJQfjDfKREOe1fxYq8RAKZo8/KK6SkFO9hBlYqC3PwLFPw29zzwBzR+6EpL3qo95igkLw== + resolved "https://github.com/proyecto26/react-native-inappbrowser#5b7b125232356acb20e61f662a0046c0e0461920" dependencies: invariant "^2.2.4" opencollective-postinstall "^2.0.2" -react-native-iphone-x-helper@^1.0.3, react-native-iphone-x-helper@^1.3.0: +react-native-iphone-x-helper@^1.0.3: version "1.3.1" resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz#20c603e9a0e765fd6f97396638bdeb0e5a60b010" integrity sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg== @@ -12798,10 +15002,10 @@ react-native-material-menu@^1.1.3: resolved "https://registry.yarnpkg.com/react-native-material-menu/-/react-native-material-menu-1.2.0.tgz#07fac14ccc6e1cd7b995016340efbfbddc6a7a58" integrity sha512-1XbzJP8Uo09YjW0G8xuKcL2BD76BL/IYOq1KQuQ2yGMuwqBvfU/+AKvhvHWuckQK+bhcDSUgTWbH8qv1mRAX6w== -react-native-mmkv-storage@^0.6.8: - version "0.6.8" - resolved "https://registry.yarnpkg.com/react-native-mmkv-storage/-/react-native-mmkv-storage-0.6.8.tgz#1860882b58af907ed422d1c27588fe6c45c40655" - integrity sha512-l26DVejvL3jN/1pHC8mTQxatoUc1qAEwOmhG2s+PNjRqudgUpRJwFEWbdMj6tmJ54hvP3bbRW3e1+jpryFzMcQ== +react-native-mmkv-storage@^0.6.12: + version "0.6.12" + resolved "https://registry.yarnpkg.com/react-native-mmkv-storage/-/react-native-mmkv-storage-0.6.12.tgz#e9e052e26c3dea6818211919d2586cb260ee8e24" + integrity sha512-9gJlnGSAJkeWanNE24GPqEn4NMiNFVBpPsTZAQ5YDEKEX/gG7bGdHCTNkXc6L826QxLEPKjpPmf9ZqgPM2G8TQ== react-native-modal@^11.10.0: version "11.10.0" @@ -12831,9 +15035,9 @@ react-native-navigation-bar-color@^2.0.1: resolved "https://registry.yarnpkg.com/react-native-navigation-bar-color/-/react-native-navigation-bar-color-2.0.1.tgz#ee2be25cc37105f7da355717b0a9a32c9c059ae6" integrity sha512-1kE/oxWt+HYjRxdZdvke9tJ365xaee5n3+euOQA1En8zQuSbOxiE4SYEGM7TeaWnmLJ0l37mRnPHaB2H4mGh0A== -react-native-notifications@Minds/react-native-notifications#09c0e3278ec966a46c329dda6f79b3659464387f: - version "3.0.0" - resolved "https://codeload.github.com/Minds/react-native-notifications/tar.gz/09c0e3278ec966a46c329dda6f79b3659464387f" +react-native-notifications@Minds/react-native-notifications#6f0346948455d4e0a64fc379570a6a2aa61cb674: + version "3.0.2" + resolved "https://codeload.github.com/Minds/react-native-notifications/tar.gz/6f0346948455d4e0a64fc379570a6a2aa61cb674" dependencies: core-js "^1.0.0" uuid "^2.0.3" @@ -12923,17 +15127,17 @@ react-native-reanimated-indicators@^2.0.0: dependencies: react-native-reanimated-hooks "^2.0.0" -react-native-reanimated@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-2.4.1.tgz#4e33876fba525ce60ac13ab3c81fc3a9f8b132fe" - integrity sha512-kvf7ylGlwa5hxMQ+wpPFjQrI2c6eexf53/xRo+dvXBNefGmSYaYR5sFtD0XMMzIPQlkCB9tJ0Pu9+2WCQUY7Cg== +react-native-reanimated@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-2.8.0.tgz#93c06ca84d91fb3865110b0857c49a24e316130e" + integrity sha512-kJvf/UWLBMaGCs9X66MKq5zdFMgwx8D0nHnolbHR7s8ZnbLdb7TlQ/yuzIXqn/9wABfnwtNRI3CyaP1aHWMmZg== dependencies: - "@babel/plugin-transform-object-assign" "^7.10.4" + "@babel/plugin-transform-object-assign" "^7.16.7" + "@babel/preset-typescript" "^7.16.7" "@types/invariant" "^2.2.35" invariant "^2.2.4" lodash.isequal "^4.5.0" - mockdate "^3.0.2" - react-native-screens "^3.4.0" + setimmediate "^1.0.5" string-hash-64 "^1.0.3" react-native-redash@^14.2.3: @@ -12954,11 +15158,6 @@ react-native-redash@^16.1.1: normalize-svg-path "^1.0.1" parse-svg-path "^0.1.2" -react-native-safe-area-context@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-3.2.0.tgz#06113c6b208f982d68ab5c3cebd199ca93db6941" - integrity sha512-k2Nty4PwSnrg9HwrYeeE+EYqViYJoOFwEy9LxL5RIRfoqxAq/uQXNGwpUg2/u4gnKpBbEPa9eRh15KKMe/VHkA== - react-native-safe-area-context@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.0.1.tgz#b8413ad703088d8c36d2e56202a28b17aa0df79b" @@ -12971,21 +15170,14 @@ react-native-safe-modules@^1.0.0: dependencies: dedent "^0.6.0" -react-native-screens@^3.4.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.10.1.tgz#2634a1a17380c559a06de391e4969ae72c4365ff" - integrity sha512-ZF/XHnRsuinvDY1XiCWLXxoUoSf+NgsAes2SZfX9rFQQcv128zmh/+19SSavGrSf6rQNzqytEMdRGI6yr4Gbjw== +react-native-screens@^3.10.2: + version "3.10.2" + resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.10.2.tgz#cbf505d61c09e29ad5b335309951a3bd81f0df19" + integrity sha512-bMKSpwMeqAoXBqTJiDEG1ogM1cMk66sEmpp/4dGqdX59v+OwMqPeTuBk37qaSuS7gPOFFKsNW2X3ymGvBT4iEw== dependencies: react-freeze "^1.0.0" warn-once "^0.1.0" -react-native-screens@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.8.0.tgz#4ec84c55a7b4a4aa9405c812978ca2ba5c0242a4" - integrity sha512-lHrnB/elAoMJKv8O12U6BLgeup4lB6ZKJHEOVuG/D72nv/OE9wUusbou6YCB5tp3YbaSpHflPnkFmHA/vCejpw== - dependencies: - warn-once "^0.1.0" - react-native-send-intent@msantang78/react-native-send-intent: version "1.2.3" resolved "https://codeload.github.com/msantang78/react-native-send-intent/tar.gz/e13361d40631a49aff98e93ec2ebf760a09c00de" @@ -13052,23 +15244,6 @@ react-native-tab-view@^3.1.1: resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-3.1.1.tgz#1f8d7a835ab4f5b1b1407ec8dddc1053b53fa3c6" integrity sha512-M5pRN6utQfytKWoKlKVzg5NbkYu308qNoW1khGTtEOTs1k14p2dHJ/BWOJoJYHKbPVUyZldbG9MFT7gUl4YHnw== -react-native-unimodules@^0.14.8: - version "0.14.8" - resolved "https://registry.yarnpkg.com/react-native-unimodules/-/react-native-unimodules-0.14.8.tgz#8bf859ac1a4e06122e0331ddf9dec62019884432" - integrity sha512-yL6yaG6rq0dYb9/rN3KyZtOPxc0mt69GsWavAZBnhwN1v4uMi50DiHFdfACTPmPnz420woITmBpKK0juWRZOew== - dependencies: - "@unimodules/core" "~7.1.2" - "@unimodules/react-native-adapter" "~6.3.7" - chalk "^2.4.2" - expo-asset "~8.3.3" - expo-constants "~11.0.2" - expo-file-system "~11.1.3" - expo-image-loader "~2.2.0" - expo-modules-core "~0.2.0" - find-up "~5.0.0" - unimodules-app-loader "~2.2.0" - unimodules-task-manager-interface "~6.2.0" - react-native-vector-icons@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/react-native-vector-icons/-/react-native-vector-icons-7.1.0.tgz#145487d617b2a81d395d2cf64e6e065fcab3a454" @@ -13083,10 +15258,10 @@ react-native-vector-icons@^7.1.0: prop-types "^15.7.2" yargs "^15.0.2" -react-native-vision-camera@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/react-native-vision-camera/-/react-native-vision-camera-2.12.0.tgz#e174798e04676c57ec2633222a954156fd77e48c" - integrity sha512-sc6h1OS8Xei/w6roeHix7bcJC6ml8fW+w1slWxQDYYsch1tb65xflMVQ71SNjyE9FN3KyrojLEqZqgN4iDzL9g== +react-native-vision-camera@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/react-native-vision-camera/-/react-native-vision-camera-2.13.1.tgz#15c63651f4c03d480d8cdbcc4cb188b884ff9ab9" + integrity sha512-QG0sfmMKHEiunHfr2kZlBFxxcatu84uKyYr2PFNnDxpsIeL3r6JvzFJG6FODgNGYlq9Zq/W9H0BFbJco85EHsg== react-native-webview@^11.14.0: version "11.14.0" @@ -13188,6 +15363,14 @@ read-env@^1.3.0: dependencies: camelcase "5.0.0" +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" @@ -13213,6 +15396,15 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" @@ -13241,7 +15433,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -readable-stream@^1.0.33: +readable-stream@1.1.x, readable-stream@^1.0.33: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= @@ -13251,7 +15443,7 @@ readable-stream@^1.0.33: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.2.9, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.9, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -13264,7 +15456,7 @@ readable-stream@^2.0.0, readable-stream@^2.2.9, readable-stream@^2.3.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.6.0: +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -13283,6 +15475,20 @@ readable-stream@~1.0.15: isarray "0.0.1" string_decoder "~0.10.x" +readdir-glob@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" + integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== + dependencies: + minimatch "^3.0.4" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + readline@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c" @@ -13305,6 +15511,18 @@ recast@^0.20.3: source-map "~0.6.1" tslib "^2.0.1" +recursive-fs@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/recursive-fs/-/recursive-fs-2.1.0.tgz#1e20cf7836b292ed81208c4817550a58ad0e15ff" + integrity sha512-oed3YruYsD52Mi16s/07eYblQOLi5dTtxpIJNdfCEJ7S5v8dDgVcycar0pRWf4IBuPMIkoctC8RTqGJzIKMNAQ== + +recursive-readdir@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + redent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" @@ -13318,6 +15536,13 @@ reflect.ownkeys@^0.2.0: resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -13325,7 +15550,7 @@ regenerate-unicode-properties@^8.2.0: dependencies: regenerate "^1.4.0" -regenerate@^1.4.0: +regenerate@^1.4.0, regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== @@ -13372,11 +15597,28 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" + integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + regjsgen@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + regjsparser@^0.6.4: version "0.6.9" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" @@ -13384,6 +15626,13 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -13471,16 +15720,16 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -reselect@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" - integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= - reselect@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -13508,7 +15757,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.9.0: +resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.9.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -13523,6 +15772,20 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" +responselike@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" + integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== + dependencies: + lowercase-keys "^2.0.0" + +resq@^1.9.1: + version "1.10.2" + resolved "https://registry.yarnpkg.com/resq/-/resq-1.10.2.tgz#cedf4f20d53f6e574b1e12afbda446ad9576c193" + integrity sha512-HmgVS3j+FLrEDBTDYysPdPVF9/hioDMJ/otOiQDKqk77YfZeeLOj0qi34yObumcud1gBpk+wpBTEg4kMicD++A== + dependencies: + fast-deep-equal "^2.0.1" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -13531,6 +15794,14 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -13546,6 +15817,11 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rgb2hex@0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/rgb2hex/-/rgb2hex-0.2.5.tgz#f82230cd3ab1364fa73c99be3a691ed688f8dbdc" + integrity sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw== + rgba-to-rgb@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/rgba-to-rgb/-/rgba-to-rgb-1.0.2.tgz#fdb9ac0dfd26143834bd919b6b0c6224ae40fbc2" @@ -13560,6 +15836,13 @@ rimraf@2.6.3, rimraf@~2.6.2: dependencies: glob "^7.1.3" +rimraf@3.0.2, rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -13567,13 +15850,6 @@ rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rimraf@~2.2.6: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" @@ -13586,6 +15862,13 @@ rimraf@~2.4.0: dependencies: glob "^6.0.1" +rimraf@~2.5.2: + version "2.5.4" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ= + dependencies: + glob "^7.0.5" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -13639,7 +15922,7 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -run-async@^2.2.0: +run-async@^2.2.0, run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== @@ -13663,6 +15946,13 @@ rxjs@^6.4.0, rxjs@^6.5.5: dependencies: tslib "^1.9.0" +rxjs@^7.2.0, rxjs@^7.5.5: + version "7.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" + integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== + dependencies: + tslib "^2.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -13771,7 +16061,7 @@ semaphore@>=1.0.1, semaphore@^1.0.3: resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -13832,7 +16122,7 @@ serialize-error@^2.1.0: resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= -serialize-error@^8.0.1: +serialize-error@^8.0.0, serialize-error@^8.0.1: version "8.1.0" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== @@ -13890,6 +16180,11 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -13898,6 +16193,11 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -13942,6 +16242,15 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -14011,6 +16320,11 @@ slugify@^1.3.4: resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.5.0.tgz#5f3c8e2a84105b54eb51486db1b468a599b3c9b8" integrity sha512-Q2UPZ2udzquy1ElHfOLILMBMqBEXkiD3wE75qtBvV+FsDdZZjUqPZ44vqLTejAVq+wLLHacOMcENnP8+ZbzmIA== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -14067,6 +16381,23 @@ socket.io-parser@~3.3.0: debug "~3.1.0" isarray "2.0.1" +socks-proxy-agent@5, socks-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" + integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== + dependencies: + agent-base "^6.0.2" + debug "4" + socks "^2.3.3" + +socks@^2.3.3: + version "2.6.2" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" + integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.2.0" + source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -14144,6 +16475,18 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +split2@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" + integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= + dependencies: + through "2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -14198,6 +16541,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -14208,11 +16556,23 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +stream-buffers@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-3.0.2.tgz#5249005a8d5c2d00b3a32e6e0a6ea209dc4f3521" + integrity sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ== + stream-buffers@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= + dependencies: + duplexer "~0.1.1" + stream-http@^2.3.1: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" @@ -14282,6 +16642,15 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string.prototype.trim@^1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz#6014689baf5efaf106ad031a5fa45157666ed1bd" @@ -14354,6 +16723,20 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -14399,6 +16782,41 @@ style-value-types@4.1.1: hey-listen "^1.0.8" tslib "^1.10.0" +styled-components@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.3.tgz#312a3d9a549f4708f0fb0edc829eb34bde032743" + integrity sha512-++4iHwBM7ZN+x6DtPPWkCI4vdtwumQ+inA/DdAsqYd4SVgUKJie5vXyzotA00ttcFdQkCng7zc6grwlfIfw+lw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/traverse" "^7.4.5" + "@emotion/is-prop-valid" "^0.8.8" + "@emotion/stylis" "^0.8.4" + "@emotion/unitless" "^0.7.4" + babel-plugin-styled-components ">= 1.12.0" + css-to-react-native "^3.0.0" + hoist-non-react-statics "^3.0.0" + shallowequal "^1.1.0" + supports-color "^5.5.0" + +styled-system@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/styled-system/-/styled-system-5.1.5.tgz#e362d73e1dbb5641a2fd749a6eba1263dc85075e" + integrity sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A== + dependencies: + "@styled-system/background" "^5.1.2" + "@styled-system/border" "^5.1.5" + "@styled-system/color" "^5.1.2" + "@styled-system/core" "^5.1.2" + "@styled-system/flexbox" "^5.1.2" + "@styled-system/grid" "^5.1.2" + "@styled-system/layout" "^5.1.2" + "@styled-system/position" "^5.1.2" + "@styled-system/shadow" "^5.1.2" + "@styled-system/space" "^5.1.2" + "@styled-system/typography" "^5.1.2" + "@styled-system/variant" "^5.1.5" + object-assign "^4.1.1" + sucrase@^3.20.0: version "3.20.1" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.20.1.tgz#1c055e97d0fab2f9857f02461364075b3a4ab226" @@ -14416,7 +16834,66 @@ sudo-prompt@^9.0.0: resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw== -supports-color@^5.3.0: +suffix@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/suffix/-/suffix-0.1.1.tgz#cc58231646a0ef1102f79478ef3a9248fd9c842f" + integrity sha1-zFgjFkag7xEC95R47zqSSP2chC8= + +superagent-proxy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/superagent-proxy/-/superagent-proxy-3.0.0.tgz#e1a17ccba25883599e18d2974020fe83ee7d95d1" + integrity sha512-wAlRInOeDFyd9pyonrkJspdRAxdLrcsZ6aSnS+8+nu4x1aXbz6FWSTT9M6Ibze+eG60szlL7JA8wEIV7bPWuyQ== + dependencies: + debug "^4.3.2" + proxy-agent "^5.0.0" + +superagent@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-5.1.0.tgz#9ce4f38bee64d65a56166423b573222fa1b8f041" + integrity sha512-7V6JVx5N+eTL1MMqRBX0v0bG04UjrjAvvZJTF/VDH/SH2GjSLqlrcYepFlpTrXpm37aSY6h3GGVWGxXl/98TKA== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.2" + debug "^4.1.1" + fast-safe-stringify "^2.0.6" + form-data "^2.3.3" + formidable "^1.2.1" + methods "^1.1.2" + mime "^2.4.4" + qs "^6.7.0" + readable-stream "^3.4.0" + semver "^6.1.1" + +superagent@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-6.1.0.tgz#09f08807bc41108ef164cfb4be293cebd480f4a6" + integrity sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.2" + debug "^4.1.1" + fast-safe-stringify "^2.0.7" + form-data "^3.0.0" + formidable "^1.2.2" + methods "^1.1.2" + mime "^2.4.6" + qs "^6.9.4" + readable-stream "^3.6.0" + semver "^7.3.2" + +supports-color@8.1.1, supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -14437,13 +16914,6 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-hyperlinks@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" @@ -14494,6 +16964,27 @@ tail@^2.0.0: resolved "https://registry.yarnpkg.com/tail/-/tail-2.2.0.tgz#ef9a7f170c5a33bc0b3ca92a5d5fcd4748a77f46" integrity sha512-QqUMtWlnzArTvGyjVnAE5fAiXEm2Psvk/BlE7vWx2/dIEWMsAhcNPz7iW6WTiSM8h1fjtCkRMsaWBS1j6rpGBg== +tar-fs@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4, tar-stream@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + tar@^4.0.2: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" @@ -14519,6 +17010,13 @@ temp-dir@^1.0.0: resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= +temp-fs@^0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/temp-fs/-/temp-fs-0.9.9.tgz#8071730437870720e9431532fe2814364f8803d7" + integrity sha1-gHFzBDeHByDpQxUy/igUNk+IA9c= + dependencies: + rimraf "~2.5.2" + temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -14606,7 +17104,7 @@ through2@^2.0.1: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6: +through@2, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -14707,6 +17205,11 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -14731,6 +17234,11 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + truncate-utf8-bytes@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" @@ -14769,6 +17277,11 @@ tslib@^2.0.0, tslib@^2.0.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== +tslib@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + tsutils@^3.17.1, tsutils@^3.7.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -14867,16 +17380,21 @@ typedarray-to-buffer@3.1.5, typedarray-to-buffer@^3.1.2, typedarray-to-buffer@^3 dependencies: is-typedarray "^1.0.0" -typescript@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961" - integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg== +typescript@^4.6.3: + version "4.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" + integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== ua-parser-js@^0.7.18: version "0.7.25" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.25.tgz#67689fa263a87a52dabbc251ede89891f59156ce" integrity sha512-8NFExdfI24Ny8R3Vc6+uUytP/I7dpqk3JERlvxPWlrtx5YboqCgxAXYKPAifbPLV2zKbgmmPL53ufW7mUC/VOQ== +ua-parser-js@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.2.tgz#e2976c34dbfb30b15d2c300b2a53eac87c57a775" + integrity sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg== + uglify-es@^3.1.9: version "3.3.9" resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" @@ -14905,6 +17423,14 @@ unbox-primitive@^1.0.0: has-symbols "^1.0.0" which-boxed-primitive "^1.0.1" +unbzip2-stream@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + underscore@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" @@ -14915,6 +17441,11 @@ unicode-canonical-property-names-ecmascript@^1.0.4: resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + unicode-match-property-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" @@ -14923,25 +17454,33 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + unicode-property-aliases-ecmascript@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== -unimodules-app-loader@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/unimodules-app-loader/-/unimodules-app-loader-2.2.0.tgz#8f8543630ada0f9092ce95050d05738990d1f4ab" - integrity sha512-porQWVWu7meIrCJ+c+H7eJyeC2rHioLUZiv4UcOs33SAyUhR4X05tCC8NIOuQJsF08Fj3a0ck7HUsd5xq+LqKA== - -unimodules-task-manager-interface@~6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/unimodules-task-manager-interface/-/unimodules-task-manager-interface-6.2.0.tgz#e9e19ca5b28b2dfafa5768baf9da6c71bf6940d8" - integrity sha512-DrRVWF46TI93GbaDWAJ+bKd3vHjZq9pS8oJ6pZQN96qUTWkJ3yqa92yF118JxdGll+YtymxF/ZWCugBFMtISbA== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== union-value@^1.0.0: version "1.0.1" @@ -15015,6 +17554,14 @@ url-parse@^1.4.4: querystringify "^2.1.1" requires-port "^1.0.0" +url-parse@^1.4.7: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + url-set-query@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" @@ -15141,7 +17688,7 @@ uuid@^7.0.3: resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== -uuid@^8.3.0: +uuid@^8.0.0, uuid@^8.3.0: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -15197,6 +17744,14 @@ vm-browserify@^1.1.2: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +vm2@^3.9.8: + version "3.9.9" + resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.9.tgz#c0507bc5fbb99388fad837d228badaaeb499ddc5" + integrity sha512-xwTm7NLh/uOjARRBs8/95H0e8fT3Ukw5D/JJWhxMbhKzNh1Nu981jQKvkep9iKYNxzlVrdzD0mlBGkDKZWprlw== + dependencies: + acorn "^8.7.0" + acorn-walk "^8.2.0" + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -15505,6 +18060,59 @@ web3@^1.3.3: web3-shh "1.3.4" web3-utils "1.3.4" +webdriver@7.19.5: + version "7.19.5" + resolved "https://registry.yarnpkg.com/webdriver/-/webdriver-7.19.5.tgz#485db210517d44e2e572a5a53a3294afee87ca8e" + integrity sha512-kdOC6w2LSZO2zQ+sNQjHRP4CVQzo1C+g2EDz7g3czOQv2Oo8WqkVlMT9hIBiMLHQfh896gFh776GUCDnEd9emg== + dependencies: + "@types/node" "^17.0.4" + "@wdio/config" "7.19.5" + "@wdio/logger" "7.19.0" + "@wdio/protocols" "7.19.0" + "@wdio/types" "7.19.5" + "@wdio/utils" "7.19.5" + got "^11.0.2" + ky "^0.30.0" + lodash.merge "^4.6.1" + +webdriverio@7.19.5: + version "7.19.5" + resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-7.19.5.tgz#ba5edc75da6cea93da03bbe67b60e5d435b92269" + integrity sha512-FDq6ULiXFhAzIxQ+NI/GprYoouT5GUDhdXNJkMHYT6wBSC0shEtbpu8+ciAB7lqbsD/D9pADePtj+18+gEG0zA== + dependencies: + "@types/aria-query" "^5.0.0" + "@types/node" "^17.0.4" + "@wdio/config" "7.19.5" + "@wdio/logger" "7.19.0" + "@wdio/protocols" "7.19.0" + "@wdio/repl" "7.19.5" + "@wdio/types" "7.19.5" + "@wdio/utils" "7.19.5" + archiver "^5.0.0" + aria-query "^5.0.0" + css-shorthand-properties "^1.1.1" + css-value "^0.0.1" + devtools "7.19.5" + devtools-protocol "^0.0.982423" + fs-extra "^10.0.0" + grapheme-splitter "^1.0.2" + lodash.clonedeep "^4.5.0" + lodash.isobject "^3.0.2" + lodash.isplainobject "^4.0.6" + lodash.zip "^4.2.0" + minimatch "^5.0.0" + puppeteer-core "^13.1.3" + query-selector-shadow-dom "^1.0.0" + resq "^1.9.1" + rgb2hex "0.2.5" + serialize-error "^8.0.0" + webdriver "7.19.5" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -15549,6 +18157,14 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whatwg-url@^8.0.0: version "8.5.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.5.0.tgz#7752b8464fc0903fec89aa9846fc9efe07351fd3" @@ -15708,6 +18324,11 @@ ws@7.3.0: resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w== +ws@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + ws@^1.1.0, ws@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" @@ -15817,7 +18438,7 @@ xml-parse-from-string@^1.0.0: resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" integrity sha1-qQKekp09vN7RafPG4oI42VpdWig= -xml2js@^0.4.23, xml2js@^0.4.5: +xml2js@0.4.23, xml2js@^0.4.5: version "0.4.23" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== @@ -15857,16 +18478,16 @@ xmldom@0.1.x: resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== -xmldom@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.5.0.tgz#193cb96b84aa3486127ea6272c4596354cb4962e" - integrity sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA== - xmlhttprequest-ssl@~1.5.4: version "1.5.5" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= +xregexp@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" + integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= + xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -15904,7 +18525,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -15935,6 +18556,11 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== +yargs-parser@^21.0.0: + version "21.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== + yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" @@ -15998,6 +18624,19 @@ yargs@^16.0.3, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.0.0: + version "17.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.4.1.tgz#ebe23284207bb75cee7c408c33e722bfb27b5284" + integrity sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" @@ -16017,11 +18656,35 @@ yargs@^8.0.2: y18n "^3.2.1" yargs-parser "^7.0.0" +yarn-install@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yarn-install/-/yarn-install-1.0.0.tgz#57f45050b82efd57182b3973c54aa05cb5d25230" + integrity sha1-V/RQULgu/VcYKzlzxUqgXLXSUjA= + dependencies: + cac "^3.0.3" + chalk "^1.1.3" + cross-spawn "^4.0.2" + yarn@^1.22.4: version "1.22.10" resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.10.tgz#c99daa06257c80f8fa2c3f1490724e394c26b18c" integrity sha512-IanQGI9RRPAN87VGTF7zs2uxkSyQSrSPsju0COgbsKQOOXr5LtcVPeyXWgwVa0ywG3d8dg6kSYKGBuYK021qeA== +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yazl@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35" + integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== + dependencies: + buffer-crc32 "~0.2.3" + yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" @@ -16036,3 +18699,12 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zip-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" + integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^4.1.0" + readable-stream "^3.6.0"