From 037d6c47391886f32d683c7d71902b9c8781f2a0 Mon Sep 17 00:00:00 2001 From: Aldo Canepa Date: Tue, 23 Aug 2022 18:33:39 +0200 Subject: [PATCH 01/73] WIP: Use new API pattern B --- src/libs/actions/Policy.js | 98 +++++++++++++++------ src/pages/settings/InitialSettingsPage.js | 47 +++++++--- src/pages/workspace/WorkspaceInitialPage.js | 3 +- 3 files changed, 108 insertions(+), 40 deletions(-) diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index 9470ea25f4e..04145a9e85a 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -13,6 +13,7 @@ import ROUTES from '../../ROUTES'; import * as OptionsListUtils from '../OptionsListUtils'; import * as Report from './Report'; import * as Pusher from '../Pusher/pusher'; +import * as API from '../API'; const allPolicies = {}; Onyx.connect({ @@ -22,7 +23,7 @@ Onyx.connect({ return; } - allPolicies[key] = {...allPolicies[key], ...val}; + allPolicies[key] = val; }, }); let sessionEmail = ''; @@ -170,31 +171,63 @@ function createAndNavigate(name = '') { } /** - * Delete the policy + * Delete the workspace * - * @param {String} [policyID] - * @returns {Promise} + * @param {String} policyID */ -function deletePolicy(policyID) { - return DeprecatedAPI.Policy_Delete({policyID}) - .then((response) => { - if (response.jsonCode !== 200) { - // Show the user feedback - const errorMessage = Localize.translateLocal('workspace.common.growlMessageOnDeleteError'); - Growl.error(errorMessage, 5000); - return; - } - - Growl.show(Localize.translateLocal('workspace.common.growlMessageOnDelete'), CONST.GROWL.SUCCESS, 3000); - - // Removing the workspace data from Onyx as well - return Onyx.set(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, null); - }) - .then(() => Report.fetchAllReports(false)) - .then(() => { - Navigation.goBack(); - return Promise.resolve(); - }); +function deleteWorkspace(policyID) { + const optimisticData = [ + { + onyxMethod: 'merge', + key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, + value: { + 'pendingAction': 'delete', + }, + }, + ]; + + // We don't need success data since the push notification will update + // the onyxData for all connected clients. + const failureData = []; + const successData = []; + // const failureData = [ + // { + // onyxMethod: 'merge', + // key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, + // value: { + // 'pendingAction': null, + // 'errors': { + // : '', + // } + // }, + // }, + // ]; + + API.write('DeleteWorkspace', {policyID}, {optimisticData, successData, failureData}); + + // const optimisticData = [{ + // onyxMethod: CONST.ONYX.METHOD.MERGE, + // key: ONYXKEYS.ACCOUNT, + // value: {isLoading: true}, + // }]; + // const successData = [{ + // onyxMethod: CONST.ONYX.METHOD.MERGE, + // key: ONYXKEYS.ACCOUNT, + // value: { + // isLoading: false, + // message: Localize.translateLocal('resendValidationForm.linkHasBeenResent'), + // }, + // }]; + // const failureData = [{ + // onyxMethod: CONST.ONYX.METHOD.MERGE, + // key: ONYXKEYS.ACCOUNT, + // value: { + // isLoading: false, + // message: '', + // }, + // }]; + + // API.read('DeleteWorkspace', {policyID}, {optimisticData, successData, failureData}); } /** @@ -544,7 +577,7 @@ function subscribeToPolicyEvents() { * @param {String} policyID * @param {String} memberEmail */ -function clearDeleteMemberError(policyID, memberEmail) { + function clearDeleteMemberError(policyID, memberEmail) { Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY_MEMBER_LIST}${policyID}`, { [memberEmail]: { pendingAction: null, @@ -565,6 +598,18 @@ function clearAddMemberError(policyID, memberEmail) { }); } +/** + * Removes an error after trying to delete a workspace + * + * @param {String} policyID + */ +function clearDeleteWorkspaceError(policyID) { + Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, { + pendingAction: null, + errors: null, + }); +} + /** * Checks if we have any errors stored within the POLICY_MEMBER_LIST. Determines whether we should show a red brick road error or not * Data structure: {email: {role:'bla', errors: []}, email2: {role:'bla', errors: [{1231312313: 'Unable to do X'}]}, ...} @@ -586,7 +631,8 @@ export { update, setWorkspaceErrors, hideWorkspaceAlertMessage, - deletePolicy, + deleteWorkspace, + clearDeleteWorkspaceError, createAndNavigate, createAndGetPolicyList, setCustomUnit, diff --git a/src/pages/settings/InitialSettingsPage.js b/src/pages/settings/InitialSettingsPage.js index 785e0032271..e9bfed075ae 100755 --- a/src/pages/settings/InitialSettingsPage.js +++ b/src/pages/settings/InitialSettingsPage.js @@ -29,6 +29,7 @@ import policyMemberPropType from '../policyMemberPropType'; import * as PaymentMethods from '../../libs/actions/PaymentMethods'; import bankAccountPropTypes from '../../components/bankAccountPropTypes'; import cardPropTypes from '../../components/cardPropTypes'; +import OfflineWithFeedback from '../../components/OfflineWithFeedback'; const propTypes = { /* Onyx Props */ @@ -87,6 +88,20 @@ const defaultProps = { ...withCurrentUserPersonalDetailsDefaultProps, }; +/** + * Dismisses the errors on one item + * + * @param {string} policyID + * @param {string} pendingAction + */ +function dismissWorkspaceError(policyID, pendingAction) { + if (pendingAction === 'delete') { + Policy.clearDeleteWorkspaceError(policyID); + return; + } + throw new Error('Not implemented'); +} + const InitialSettingsPage = (props) => { // On the very first sign in or after clearing storage these // details will not be present on the first render so we'll just @@ -146,6 +161,9 @@ const InitialSettingsPage = (props) => { iconFill: themeColors.iconReversed, fallbackIcon: Expensicons.FallbackWorkspaceAvatar, brickRoadIndicator: Policy.hasPolicyMemberError(lodashGet(props.policyMembers, `${ONYXKEYS.COLLECTION.POLICY_MEMBER_LIST}${policy.id}`, {})) ? 'error' : null, + pendingAction: policy.pendingAction, + errors: policy.errors, + dismissError: () => dismissWorkspaceError(policy.id, policy.pendingAction), })) .value(); menuItems.push(...defaultMenuItems); @@ -190,20 +208,23 @@ const InitialSettingsPage = (props) => { {_.map(menuItems, (item, index) => { const keyTitle = item.translationKey ? props.translate(item.translationKey) : item.title; const isPaymentItem = item.translationKey === 'common.payments'; + const doNothing = () => {}; return ( - + + + ); })} diff --git a/src/pages/workspace/WorkspaceInitialPage.js b/src/pages/workspace/WorkspaceInitialPage.js index a4b086c3196..dbae6423d9f 100644 --- a/src/pages/workspace/WorkspaceInitialPage.js +++ b/src/pages/workspace/WorkspaceInitialPage.js @@ -70,8 +70,9 @@ class WorkspaceInitialPage extends React.Component { * Call the delete policy and hide the modal */ confirmDeleteAndHideModal() { - PolicyActions.deletePolicy(this.props.policy.id); + PolicyActions.deleteWorkspace(this.props.policy.id); this.toggleDeleteModal(false); + Navigation.navigate(ROUTES.SETTINGS); } render() { From f084a68e62a5a5bb8adf66568cb847b84c099109 Mon Sep 17 00:00:00 2001 From: Aldo Canepa Date: Wed, 24 Aug 2022 10:38:27 +0200 Subject: [PATCH 02/73] Add padding --- src/pages/settings/InitialSettingsPage.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pages/settings/InitialSettingsPage.js b/src/pages/settings/InitialSettingsPage.js index e9bfed075ae..235376c8387 100755 --- a/src/pages/settings/InitialSettingsPage.js +++ b/src/pages/settings/InitialSettingsPage.js @@ -210,7 +210,11 @@ const InitialSettingsPage = (props) => { const isPaymentItem = item.translationKey === 'common.payments'; const doNothing = () => {}; return ( - + Date: Thu, 25 Aug 2022 11:41:03 +0200 Subject: [PATCH 03/73] Correct menu item padding --- src/pages/settings/InitialSettingsPage.js | 2 +- src/styles/styles.js | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pages/settings/InitialSettingsPage.js b/src/pages/settings/InitialSettingsPage.js index 235376c8387..6ca169a77c8 100755 --- a/src/pages/settings/InitialSettingsPage.js +++ b/src/pages/settings/InitialSettingsPage.js @@ -211,7 +211,7 @@ const InitialSettingsPage = (props) => { const doNothing = () => {}; return ( diff --git a/src/styles/styles.js b/src/styles/styles.js index 36a4d7eaea4..109ebd5a462 100644 --- a/src/styles/styles.js +++ b/src/styles/styles.js @@ -2408,6 +2408,10 @@ const styles = { errorDot: { marginRight: 12, }, + menuItemErrorPadding: { + paddingLeft: 44, + paddingRight: 20, + } }, sidebarPopover: { From 75e635e22a51bd3e598397284af4d00e7ab67aa6 Mon Sep 17 00:00:00 2001 From: Aldo Canepa Date: Thu, 25 Aug 2022 18:30:24 +0200 Subject: [PATCH 04/73] Clear errors, fix key prop --- src/libs/actions/Policy.js | 16 ++-------------- src/pages/settings/InitialSettingsPage.js | 2 +- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index 04145a9e85a..816146b74f7 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -181,7 +181,8 @@ function deleteWorkspace(policyID) { onyxMethod: 'merge', key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, value: { - 'pendingAction': 'delete', + pendingAction: 'delete', + errors: null, }, }, ]; @@ -190,19 +191,6 @@ function deleteWorkspace(policyID) { // the onyxData for all connected clients. const failureData = []; const successData = []; - // const failureData = [ - // { - // onyxMethod: 'merge', - // key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, - // value: { - // 'pendingAction': null, - // 'errors': { - // : '', - // } - // }, - // }, - // ]; - API.write('DeleteWorkspace', {policyID}, {optimisticData, successData, failureData}); // const optimisticData = [{ diff --git a/src/pages/settings/InitialSettingsPage.js b/src/pages/settings/InitialSettingsPage.js index 6ca169a77c8..9281a4b89e7 100755 --- a/src/pages/settings/InitialSettingsPage.js +++ b/src/pages/settings/InitialSettingsPage.js @@ -211,12 +211,12 @@ const InitialSettingsPage = (props) => { const doNothing = () => {}; return ( Date: Fri, 26 Aug 2022 10:08:40 +0200 Subject: [PATCH 05/73] Disable the workspace menu item while the delete request has not resolved --- src/pages/settings/InitialSettingsPage.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/settings/InitialSettingsPage.js b/src/pages/settings/InitialSettingsPage.js index 9281a4b89e7..93183bffe87 100755 --- a/src/pages/settings/InitialSettingsPage.js +++ b/src/pages/settings/InitialSettingsPage.js @@ -164,6 +164,7 @@ const InitialSettingsPage = (props) => { pendingAction: policy.pendingAction, errors: policy.errors, dismissError: () => dismissWorkspaceError(policy.id, policy.pendingAction), + disabled: policy.pendingAction === 'delete' && _.isEmpty(policy.errors), })) .value(); menuItems.push(...defaultMenuItems); @@ -217,6 +218,7 @@ const InitialSettingsPage = (props) => { pendingAction={item.pendingAction} errors={item.errors}> Date: Fri, 26 Aug 2022 10:09:39 +0200 Subject: [PATCH 06/73] Remove comments --- src/libs/actions/Policy.js | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index 816146b74f7..fd096eb08bc 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -192,30 +192,6 @@ function deleteWorkspace(policyID) { const failureData = []; const successData = []; API.write('DeleteWorkspace', {policyID}, {optimisticData, successData, failureData}); - - // const optimisticData = [{ - // onyxMethod: CONST.ONYX.METHOD.MERGE, - // key: ONYXKEYS.ACCOUNT, - // value: {isLoading: true}, - // }]; - // const successData = [{ - // onyxMethod: CONST.ONYX.METHOD.MERGE, - // key: ONYXKEYS.ACCOUNT, - // value: { - // isLoading: false, - // message: Localize.translateLocal('resendValidationForm.linkHasBeenResent'), - // }, - // }]; - // const failureData = [{ - // onyxMethod: CONST.ONYX.METHOD.MERGE, - // key: ONYXKEYS.ACCOUNT, - // value: { - // isLoading: false, - // message: '', - // }, - // }]; - - // API.read('DeleteWorkspace', {policyID}, {optimisticData, successData, failureData}); } /** From 79be75b24a067836f9de3ffeb8ccfe291be849a8 Mon Sep 17 00:00:00 2001 From: Aldo Canepa Date: Fri, 26 Aug 2022 10:10:56 +0200 Subject: [PATCH 07/73] Remove whitespace --- src/libs/actions/Policy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index fd096eb08bc..98e6a17d9bf 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -541,7 +541,7 @@ function subscribeToPolicyEvents() { * @param {String} policyID * @param {String} memberEmail */ - function clearDeleteMemberError(policyID, memberEmail) { +function clearDeleteMemberError(policyID, memberEmail) { Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY_MEMBER_LIST}${policyID}`, { [memberEmail]: { pendingAction: null, From ffcb9f86181e380cbeafafd22267677b28ccc992 Mon Sep 17 00:00:00 2001 From: Aldo Canepa Date: Tue, 30 Aug 2022 00:55:51 +0200 Subject: [PATCH 08/73] Style --- src/libs/actions/Policy.js | 4 ++-- src/pages/settings/InitialSettingsPage.js | 11 ++++++----- src/styles/styles.js | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index c978fbc14db..65dc2a23e57 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -2,6 +2,7 @@ import _ from 'underscore'; import Onyx from 'react-native-onyx'; import lodashGet from 'lodash/get'; import * as DeprecatedAPI from '../deprecatedAPI'; +import * as API from '../API'; import ONYXKEYS from '../../ONYXKEYS'; import * as PersonalDetails from './PersonalDetails'; import Growl from '../Growl'; @@ -13,7 +14,6 @@ import ROUTES from '../../ROUTES'; import * as OptionsListUtils from '../OptionsListUtils'; import * as Report from './Report'; import * as Pusher from '../Pusher/pusher'; -import * as API from '../API'; import DateUtils from '../DateUtils'; const allPolicies = {}; @@ -173,7 +173,7 @@ function deleteWorkspace(policyID) { }, ]; - // We don't need success data since the push notification will update + // We don't need success data since the push notification will update // the onyxData for all connected clients. const failureData = []; const successData = []; diff --git a/src/pages/settings/InitialSettingsPage.js b/src/pages/settings/InitialSettingsPage.js index 4a506805229..02c08728314 100755 --- a/src/pages/settings/InitialSettingsPage.js +++ b/src/pages/settings/InitialSettingsPage.js @@ -8,6 +8,7 @@ import styles from '../../styles/styles'; import themeColors from '../../styles/themes/default'; import Text from '../../components/Text'; import * as Session from '../../libs/actions/Session'; +import * as Policy from '../../libs/actions/Policy'; import ONYXKEYS from '../../ONYXKEYS'; import Tooltip from '../../components/Tooltip'; import Avatar from '../../components/Avatar'; @@ -94,7 +95,7 @@ const defaultProps = { * @param {string} policyID * @param {string} pendingAction */ - function dismissWorkspaceError(policyID, pendingAction) { +function dismissWorkspaceError(policyID, pendingAction) { if (pendingAction === 'delete') { Policy.clearDeleteWorkspaceError(policyID); return; @@ -205,7 +206,6 @@ class InitialSettingsPage extends React.Component { if (_.isEmpty(this.props.currentUserPersonalDetails)) { return null; } - const doNothing = () => {}; return ( {})} pendingAction={item.pendingAction} - errors={item.errors}> + errors={item.errors} + > Date: Fri, 2 Sep 2022 18:01:44 +0200 Subject: [PATCH 09/73] Fix error indicator for workspace delete --- src/libs/PolicyUtils.js | 2 +- src/pages/settings/InitialSettingsPage.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libs/PolicyUtils.js b/src/libs/PolicyUtils.js index 7dc18f3b395..3def54c19f9 100644 --- a/src/libs/PolicyUtils.js +++ b/src/libs/PolicyUtils.js @@ -48,7 +48,7 @@ function hasCustomUnitsError(policy) { */ function getPolicyBrickRoadIndicatorStatus(policy, policyMembers) { const policyMemberList = lodashGet(policyMembers, `${ONYXKEYS.COLLECTION.POLICY_MEMBER_LIST}${policy.id}`, {}); - if (hasPolicyMemberError(policyMemberList) || hasPolicyError(policy) || hasCustomUnitsError(policy)) { + if (hasPolicyMemberError(policyMemberList) || hasCustomUnitsError(policy)) { return CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR; } return ''; diff --git a/src/pages/settings/InitialSettingsPage.js b/src/pages/settings/InitialSettingsPage.js index f6ed93b6fee..470fe443da0 100755 --- a/src/pages/settings/InitialSettingsPage.js +++ b/src/pages/settings/InitialSettingsPage.js @@ -192,7 +192,7 @@ class InitialSettingsPage extends React.Component { isPolicy: true, errors: policy.errors, dismissError: () => dismissWorkspaceError(policy.id, policy.pendingAction), - disabled: policy.pendingAction === 'delete' && _.isEmpty(policy.errors), + disabled: policy.pendingAction === 'delete', })) .value(); menuItems.push(...this.getDefaultMenuItems()); @@ -224,6 +224,7 @@ class InitialSettingsPage extends React.Component { badgeText={this.getWalletBalance(isPaymentItem)} fallbackIcon={item.fallbackIcon} brickRoadIndicator={item.brickRoadIndicator} + disabled={item.disabled} /> ); From 7407995b3bed6bc02840eb478cda4da7a56877fa Mon Sep 17 00:00:00 2001 From: Aldo Canepa Date: Fri, 2 Sep 2022 18:33:27 +0200 Subject: [PATCH 10/73] Use const for 'delete' pending action --- src/libs/actions/Policy.js | 2 +- src/pages/settings/InitialSettingsPage.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index 94fefa48134..45676838001 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -174,7 +174,7 @@ function deleteWorkspace(policyID) { onyxMethod: 'merge', key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, value: { - pendingAction: 'delete', + pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, errors: null, }, }, diff --git a/src/pages/settings/InitialSettingsPage.js b/src/pages/settings/InitialSettingsPage.js index 470fe443da0..e10aeb056d1 100755 --- a/src/pages/settings/InitialSettingsPage.js +++ b/src/pages/settings/InitialSettingsPage.js @@ -192,7 +192,7 @@ class InitialSettingsPage extends React.Component { isPolicy: true, errors: policy.errors, dismissError: () => dismissWorkspaceError(policy.id, policy.pendingAction), - disabled: policy.pendingAction === 'delete', + disabled: policy.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, })) .value(); menuItems.push(...this.getDefaultMenuItems()); From f740a07602a819e539a108a7c126a9269b545ae4 Mon Sep 17 00:00:00 2001 From: Aldo Canepa Date: Sat, 3 Sep 2022 20:48:34 +0100 Subject: [PATCH 11/73] Use CONST! --- src/libs/actions/Policy.js | 2 +- src/pages/settings/InitialSettingsPage.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index 45676838001..641eb40d6e4 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -171,7 +171,7 @@ function createAndNavigate(name = '') { function deleteWorkspace(policyID) { const optimisticData = [ { - onyxMethod: 'merge', + onyxMethod: CONST.ONYX.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, value: { pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, diff --git a/src/pages/settings/InitialSettingsPage.js b/src/pages/settings/InitialSettingsPage.js index e10aeb056d1..f58556cd536 100755 --- a/src/pages/settings/InitialSettingsPage.js +++ b/src/pages/settings/InitialSettingsPage.js @@ -99,7 +99,7 @@ const defaultProps = { * @param {string} pendingAction */ function dismissWorkspaceError(policyID, pendingAction) { - if (pendingAction === 'delete') { + if (pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE) { Policy.clearDeleteWorkspaceError(policyID); return; } From 09006161e090497f61a704548e44e9bd87c7b1a4 Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 7 Sep 2022 10:19:23 +0100 Subject: [PATCH 12/73] Upgrade RN to 0.70.1 --- .gitignore | 1 + android/app/build.gradle | 37 +- android/app/src/main/jni/Android.mk | 48 - android/app/src/main/jni/CMakeLists.txt | 8 + .../jni/MainApplicationModuleProvider.cpp | 26 +- .../main/jni/MainApplicationModuleProvider.h | 2 +- ...nApplicationTurboModuleManagerDelegate.cpp | 8 +- ...ainApplicationTurboModuleManagerDelegate.h | 8 +- .../src/main/jni/MainComponentsRegistry.cpp | 4 + android/build.gradle | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- ios/NewExpensify.xcodeproj/project.pbxproj | 2 - .../contents.xcworkspacedata | 10 - ios/Podfile | 7 +- package-lock.json | 1445 ++++++++--------- package.json | 14 +- 16 files changed, 758 insertions(+), 868 deletions(-) delete mode 100644 android/app/src/main/jni/Android.mk create mode 100644 android/app/src/main/jni/CMakeLists.txt delete mode 100644 ios/NewExpensify.xcworkspace/contents.xcworkspacedata diff --git a/.gitignore b/.gitignore index 8b43bcaf07d..4b971429f2b 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ local.properties *.iml android/*.hprof android/app/src/main/java/com/expensify/chat/generated/ +.cxx/ # Vscode .vscode diff --git a/android/app/build.gradle b/android/app/build.gradle index d2fdd9f36df..aafa94c6c55 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -3,6 +3,7 @@ apply plugin: "com.google.firebase.firebase-perf" apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" import com.android.build.OutputFile +import org.apache.tools.ant.taskdefs.condition.Os /** * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets @@ -160,22 +161,14 @@ android { buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() if (isNewArchitectureEnabled()) { - // We configure the NDK build only if you decide to opt-in for the New Architecture. + // We configure the CMake build only if you decide to opt-in for the New Architecture. externalNativeBuild { - ndkBuild { - arguments "APP_PLATFORM=android-21", - "APP_STL=c++_shared", - "NDK_TOOLCHAIN_VERSION=clang", - "GENERATED_SRC_DIR=$buildDir/generated/source", - "PROJECT_BUILD_DIR=$buildDir", - "REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid", - "REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build", - "NODE_MODULES_DIR=$rootDir/../node_modules" - cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1" - cppFlags "-std=c++17" - // Make sure this target name is the same you specify inside the - // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable. - targets "rndiffapp_appmodules" + cmake { + arguments "-DPROJECT_BUILD_DIR=$buildDir", + "-DREACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid", + "-DREACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build", + "-DNODE_MODULES_DIR=$rootDir/../node_modules", + "-DANDROID_STL=c++_shared" } } if (!enableSeparateBuildPerCPUArchitecture) { @@ -189,8 +182,8 @@ android { if (isNewArchitectureEnabled()) { // We configure the NDK build only if you decide to opt-in for the New Architecture. externalNativeBuild { - ndkBuild { - path "$projectDir/src/main/jni/Android.mk" + cmake { + path "$projectDir/src/main/jni/CMakeLists.txt" } } def reactAndroidProjectDir = project(':ReactAndroid').projectDir @@ -211,15 +204,15 @@ android { preDebugBuild.dependsOn(packageReactNdkDebugLibs) preReleaseBuild.dependsOn(packageReactNdkReleaseLibs) // Due to a bug inside AGP, we have to explicitly set a dependency - // between configureNdkBuild* tasks and the preBuild tasks. + // between configureCMakeDebug* tasks and the preBuild tasks. // This can be removed once this is solved: https://issuetracker.google.com/issues/207403732 - configureNdkBuildRelease.dependsOn(preReleaseBuild) - configureNdkBuildDebug.dependsOn(preDebugBuild) + configureCMakeRelWithDebInfo.dependsOn(preReleaseBuild) + configureCMakeDebug.dependsOn(preDebugBuild) reactNativeArchitectures().each { architecture -> - tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure { + tasks.findByName("configureCMakeDebug[${architecture}]")?.configure { dependsOn("preDebugBuild") } - tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure { + tasks.findByName("configureCMakeRelWithDebInfo[${architecture}]")?.configure { dependsOn("preReleaseBuild") } } diff --git a/android/app/src/main/jni/Android.mk b/android/app/src/main/jni/Android.mk deleted file mode 100644 index 842579d5ed9..00000000000 --- a/android/app/src/main/jni/Android.mk +++ /dev/null @@ -1,48 +0,0 @@ -THIS_DIR := $(call my-dir) - -include $(REACT_ANDROID_DIR)/Android-prebuilt.mk - -# If you wish to add a custom TurboModule or Fabric component in your app you -# will have to include the following autogenerated makefile. -# include $(GENERATED_SRC_DIR)/codegen/jni/Android.mk -include $(CLEAR_VARS) - -LOCAL_PATH := $(THIS_DIR) - -# You can customize the name of your application .so file here. -LOCAL_MODULE := rndiffapp_appmodules - -LOCAL_C_INCLUDES := $(LOCAL_PATH) -LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) -LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) - -# If you wish to add a custom TurboModule or Fabric component in your app you -# will have to uncomment those lines to include the generated source -# files from the codegen (placed in $(GENERATED_SRC_DIR)/codegen/jni) -# -# LOCAL_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni -# LOCAL_SRC_FILES += $(wildcard $(GENERATED_SRC_DIR)/codegen/jni/*.cpp) -# LOCAL_EXPORT_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni - -# Here you should add any native library you wish to depend on. -LOCAL_SHARED_LIBRARIES := \ - libfabricjni \ - libfbjni \ - libfolly_runtime \ - libglog \ - libjsi \ - libreact_codegen_rncore \ - libreact_debug \ - libreact_nativemodule_core \ - libreact_render_componentregistry \ - libreact_render_core \ - libreact_render_debug \ - libreact_render_graphics \ - librrc_view \ - libruntimeexecutor \ - libturbomodulejsijni \ - libyoga - -LOCAL_CFLAGS := -DLOG_TAG=\"ReactNative\" -fexceptions -frtti -std=c++17 -Wall - -include $(BUILD_SHARED_LIBRARY) diff --git a/android/app/src/main/jni/CMakeLists.txt b/android/app/src/main/jni/CMakeLists.txt new file mode 100644 index 00000000000..2cca92b30bc --- /dev/null +++ b/android/app/src/main/jni/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.13) + +# Define the library name here. +project(newexpensify_appmodules) + +# This file includes all the necessary to let you build your application with the New Architecture. +include(${REACT_ANDROID_DIR}/cmake-utils/ReactNative-application.cmake) + diff --git a/android/app/src/main/jni/MainApplicationModuleProvider.cpp b/android/app/src/main/jni/MainApplicationModuleProvider.cpp index 0ac23cc6263..9dc890e7c8e 100644 --- a/android/app/src/main/jni/MainApplicationModuleProvider.cpp +++ b/android/app/src/main/jni/MainApplicationModuleProvider.cpp @@ -8,16 +8,22 @@ namespace react { std::shared_ptr MainApplicationModuleProvider( const std::string moduleName, const JavaTurboModule::InitParams ¶ms) { - // Here you can provide your own module provider for TurboModules coming from - // either your application or from external libraries. The approach to follow - // is similar to the following (for a library called `samplelibrary`: - // - // auto module = samplelibrary_ModuleProvider(moduleName, params); - // if (module != nullptr) { - // return module; - // } - // return rncore_ModuleProvider(moduleName, params); - return rncore_ModuleProvider(moduleName, params); + // Here you can provide your own module provider for TurboModules coming from + // either your application or from external libraries. The approach to follow + // is similar to the following (for a library called `samplelibrary`: + // + // auto module = samplelibrary_ModuleProvider(moduleName, params); + // if (module != nullptr) { + // return module; + // } + // return rncore_ModuleProvider(moduleName, params); + return rncore_ModuleProvider(moduleName, params); + + // Module providers autolinked by RN CLI + auto rncli_module = rncli_ModuleProvider(moduleName, params); + if (rncli_module != nullptr) { + return rncli_module; + } } } // namespace react diff --git a/android/app/src/main/jni/MainApplicationModuleProvider.h b/android/app/src/main/jni/MainApplicationModuleProvider.h index 0fa43fa69ad..b38ccf53fd4 100644 --- a/android/app/src/main/jni/MainApplicationModuleProvider.h +++ b/android/app/src/main/jni/MainApplicationModuleProvider.h @@ -9,7 +9,7 @@ namespace facebook { namespace react { std::shared_ptr MainApplicationModuleProvider( - const std::string moduleName, + const std::string &moduleName, const JavaTurboModule::InitParams ¶ms); } // namespace react diff --git a/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp index dbbdc3d1320..5fd688c509d 100644 --- a/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp +++ b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp @@ -22,21 +22,21 @@ void MainApplicationTurboModuleManagerDelegate::registerNatives() { std::shared_ptr MainApplicationTurboModuleManagerDelegate::getTurboModule( - const std::string name, - const std::shared_ptr jsInvoker) { + const std::string &name, + const std::shared_ptr &jsInvoker) { // Not implemented yet: provide pure-C++ NativeModules here. return nullptr; } std::shared_ptr MainApplicationTurboModuleManagerDelegate::getTurboModule( - const std::string name, + const std::string &name, const JavaTurboModule::InitParams ¶ms) { return MainApplicationModuleProvider(name, params); } bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule( - std::string name) { + const std::string &name) { return getTurboModule(name, nullptr) != nullptr || getTurboModule(name, {.moduleName = name}) != nullptr; } diff --git a/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h index 2dc0d8f514b..73506f4c2f6 100644 --- a/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h +++ b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h @@ -21,17 +21,17 @@ class MainApplicationTurboModuleManagerDelegate static void registerNatives(); std::shared_ptr getTurboModule( - const std::string name, - const std::shared_ptr jsInvoker) override; + const std::string &name, + const std::shared_ptr &jsInvoker) override; std::shared_ptr getTurboModule( - const std::string name, + const std::string &name, const JavaTurboModule::InitParams ¶ms) override; /** * Test-only method. Allows user to verify whether a TurboModule can be * created by instances of this class. */ - bool canCreateTurboModule(std::string name); + bool canCreateTurboModule(const std::string &name); }; } // namespace react diff --git a/android/app/src/main/jni/MainComponentsRegistry.cpp b/android/app/src/main/jni/MainComponentsRegistry.cpp index 8f7edffd642..54f598a486a 100644 --- a/android/app/src/main/jni/MainComponentsRegistry.cpp +++ b/android/app/src/main/jni/MainComponentsRegistry.cpp @@ -4,6 +4,7 @@ #include #include #include +#include namespace facebook { namespace react { @@ -14,6 +15,9 @@ std::shared_ptr MainComponentsRegistry::sharedProviderRegistry() { auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry(); + // Autolinked providers registered by RN CLI + rncli_registerProviders(providerRegistry); + // Custom Fabric Components go here. You can register custom // components coming from your App or from 3rd party libraries here. // diff --git a/android/build.gradle b/android/build.gradle index 314e54a49cb..bf4d0debde6 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,5 +1,3 @@ -import org.apache.tools.ant.taskdefs.condition.Os - // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { @@ -28,7 +26,7 @@ buildscript { mavenCentral() } dependencies { - classpath("com.android.tools.build:gradle:7.1.1") + classpath("com.android.tools.build:gradle:7.2.1") classpath("com.facebook.react:react-native-gradle-plugin") classpath("de.undercouch:gradle-download-task:5.0.1") classpath("com.google.gms:google-services:4.3.4") diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 669386b870a..8fad3f5a98b 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index 26cbef9636e..4e6d61d6afe 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -775,7 +775,6 @@ ); MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; }; name = Debug; @@ -829,7 +828,6 @@ "\"$(inherited)\"", ); MTL_ENABLE_DEBUG_INFO = NO; - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; diff --git a/ios/NewExpensify.xcworkspace/contents.xcworkspacedata b/ios/NewExpensify.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index bf66f1bed43..00000000000 --- a/ios/NewExpensify.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/ios/Podfile b/ios/Podfile index 6a8fe4ea737..65f93333301 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -37,7 +37,12 @@ target 'NewExpensify' do use_flipper!() post_install do |installer| - react_native_post_install(installer) + react_native_post_install( + installer, + # Set `mac_catalyst_enabled` to `true` in order to apply patches + # necessary for Mac Catalyst builds + :mac_catalyst_enabled => false + ) __apply_Xcode_12_5_M1_post_install_workaround(installer) installer.pods_project.build_configurations.each do |config| diff --git a/package-lock.json b/package-lock.json index 6d95f5b4b83..f5316164607 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,9 +16,9 @@ "@formatjs/intl-numberformat": "^6.2.5", "@formatjs/intl-pluralrules": "^4.0.13", "@oguzhnatly/react-native-image-manipulator": "github:Expensify/react-native-image-manipulator#c5f654fc9d0ad7cc5b89d50b34ecf8b0e3f4d050", - "@onfido/react-native-sdk": "github:Expensify/react-native-sdk#5d36f3128c4798a767782c8bc565ace30308edba", + "@onfido/react-native-sdk": "github:Expensify/react-native-sdk#d70947f263b2e59899d82f8d1ef3841d053927ff", "@pieter-pot/react-native-fast-image": "8.5.11", - "@react-native-async-storage/async-storage": "^1.17.7", + "@react-native-async-storage/async-storage": "^1.17.10", "@react-native-community/cameraroll": "git+https://github.com/react-native-cameraroll/react-native-cameraroll.git#3f0aed96db68e134f199171c7b06c1b4d6cb382b", "@react-native-community/clipboard": "^1.5.1", "@react-native-community/datetimepicker": "^3.5.2", @@ -52,11 +52,11 @@ "process": "^0.11.10", "prop-types": "^15.7.2", "pusher-js": "^7.0.6", - "react": "18.0.0", + "react": "18.2.0", "react-collapse": "^5.1.0", "react-content-loader": "^6.1.0", - "react-dom": "18.0.0", - "react-native": "npm:@expensify/react-native@0.69.4", + "react-dom": "18.2.0", + "react-native": "npm:@expensify/react-native@0.70.1", "react-native-blob-util": "^0.16.2", "react-native-collapsible": "^1.6.0", "react-native-config": "^1.4.5", @@ -140,7 +140,7 @@ "jest": "^26.6.3", "jest-circus": "^26.6.3", "jest-cli": "^26.6.3", - "metro-react-native-babel-preset": "^0.71.3", + "metro-react-native-babel-preset": "^0.72.1", "mock-fs": "^4.13.0", "portfinder": "^1.0.28", "pusher-js-mock": "^0.3.3", @@ -148,7 +148,7 @@ "react-native-flipper": "https://gitpkg.now.sh/facebook/flipper/react-native/react-native-flipper?9cacc9b59402550eae866e0e81e5f0c2f8203e6b", "react-native-performance-flipper-reporter": "^2.0.0", "react-native-svg-transformer": "^0.14.3", - "react-test-renderer": "18.0.0", + "react-test-renderer": "18.1.0", "semver": "^7.3.4", "style-loader": "^2.0.0", "wait-port": "^0.2.9", @@ -4154,11 +4154,11 @@ }, "node_modules/@onfido/react-native-sdk": { "version": "5.4.0", - "resolved": "git+ssh://git@github.com/Expensify/react-native-sdk.git#5d36f3128c4798a767782c8bc565ace30308edba", - "integrity": "sha512-85lYvaG+fj2b4l6WON+7DUV29CCNkB8lP7QaRq80wzK/78e1m/gY4TJmMdhfdDCjLY6RK42bpU3CpyV7wuSz/g==", + "resolved": "git+ssh://git@github.com/Expensify/react-native-sdk.git#d70947f263b2e59899d82f8d1ef3841d053927ff", + "integrity": "sha512-xqQ9ERZhnJPkWVaaPBaoeBQ8UMHVy/cCPxEzow5rBuPuzmA1KYvrbu1FUqTMriUhVnLFR57TDCyZR8s/+u/eRg==", "license": "MIT", "peerDependencies": { - "react": ">=16.8.1 <=18.0.x", + "react": ">=16.8.1 <=18.x.x", "react-native": ">=0.60.0-rc.0 <1.0.x" } }, @@ -4243,14 +4243,14 @@ "dev": true }, "node_modules/@react-native-async-storage/async-storage": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.17.9.tgz", - "integrity": "sha512-HKhMvjpA5/YzNMkcY3qeWLdTtUrtJe243knHNNYe1c0IplX69hZyiw7DjFwAgxPG9+YvzHDHliqPV+mBNOv+cQ==", + "version": "1.17.10", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.17.10.tgz", + "integrity": "sha512-KrR021BmBLsA0TT1AAsfH16bHYy0MSbhdAeBAqpriak3GS1T2alFcdTUvn13p0ZW6FKRD6Bd3ryU2zhU/IYYJQ==", "dependencies": { "merge-options": "^3.0.4" }, "peerDependencies": { - "react-native": "^0.0.0-0 || 0.60 - 0.69 || 1000.0.0" + "react-native": "^0.0.0-0 || 0.60 - 0.70 || 1000.0.0" } }, "node_modules/@react-native-community/cameraroll": { @@ -4267,28 +4267,25 @@ } }, "node_modules/@react-native-community/cli": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-8.0.6.tgz", - "integrity": "sha512-E36hU/if3quQCfJHGWVkpsCnwtByRCwORuAX0r6yr1ebKktpKeEO49zY9PAu/Z1gfyxCtgluXY0HfRxjKRFXTg==", - "dependencies": { - "@react-native-community/cli-clean": "^8.0.4", - "@react-native-community/cli-config": "^8.0.6", - "@react-native-community/cli-debugger-ui": "^8.0.0", - "@react-native-community/cli-doctor": "^8.0.6", - "@react-native-community/cli-hermes": "^8.0.5", - "@react-native-community/cli-plugin-metro": "^8.0.4", - "@react-native-community/cli-server-api": "^8.0.4", - "@react-native-community/cli-tools": "^8.0.4", - "@react-native-community/cli-types": "^8.0.0", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-9.0.0.tgz", + "integrity": "sha512-PHt4aPMw3TP/QSaFvlUjfcCniEjz7egXamIMNxNVdUsSr2JhDr6W0l+CflpRMU2ZYlb+79o8lXHWAo38drJ0ow==", + "dependencies": { + "@react-native-community/cli-clean": "^9.0.0", + "@react-native-community/cli-config": "^9.0.0", + "@react-native-community/cli-debugger-ui": "^9.0.0", + "@react-native-community/cli-doctor": "^9.0.0", + "@react-native-community/cli-hermes": "^9.0.0", + "@react-native-community/cli-plugin-metro": "^9.0.0", + "@react-native-community/cli-server-api": "^9.0.0", + "@react-native-community/cli-tools": "^9.0.0", + "@react-native-community/cli-types": "^9.0.0", "chalk": "^4.1.2", - "commander": "^2.19.0", + "commander": "^9.4.0", "execa": "^1.0.0", "find-up": "^4.1.0", "fs-extra": "^8.1.0", "graceful-fs": "^4.1.3", - "leven": "^3.1.0", - "lodash": "^4.17.15", - "minimist": "^1.2.0", "prompts": "^2.4.0", "semver": "^6.3.0" }, @@ -4296,18 +4293,15 @@ "react-native": "build/bin.js" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "react-native": "*" + "node": ">=14" } }, "node_modules/@react-native-community/cli-clean": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-8.0.4.tgz", - "integrity": "sha512-IwS1M1NHg6+qL8PThZYMSIMYbZ6Zbx+lIck9PLBskbosFo24M3lCOflOl++Bggjakp6mR+sRXxLMexid/GeOsQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-9.0.0.tgz", + "integrity": "sha512-PaSz11fdSr5YI4YPl/auPdk7UCJaKFsH3gyFm8fKHqry2iPYQ3v3K8/FccVzmGbHgrvOcgAoWyhdVaFznXSp7A==", "dependencies": { - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-tools": "^9.0.0", "chalk": "^4.1.2", "execa": "^1.0.0", "prompts": "^2.4.0" @@ -4486,11 +4480,11 @@ } }, "node_modules/@react-native-community/cli-config": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-8.0.6.tgz", - "integrity": "sha512-mjVpVvdh8AviiO8xtqeX+BkjqE//NMDnISwsLWSJUfNCwTAPmdR8PGbhgP5O4hWHyJ3WkepTopl0ya7Tfi3ifw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-9.0.0.tgz", + "integrity": "sha512-f61VjBZP/GoD1wwYdz4Y8lQeRpUwEtc/vgWSP6FDlsmGjCh0qtS7k2joEq7fJGStTC9xSl7weEx0+mo4yj3oUA==", "dependencies": { - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-tools": "^9.0.0", "cosmiconfig": "^5.1.0", "deepmerge": "^3.2.0", "glob": "^7.1.3", @@ -4552,21 +4546,21 @@ } }, "node_modules/@react-native-community/cli-debugger-ui": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-8.0.0.tgz", - "integrity": "sha512-u2jq06GZwZ9sRERzd9FIgpW6yv4YOW4zz7Ym/B8eSzviLmy3yI/8mxJtvlGW+J8lBsfMcQoqJpqI6Rl1nZy9yQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-9.0.0.tgz", + "integrity": "sha512-7hH05ZwU9Tp0yS6xJW0bqcZPVt0YCK7gwj7gnRu1jDNN2kughf6Lg0Ys29rAvtZ7VO1PK5c1O+zs7yFnylQDUA==", "dependencies": { "serve-static": "^1.13.1" } }, "node_modules/@react-native-community/cli-doctor": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-8.0.6.tgz", - "integrity": "sha512-ZQqyT9mJMVeFEVIwj8rbDYGCA2xXjJfsQjWk2iTRZ1CFHfhPSUuUiG8r6mJmTinAP9t+wYcbbIYzNgdSUKnDMw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-9.0.0.tgz", + "integrity": "sha512-W5Z0V+vaOM5hcbOUGakhXjYAa4qrH4XVEw4wnpmVb+2Qme0Cwdf9pH4wdGXsCz2cu2CWQu6DfxB6qbDFR5+HiQ==", "dependencies": { - "@react-native-community/cli-config": "^8.0.6", - "@react-native-community/cli-platform-ios": "^8.0.6", - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-config": "^9.0.0", + "@react-native-community/cli-platform-ios": "^9.0.0", + "@react-native-community/cli-tools": "^9.0.0", "chalk": "^4.1.2", "command-exists": "^1.2.8", "envinfo": "^7.7.2", @@ -4779,12 +4773,12 @@ } }, "node_modules/@react-native-community/cli-hermes": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-8.0.5.tgz", - "integrity": "sha512-Zm0wM6SfgYAEX1kfJ1QBvTayabvh79GzmjHyuSnEROVNPbl4PeCG4WFbwy489tGwOP9Qx9fMT5tRIFCD8bp6/g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-9.0.0.tgz", + "integrity": "sha512-wdv8coZ2Ptw0QQ24M8oKYsncrdIjCXIOb4d2lFp5fFmWaEbL05e8zYOavS/WSMBHwsTKiz6wCxhRYcOcX9ysFA==", "dependencies": { - "@react-native-community/cli-platform-android": "^8.0.5", - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-platform-android": "^9.0.0", + "@react-native-community/cli-tools": "^9.0.0", "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6", "ip": "^1.1.5" @@ -4860,17 +4854,15 @@ } }, "node_modules/@react-native-community/cli-platform-android": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-8.0.5.tgz", - "integrity": "sha512-z1YNE4T1lG5o9acoQR1GBvf7mq6Tzayqo/za5sHVSOJAC9SZOuVN/gg/nkBa9a8n5U7qOMFXfwhTMNqA474gXA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-9.0.0.tgz", + "integrity": "sha512-4Rp5OUZW/7Qc9hyCd+ZEikuu2k9dW3ssu6KzWygbVc9wY80i4GQmvjfsiUi21o3uPDvL4KUMANmnQqoTOIcVMA==", "dependencies": { - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-tools": "^9.0.0", "chalk": "^4.1.2", "execa": "^1.0.0", "fs-extra": "^8.1.0", "glob": "^7.1.3", - "jetifier": "^1.6.2", - "lodash": "^4.17.15", "logkitty": "^0.7.1", "slash": "^3.0.0" } @@ -5077,18 +5069,15 @@ } }, "node_modules/@react-native-community/cli-platform-ios": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-8.0.6.tgz", - "integrity": "sha512-CMR6mu/LVx6JVfQRDL9uULsMirJT633bODn+IrYmrwSz250pnhON16We8eLPzxOZHyDjm7JPuSgHG3a/BPiRuQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-9.0.0.tgz", + "integrity": "sha512-ODS/DiNvKlEqL+Y4tU/DOIff7th733JOkJRC/GZFCWlCyC0gyutxtbGfWxPW5ifm6NS5oc/EXiIZvCtzTnFnhQ==", "dependencies": { - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-tools": "^9.0.0", "chalk": "^4.1.2", "execa": "^1.0.0", "glob": "^7.1.3", - "js-yaml": "^3.13.1", - "lodash": "^4.17.15", - "ora": "^5.4.1", - "plist": "^3.0.2" + "ora": "^5.4.1" } }, "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { @@ -5264,19 +5253,19 @@ } }, "node_modules/@react-native-community/cli-plugin-metro": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-8.0.4.tgz", - "integrity": "sha512-UWzY1eMcEr/6262R2+d0Is5M3L/7Y/xXSDIFMoc5Rv5Wucl3hJM/TxHXmByvHpuJf6fJAfqOskyt4bZCvbI+wQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-9.0.0.tgz", + "integrity": "sha512-kKQa2vhkg1HJA/ZBdGX9dFR8WqBGgUe41BX9kinvB5zYmfWeX/JwOxorGKNSmvql88LROckrvZtzH+p9YR0G5g==", "dependencies": { - "@react-native-community/cli-server-api": "^8.0.4", - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-server-api": "^9.0.0", + "@react-native-community/cli-tools": "^9.0.0", "chalk": "^4.1.2", - "metro": "^0.70.1", - "metro-config": "^0.70.1", - "metro-core": "^0.70.1", - "metro-react-native-babel-transformer": "^0.70.1", - "metro-resolver": "^0.70.1", - "metro-runtime": "^0.70.1", + "metro": "^0.72.1", + "metro-config": "^0.72.1", + "metro-core": "^0.72.1", + "metro-react-native-babel-transformer": "^0.72.1", + "metro-resolver": "^0.72.1", + "metro-runtime": "^0.72.1", "readline": "^1.3.0" } }, @@ -5423,19 +5412,6 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/hermes-estree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.6.0.tgz", - "integrity": "sha512-2YTGzJCkhdmT6VuNprWjXnvTvw/3iPNw804oc7yknvQpNKo+vJGZmtvLLCghOZf0OwzKaNAzeIMp71zQbNl09w==" - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/hermes-parser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.6.0.tgz", - "integrity": "sha512-Vf58jBZca2+QBLR9h7B7mdg8oFz2g5ILz1iVouZ5DOrOrAfBmPfJjdjDT8jrO0f+iJ4/hSRrQHqHIjSnTaLUDQ==", - "dependencies": { - "hermes-estree": "0.6.0" - } - }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -5448,31 +5424,6 @@ "node": ">=4" } }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/jest-regex-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", @@ -5561,9 +5512,9 @@ } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.70.3.tgz", - "integrity": "sha512-uEWS7xg8oTetQDABYNtsyeUjdLhH3KAvLFpaFFoJqUpOk2A3iygszdqmjobFl6W4zrvKDJS+XxdMR1roYvUhTw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.72.2.tgz", + "integrity": "sha512-TWqKnPMu4OX7ew7HJwsD4LBzhtn7Iqeu2OAqjlMCJtqMKqi/YWoxFf1VGZxH/mJVLhbe/5SWU5St/tqsST8swg==", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.14.0", @@ -5583,27 +5534,27 @@ "error-stack-parser": "^2.0.6", "fs-extra": "^1.0.0", "graceful-fs": "^4.2.4", - "hermes-parser": "0.6.0", + "hermes-parser": "0.8.0", "image-size": "^0.6.0", "invariant": "^2.2.4", - "jest-haste-map": "^27.3.1", "jest-worker": "^27.2.0", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.70.3", - "metro-cache": "0.70.3", - "metro-cache-key": "0.70.3", - "metro-config": "0.70.3", - "metro-core": "0.70.3", - "metro-hermes-compiler": "0.70.3", - "metro-inspector-proxy": "0.70.3", - "metro-minify-uglify": "0.70.3", - "metro-react-native-babel-preset": "0.70.3", - "metro-resolver": "0.70.3", - "metro-runtime": "0.70.3", - "metro-source-map": "0.70.3", - "metro-symbolicate": "0.70.3", - "metro-transform-plugins": "0.70.3", - "metro-transform-worker": "0.70.3", + "metro-babel-transformer": "0.72.2", + "metro-cache": "0.72.2", + "metro-cache-key": "0.72.2", + "metro-config": "0.72.2", + "metro-core": "0.72.2", + "metro-file-map": "0.72.2", + "metro-hermes-compiler": "0.72.2", + "metro-inspector-proxy": "0.72.2", + "metro-minify-uglify": "0.72.2", + "metro-react-native-babel-preset": "0.72.2", + "metro-resolver": "0.72.2", + "metro-runtime": "0.72.2", + "metro-source-map": "0.72.2", + "metro-symbolicate": "0.72.2", + "metro-transform-plugins": "0.72.2", + "metro-transform-worker": "0.72.2", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -5621,62 +5572,83 @@ } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-babel-transformer": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.70.3.tgz", - "integrity": "sha512-bWhZRMn+mIOR/s3BDpFevWScz9sV8FGktVfMlF1eJBLoX24itHDbXvTktKBYi38PWIKcHedh6THSFpJogfuwNA==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.72.2.tgz", + "integrity": "sha512-3Bxk/MoXHn/ysmsH7ov6inDHrSWz5eowYRGzilOSSXe9y3DJ/ceTHfT+DWsPr9IgTJLQfKVN/F0pZ+1Ndqh52A==", "dependencies": { "@babel/core": "^7.14.0", - "hermes-parser": "0.6.0", - "metro-source-map": "0.70.3", + "hermes-parser": "0.8.0", + "metro-source-map": "0.72.2", "nullthrows": "^1.1.1" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-cache": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.70.3.tgz", - "integrity": "sha512-iCix/+z812fUqa6KlOxaTkY6LQQDoXIe/VljXkGIvpygSCmYyhjQpfQVZEVVPezFmUBYXNdabdQ6cYx6JX3yMg==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.72.2.tgz", + "integrity": "sha512-0Yw3J32eYTp7x7bAAg+a9ScBG/mpib6Wq4WPSYvhoNilPFHzh7knLDMil3WGVCQlI1r+5xtpw/FDhNVKuypQqg==", "dependencies": { - "metro-core": "0.70.3", + "metro-core": "0.72.2", "rimraf": "^2.5.4" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-cache-key": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.70.3.tgz", - "integrity": "sha512-0zpw+IcpM3hmGd5sKMdxNv3sbOIUYnMUvx1/yaM6vNRReSPmOLX0bP8fYf3CGgk8NEreZ1OHbVsuw7bdKt40Mw==" + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.72.2.tgz", + "integrity": "sha512-P8p4QQzbEFMuk81xklc62qdE+CGBjP9u+ECP3iYNXIAW0+apS6Dntyvx/xCLy0a4MIryXqg2EJ2Z8XrmKmNeGQ==" }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-config": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.70.3.tgz", - "integrity": "sha512-SSCDjSTygoCgzoj61DdrBeJzZDRwQxUEfcgc6t6coxWSExXNR4mOngz0q4SAam49Bmjq9J2Jft6qUKnUTPrRgA==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.72.2.tgz", + "integrity": "sha512-rvX4fBctPYEIPtTEcgun7Q+3IwuR5+gMPQrwDhE8hHDHPmFkfrW9UsEqD7VArJFRr0AwXSd7GD+eapFPjXr43Q==", "dependencies": { "cosmiconfig": "^5.0.5", "jest-validate": "^26.5.2", - "metro": "0.70.3", - "metro-cache": "0.70.3", - "metro-core": "0.70.3", - "metro-runtime": "0.70.3" + "metro": "0.72.2", + "metro-cache": "0.72.2", + "metro-core": "0.72.2", + "metro-runtime": "0.72.2" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-core": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.70.3.tgz", - "integrity": "sha512-NzfHB/w5R7yLaOeU1tzPTbBzCRsYSvpKJkLMP0yudszKZzIAZqNdjoEJ9GZ688Wi0ynZxcU0BxukXh4my80ZBw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.72.2.tgz", + "integrity": "sha512-OXNH8UbKIhvpyHGJrdQYnPUmyPHSuVY4OO6pQxODdTW+uiO68PPPgIIVN67vlCAirZolxRFpma70N7m0sGCZyg==", "dependencies": { - "jest-haste-map": "^27.3.1", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.70.3" + "metro-resolver": "0.72.2" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-file-map": { + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.72.2.tgz", + "integrity": "sha512-6LMgsVT2/Ik6sKtzG1T13pwxJYrSX/JtbF5HwOU7Q/L79Mopy9NQnw9hQoXPcnVXA12gbWfp6Va/NnycaTxX+w==", + "dependencies": { + "abort-controller": "^3.0.0", + "anymatch": "^3.0.3", + "debug": "^2.2.0", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-regex-util": "^27.0.6", + "jest-serializer": "^27.0.6", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-hermes-compiler": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.70.3.tgz", - "integrity": "sha512-W6WttLi4E72JL/NyteQ84uxYOFMibe0PUr9aBKuJxxfCq6QRnJKOVcNY0NLW0He2tneXGk+8ZsNz8c0flEvYqg==" + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.72.2.tgz", + "integrity": "sha512-X8fjDBGNwjHxYAlMtrsr8x/JI/Gep7uzLDuHOMuRU5iAIVt+gH0Z+zjbJTsX++yLZ41i755zw5akvpQnyjVl/w==" }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-inspector-proxy": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.70.3.tgz", - "integrity": "sha512-qQoNdPGrmyoJSWYkxSDpTaAI8xyqVdNDVVj9KRm1PG8niSuYmrCCFGLLFsMvkVYwsCWUGHoGBx0UoAzVp14ejw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.72.2.tgz", + "integrity": "sha512-VEJU3J+0qrU33o+5tHemVuRWMXswtSrRI1lTE9yFiU8GAxoKrSy2kfJ5cOPLfv/8Nf6M6zRayjUs/Q46kjvfow==", "dependencies": { "connect": "^3.6.5", "debug": "^2.2.0", @@ -5688,100 +5660,52 @@ } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-minify-uglify": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.70.3.tgz", - "integrity": "sha512-oHyjV9WDqOlDE1FPtvs6tIjjeY/oP1PNUPYL1wqyYtqvjN+zzAOrcbsAAL1sv+WARaeiMsWkF2bwtNo+Hghoog==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.72.2.tgz", + "integrity": "sha512-b9KH4vMd1yvBYfcA3xvc1HZmPWIpOhiNyiEjh7pw7il1TONAR0+Rj8TS0yG57eSYM8IB86UIwB7Y5PVCNfUNXQ==", "dependencies": { "uglify-es": "^3.1.9" } }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-react-native-babel-preset": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.70.3.tgz", - "integrity": "sha512-4Nxc1zEiHEu+GTdEMEsHnRgfaBkg8f/Td3+FcQ8NTSvs+xL3LBrQy6N07idWSQZHIdGFf+tTHvRfSIWLD8u8Tg==", - "dependencies": { - "@babel/core": "^7.14.0", - "@babel/plugin-proposal-async-generator-functions": "^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", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.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", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-resolver": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.70.3.tgz", - "integrity": "sha512-5Pc5S/Gs4RlLbziuIWtvtFd9GRoILlaRC8RZDVq5JZWcWHywKy/PjNmOBNhpyvtRlzpJfy/ssIfLhu8zINt1Mw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.72.2.tgz", + "integrity": "sha512-5KTWolUgA6ivLkg3DmFS2WltphBPQW7GT7An+6Izk/NU+y/6crmsoaLmNxjpZo4Fv+i/FxDSXqpbpQ6KrRWvlQ==", "dependencies": { "absolute-path": "^0.0.0" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-runtime": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.70.3.tgz", - "integrity": "sha512-22xU7UdXZacniTIDZgN2EYtmfau2pPyh97Dcs+cWrLcJYgfMKjWBtesnDcUAQy3PHekDYvBdJZkoQUeskYTM+w==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.72.2.tgz", + "integrity": "sha512-jIHH6ILSWJtINHA0+KgnH1T5RO5mkf46sQahgC+GYjZjGoshs8+tBdjviYD/xy5s4olCJ1hmycV+XvauQmJdkQ==", "dependencies": { - "@babel/runtime": "^7.0.0" + "@babel/runtime": "^7.0.0", + "react-refresh": "^0.4.0" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-source-map": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.70.3.tgz", - "integrity": "sha512-zsYtZGrwRbbGEFHtmMqqeCH9K9aTGNVPsurMOWCUeQA3VGyVGXPGtLMC+CdAM9jLpUyg6jw2xh0esxi+tYH7Uw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.72.2.tgz", + "integrity": "sha512-dqYK8DZ4NzGkhik0IkKRBLuPplXqF6GoKrFQ/XMw0FYGy3+dFJ9nIDxsCyg3GcjCt6Mg8FEqGrXlpMG7MrtC9Q==", "dependencies": { "@babel/traverse": "^7.14.0", "@babel/types": "^7.0.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.70.3", + "metro-symbolicate": "0.72.2", "nullthrows": "^1.1.1", - "ob1": "0.70.3", + "ob1": "0.72.2", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-symbolicate": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.70.3.tgz", - "integrity": "sha512-JTYkF1dpeDUssQ84juE1ycnhHki2ylJBBdJE1JHtfu5oC+z1ElDbBdPHq90Uvt8HbRov/ZAnxvv7Zy6asS+WCA==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.72.2.tgz", + "integrity": "sha512-Rn47dSggFU9jf+fpUE6/gkNQU7PQPTIbh2iUu7jI8cJFBODs0PWlI5h0W9XlQ56lcBtjLQz6fvZSloKdDcI2fQ==", "dependencies": { "invariant": "^2.2.4", - "metro-source-map": "0.70.3", + "metro-source-map": "0.72.2", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -5795,9 +5719,9 @@ } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-transform-plugins": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.70.3.tgz", - "integrity": "sha512-dQRIJoTkWZN2IVS2KzgS1hs7ZdHDX3fS3esfifPkqFAEwHiLctCf0EsPgIknp0AjMLvmGWfSLJigdRB/dc0ASw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.72.2.tgz", + "integrity": "sha512-f2Zt6ti156TWFrnCRg7vxBIHBJcERBX8nwKmRKGFCbU+rk4YOxwONY4Y0Gn9Kocfu313P1xNqWYH5rCqvEWMaQ==", "dependencies": { "@babel/core": "^7.14.0", "@babel/generator": "^7.14.0", @@ -5807,22 +5731,22 @@ } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-transform-worker": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.70.3.tgz", - "integrity": "sha512-MtVVsnHhhBOp9GRLCdAb2mD1dTCsIzT4+m34KMRdBDCEbDIb90YafT5prpU8qbj5uKd0o2FOQdrJ5iy5zQilHw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.72.2.tgz", + "integrity": "sha512-z5OOnEO3NV6PgI8ORIBvJ5m+u9THFpy+6WIg/MUjP9k1oqasWaP1Rfhv7K/a+MD6uho1rgXj6nwWDqybsqHY/w==", "dependencies": { "@babel/core": "^7.14.0", "@babel/generator": "^7.14.0", "@babel/parser": "^7.14.0", "@babel/types": "^7.0.0", "babel-preset-fbjs": "^3.4.0", - "metro": "0.70.3", - "metro-babel-transformer": "0.70.3", - "metro-cache": "0.70.3", - "metro-cache-key": "0.70.3", - "metro-hermes-compiler": "0.70.3", - "metro-source-map": "0.70.3", - "metro-transform-plugins": "0.70.3", + "metro": "0.72.2", + "metro-babel-transformer": "0.72.2", + "metro-cache": "0.72.2", + "metro-cache-key": "0.72.2", + "metro-hermes-compiler": "0.72.2", + "metro-source-map": "0.72.2", + "metro-transform-plugins": "0.72.2", "nullthrows": "^1.1.1" } }, @@ -5832,9 +5756,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/ob1": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.70.3.tgz", - "integrity": "sha512-Vy9GGhuXgDRY01QA6kdhToPd8AkLdLpX9GjH5kpqluVqTu70mgOm7tpGoJDZGaNbr9nJlJgnipqHJQRPORixIQ==" + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.72.2.tgz", + "integrity": "sha512-P4zh/5GzyXPIzz+2eq2Hjd1wTZAfpwTIBWKhYx8X/DD2wCuFVprBEZp1FerWyTMwOA6AnVxiX1h0JE1v/s+PAQ==" }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/p-limit": { "version": "2.3.0", @@ -6002,12 +5926,12 @@ } }, "node_modules/@react-native-community/cli-server-api": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-8.0.4.tgz", - "integrity": "sha512-Orr14njx1E70CVrUA8bFdl+mrnbuXUjf1Rhhm0RxUadFpvkHuOi5dh8Bryj2MKtf8eZrpEwZ7tuQPhJEULW16A==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-9.0.0.tgz", + "integrity": "sha512-4b7yOsTeqZGBD7eIczjMkzegvegIRQGT0lLtofNCpI5Gof0vMYpo1rM2cY76TgjIQiBhVA0pVKcfXUD/u9BA9Q==", "dependencies": { - "@react-native-community/cli-debugger-ui": "^8.0.0", - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-debugger-ui": "^9.0.0", + "@react-native-community/cli-tools": "^9.0.0", "compression": "^1.7.1", "connect": "^3.6.5", "errorhandler": "^1.5.0", @@ -6095,14 +6019,13 @@ } }, "node_modules/@react-native-community/cli-tools": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-8.0.4.tgz", - "integrity": "sha512-ePN9lGxh6LRFiotyddEkSmuqpQhnq2iw9oiXYr4EFWpIEy0yCigTuSTiDF68+c8M9B+7bTwkRpz/rMPC4ViO5Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-9.0.0.tgz", + "integrity": "sha512-qv8e9i4ybdRVw2VxolvVGv1mH9lMhstEuMvxvpwqHGNhTyevwpdVevuR5D/lbPz2EXogQpnMdQMLCiDoxxV4Ow==", "dependencies": { "appdirsjs": "^1.2.4", "chalk": "^4.1.2", "find-up": "^5.0.0", - "lodash": "^4.17.15", "mime": "^2.4.1", "node-fetch": "^2.6.0", "open": "^6.2.0", @@ -6203,9 +6126,9 @@ } }, "node_modules/@react-native-community/cli-types": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-8.0.0.tgz", - "integrity": "sha512-1lZS1PEvMlFaN3Se1ksyoFWzMjk+YfKi490GgsqKJln9gvFm8tqVPdnXttI5Uf2DQf3BMse8Bk8dNH4oV6Ewow==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-9.0.0.tgz", + "integrity": "sha512-EsDHzJwGA7Fkb1TErxiWMZIu50836NKgX3/dzPTwI/5KfvGPRjt4sBHvKJ7cQVMe1IgHwPhcO6izjcK69MPjTA==", "dependencies": { "joi": "^17.2.1" } @@ -6256,9 +6179,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", + "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "engines": { + "node": "^12.20.0 || >=14" + } }, "node_modules/@react-native-community/cli/node_modules/cross-spawn": { "version": "6.0.5", @@ -6669,9 +6595,9 @@ } }, "node_modules/@react-navigation/elements": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.4.tgz", - "integrity": "sha512-O0jICpjn3jskVo4yiWzZozmj7DZy1ZBbn3O7dbenuUjZSj/cscjwaapmZZFGcI/IMmjmx8UTKsybhCFEIbGf3g==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.5.tgz", + "integrity": "sha512-3Ef5cYuQXqJRco7RG99fkDEciAuYTkAD7go5D8RFYG8rAp2aI/cDnGwFwvFVANlRsbFFPGU3ZLY8EUJihf4Hjw==", "peerDependencies": { "@react-navigation/native": "^6.0.0", "react": "*", @@ -12431,6 +12357,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, "dependencies": { "@types/node": "*" } @@ -12635,9 +12562,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.0.17", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.17.tgz", - "integrity": "sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==", + "version": "18.0.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.18.tgz", + "integrity": "sha512-6hI08umYs6NaiHFEEGioXnxJ+oEhY3eRz8VCUaudZmGdtvPviCJB8mgaMxaDWAdPSYd4eFavrPk2QIolwbLYrg==", "peer": true, "dependencies": { "@types/prop-types": "*", @@ -12646,9 +12573,9 @@ } }, "node_modules/@types/react-native": { - "version": "0.69.5", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.69.5.tgz", - "integrity": "sha512-mSUCuGUsW2kJlZiu4GmdYVDKZX/52iyC9rm6dxAmflJj1b7kSO/CMSDy5WbcfS8QerxTqbYGTrIwHD0GnXHzbQ==", + "version": "0.69.7", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.69.7.tgz", + "integrity": "sha512-IVWswgynlIfYLJHegI4ABCO+7p5sY+vq4/+lHV/NKVZ9WjZj9HrBsLJjWAqO1fMywyAaR8gGMSUtAilu5e2E3A==", "peer": true, "dependencies": { "@types/react": "*" @@ -24092,11 +24019,6 @@ "he": "bin/he" } }, - "node_modules/hermes-engine": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.11.0.tgz", - "integrity": "sha512-7aMUlZja2IyLYAcZ69NBnwJAR5ZOYlSllj0oMpx08a8HzxHOys0eKCzfphrf6D0vX1JGO1QQvVsQKe6TkYherw==" - }, "node_modules/hermes-estree": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.8.0.tgz", @@ -28083,16 +28005,6 @@ "node": ">=8" } }, - "node_modules/jetifier": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", - "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==", - "bin": { - "jetifier": "bin/jetify", - "jetifier-standalone": "bin/jetifier-standalone", - "jetify": "bin/jetify" - } - }, "node_modules/joi": { "version": "17.6.0", "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", @@ -30299,9 +30211,9 @@ } }, "node_modules/metro-react-native-babel-preset": { - "version": "0.71.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.71.3.tgz", - "integrity": "sha512-ym8xeoK/5fY/TsQPQXVnJN822NB9TZglxc2XVk+DM8kJO0XacWh2GtDRFeFHEehVsYWpIZeaDPF2XES+YU5mhA==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.2.tgz", + "integrity": "sha512-OMp77TUUZAoiuUv5uKNc08AnJNQxD28k92eQvo8tPcA8Wx6OZlEUvL7M7SFkef2mEYJ0vnrRjOamSnbBuq/+1w==", "dependencies": { "@babel/core": "^7.14.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", @@ -30356,50 +30268,37 @@ } }, "node_modules/metro-react-native-babel-transformer": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.70.3.tgz", - "integrity": "sha512-WKBU6S/G50j9cfmFM4k4oRYprd8u3qjleD4so1E2zbTNILg+gYla7ZFGCAvi2G0ZcqS2XuGCR375c2hF6VVvwg==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.72.1.tgz", + "integrity": "sha512-hMnN0MOgVloAk94YuXN7sLeDaZ51Y6xIcJXxIU1s/KaygAGXk6o7VAdwf2MY/IV1SIct5lkW4Gn71u/9/EvfXA==", "dependencies": { "@babel/core": "^7.14.0", "babel-preset-fbjs": "^3.4.0", - "hermes-parser": "0.6.0", - "metro-babel-transformer": "0.70.3", - "metro-react-native-babel-preset": "0.70.3", - "metro-source-map": "0.70.3", + "hermes-parser": "0.8.0", + "metro-babel-transformer": "0.72.1", + "metro-react-native-babel-preset": "0.72.1", + "metro-source-map": "0.72.1", "nullthrows": "^1.1.1" }, "peerDependencies": { "@babel/core": "*" } }, - "node_modules/metro-react-native-babel-transformer/node_modules/hermes-estree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.6.0.tgz", - "integrity": "sha512-2YTGzJCkhdmT6VuNprWjXnvTvw/3iPNw804oc7yknvQpNKo+vJGZmtvLLCghOZf0OwzKaNAzeIMp71zQbNl09w==" - }, - "node_modules/metro-react-native-babel-transformer/node_modules/hermes-parser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.6.0.tgz", - "integrity": "sha512-Vf58jBZca2+QBLR9h7B7mdg8oFz2g5ILz1iVouZ5DOrOrAfBmPfJjdjDT8jrO0f+iJ4/hSRrQHqHIjSnTaLUDQ==", - "dependencies": { - "hermes-estree": "0.6.0" - } - }, "node_modules/metro-react-native-babel-transformer/node_modules/metro-babel-transformer": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.70.3.tgz", - "integrity": "sha512-bWhZRMn+mIOR/s3BDpFevWScz9sV8FGktVfMlF1eJBLoX24itHDbXvTktKBYi38PWIKcHedh6THSFpJogfuwNA==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.72.1.tgz", + "integrity": "sha512-VK7A9gepnhrKC0DMoxtPjYYHjkkfNwzLMYJgeL6Il6IaX/K/VHTILSEqgpxfNDos2jrXazuR5+rXDLE/RCzqmw==", "dependencies": { "@babel/core": "^7.14.0", - "hermes-parser": "0.6.0", - "metro-source-map": "0.70.3", + "hermes-parser": "0.8.0", + "metro-source-map": "0.72.1", "nullthrows": "^1.1.1" } }, "node_modules/metro-react-native-babel-transformer/node_modules/metro-react-native-babel-preset": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.70.3.tgz", - "integrity": "sha512-4Nxc1zEiHEu+GTdEMEsHnRgfaBkg8f/Td3+FcQ8NTSvs+xL3LBrQy6N07idWSQZHIdGFf+tTHvRfSIWLD8u8Tg==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.1.tgz", + "integrity": "sha512-DlvMw2tFrCqD9OXBoN11fPM09kHC22FZpnkTmG4Pr4kecV+aDmEGxwakjUcjELrX1JCXz2MLPvqeJkbiP1f5CA==", "dependencies": { "@babel/core": "^7.14.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", @@ -30446,27 +30345,27 @@ } }, "node_modules/metro-react-native-babel-transformer/node_modules/metro-source-map": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.70.3.tgz", - "integrity": "sha512-zsYtZGrwRbbGEFHtmMqqeCH9K9aTGNVPsurMOWCUeQA3VGyVGXPGtLMC+CdAM9jLpUyg6jw2xh0esxi+tYH7Uw==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.72.1.tgz", + "integrity": "sha512-77TZuf10Ru+USo97HwDT8UceSzOGBZB8EYTObOsR0n1sjQHjvKsMflLA9Pco13o9NsIYAG6c6P/0vIpiHKqaKA==", "dependencies": { "@babel/traverse": "^7.14.0", "@babel/types": "^7.0.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.70.3", + "metro-symbolicate": "0.72.1", "nullthrows": "^1.1.1", - "ob1": "0.70.3", + "ob1": "0.72.1", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "node_modules/metro-react-native-babel-transformer/node_modules/metro-symbolicate": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.70.3.tgz", - "integrity": "sha512-JTYkF1dpeDUssQ84juE1ycnhHki2ylJBBdJE1JHtfu5oC+z1ElDbBdPHq90Uvt8HbRov/ZAnxvv7Zy6asS+WCA==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.72.1.tgz", + "integrity": "sha512-ScC3dVd2XrfZSd6kubOw7EJNp2oHdjrqOjGpFohtcXGjhqkzDosp7Fg84VgwQGN8g720xvUyEBfSMmUCXcicOQ==", "dependencies": { "invariant": "^2.2.4", - "metro-source-map": "0.70.3", + "metro-source-map": "0.72.1", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -30480,9 +30379,9 @@ } }, "node_modules/metro-react-native-babel-transformer/node_modules/ob1": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.70.3.tgz", - "integrity": "sha512-Vy9GGhuXgDRY01QA6kdhToPd8AkLdLpX9GjH5kpqluVqTu70mgOm7tpGoJDZGaNbr9nJlJgnipqHJQRPORixIQ==" + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.72.1.tgz", + "integrity": "sha512-TyQX2gO08klGTMuzD+xm3iVrzXiIygCB7t+NWeicOR05hkzgeWOiAZ8q40uMfIDRfEAc6hd66sJdIEhU/yUZZA==" }, "node_modules/metro-react-native-babel-transformer/node_modules/react-refresh": { "version": "0.4.3", @@ -30750,6 +30649,55 @@ "node": ">=8" } }, + "node_modules/metro/node_modules/metro-react-native-babel-preset": { + "version": "0.71.3", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.71.3.tgz", + "integrity": "sha512-ym8xeoK/5fY/TsQPQXVnJN822NB9TZglxc2XVk+DM8kJO0XacWh2GtDRFeFHEehVsYWpIZeaDPF2XES+YU5mhA==", + "dependencies": { + "@babel/core": "^7.14.0", + "@babel/plugin-proposal-async-generator-functions": "^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", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.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", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, "node_modules/metro/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -30788,6 +30736,14 @@ "node": ">=8" } }, + "node_modules/metro/node_modules/react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/metro/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -33519,9 +33475,9 @@ } }, "node_modules/react": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.0.0.tgz", - "integrity": "sha512-x+VL6wbT4JRVPm7EGxXhZ8w8LTROaxPXOqhlGyVSrv0sB1jkyFGgXxJ8LVoPRLvPR6/CIZGFmfzqUa2NYeMr2A==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -33617,15 +33573,15 @@ "dev": true }, "node_modules/react-dom": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.0.0.tgz", - "integrity": "sha512-XqX7uzmFo0pUceWFCt7Gff6IyIMzFUn7QMZrbrQfGxtaxXZIcGQzoNpRLE3fQLnS4XzLLPMZX2T9TRcSrasicw==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.21.0" + "scheduler": "^0.23.0" }, "peerDependencies": { - "react": "^18.0.0" + "react": "^18.2.0" } }, "node_modules/react-freeze": { @@ -33646,14 +33602,14 @@ }, "node_modules/react-native": { "name": "@expensify/react-native", - "version": "0.69.4", - "resolved": "https://registry.npmjs.org/@expensify/react-native/-/react-native-0.69.4.tgz", - "integrity": "sha512-iLD9w+fPNIe47CBDP2Wvy44tn/AajWwLiznGiNHVV/ZijhtxTRRFawmhfXFpqHWT/Z2xb9hp/sC0HNp0yJPJOA==", + "version": "0.70.1", + "resolved": "https://registry.npmjs.org/@expensify/react-native/-/react-native-0.70.1.tgz", + "integrity": "sha512-PRJ8La+sy0EWEYCS/SiCpiHVesJGTKYzf9aQzzAXbpSp4AUTVOINP1KeLSWb272xXySCFEF9/l5ssO+cnWUsSQ==", "dependencies": { "@jest/create-cache-key-function": "^27.0.1", - "@react-native-community/cli": "^8.0.4", - "@react-native-community/cli-platform-android": "^8.0.4", - "@react-native-community/cli-platform-ios": "^8.0.4", + "@react-native-community/cli": "^9.0.0", + "@react-native-community/cli-platform-android": "^9.0.0", + "@react-native-community/cli-platform-ios": "^9.0.0", "@react-native/assets": "1.0.0", "@react-native/normalize-color": "2.0.0", "@react-native/polyfills": "2.0.0", @@ -33661,24 +33617,23 @@ "anser": "^1.4.9", "base64-js": "^1.1.2", "event-target-shim": "^5.0.1", - "hermes-engine": "~0.11.0", "invariant": "^2.2.4", "jsc-android": "^250230.2.1", "memoize-one": "^5.0.0", - "metro-react-native-babel-transformer": "0.70.3", - "metro-runtime": "0.70.3", - "metro-source-map": "0.70.3", + "metro-react-native-babel-transformer": "0.72.1", + "metro-runtime": "0.72.1", + "metro-source-map": "0.72.1", "mkdirp": "^0.5.1", "nullthrows": "^1.1.1", "pretty-format": "^26.5.2", "promise": "^8.0.3", "react-devtools-core": "4.24.0", - "react-native-codegen": "^0.69.1", - "react-native-gradle-plugin": "^0.0.7", + "react-native-codegen": "^0.71.0", + "react-native-gradle-plugin": "^0.71.0", "react-refresh": "^0.4.0", - "react-shallow-renderer": "16.15.0", + "react-shallow-renderer": "^16.15.0", "regenerator-runtime": "^0.13.2", - "scheduler": "^0.21.0", + "scheduler": "^0.23.0", "stacktrace-parser": "^0.1.3", "use-sync-external-store": "^1.0.0", "whatwg-fetch": "^3.0.0", @@ -33691,7 +33646,7 @@ "node": ">=14" }, "peerDependencies": { - "react": "18.0.0" + "react": "18.2.0" } }, "node_modules/react-native-animatable": { @@ -33728,9 +33683,9 @@ } }, "node_modules/react-native-codegen": { - "version": "0.69.1", - "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.69.1.tgz", - "integrity": "sha512-TOZEqBarczcyYN3iZE3VpKkooOevaAzBq9n7lU0h9mQUvtRhLVyolc+a5K6cWI0e4v4K69I0MqzjPcPeFKo32Q==", + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.71.0.tgz", + "integrity": "sha512-QkZapZx7vLNcszJHNkkIaZwsfGiI0quuq3ejJW2C3jMNT+Ed2lkuI8G/sfXAQOWQgX7/9iaeGDxE9Rjiz8EkAg==", "dependencies": { "@babel/parser": "^7.14.0", "flow-parser": "^0.121.0", @@ -33831,9 +33786,9 @@ } }, "node_modules/react-native-gradle-plugin": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.7.tgz", - "integrity": "sha512-+4JpbIx42zGTONhBTIXSyfyHICHC29VTvhkkoUOJAh/XHPEixpuBduYgf6Y4y9wsN1ARlQhBBoptTvXvAFQf5g==" + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.0.tgz", + "integrity": "sha512-hQyRvWjQH9uozYciy/SmsgXuxlHGSauvtotitJsXB0nwBO/luWHmH1rzHN4vS/9oHQm6x6uJNAedbPgTZwXb5g==" }, "node_modules/react-native-haptic-feedback": { "version": "1.14.0", @@ -34346,35 +34301,36 @@ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" }, "node_modules/react-native/node_modules/metro-runtime": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.70.3.tgz", - "integrity": "sha512-22xU7UdXZacniTIDZgN2EYtmfau2pPyh97Dcs+cWrLcJYgfMKjWBtesnDcUAQy3PHekDYvBdJZkoQUeskYTM+w==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.72.1.tgz", + "integrity": "sha512-CO+fvJKYHKuR2vo7kjsegQ2oF3FMwa4YhnUInQ+xPVxWoy8DbOpmruKBoTsQVgHwyIziXzvJa+mze/6CFvT+3A==", "dependencies": { - "@babel/runtime": "^7.0.0" + "@babel/runtime": "^7.0.0", + "react-refresh": "^0.4.0" } }, "node_modules/react-native/node_modules/metro-source-map": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.70.3.tgz", - "integrity": "sha512-zsYtZGrwRbbGEFHtmMqqeCH9K9aTGNVPsurMOWCUeQA3VGyVGXPGtLMC+CdAM9jLpUyg6jw2xh0esxi+tYH7Uw==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.72.1.tgz", + "integrity": "sha512-77TZuf10Ru+USo97HwDT8UceSzOGBZB8EYTObOsR0n1sjQHjvKsMflLA9Pco13o9NsIYAG6c6P/0vIpiHKqaKA==", "dependencies": { "@babel/traverse": "^7.14.0", "@babel/types": "^7.0.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.70.3", + "metro-symbolicate": "0.72.1", "nullthrows": "^1.1.1", - "ob1": "0.70.3", + "ob1": "0.72.1", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "node_modules/react-native/node_modules/metro-symbolicate": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.70.3.tgz", - "integrity": "sha512-JTYkF1dpeDUssQ84juE1ycnhHki2ylJBBdJE1JHtfu5oC+z1ElDbBdPHq90Uvt8HbRov/ZAnxvv7Zy6asS+WCA==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.72.1.tgz", + "integrity": "sha512-ScC3dVd2XrfZSd6kubOw7EJNp2oHdjrqOjGpFohtcXGjhqkzDosp7Fg84VgwQGN8g720xvUyEBfSMmUCXcicOQ==", "dependencies": { "invariant": "^2.2.4", - "metro-source-map": "0.70.3", + "metro-source-map": "0.72.1", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -34399,9 +34355,9 @@ } }, "node_modules/react-native/node_modules/ob1": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.70.3.tgz", - "integrity": "sha512-Vy9GGhuXgDRY01QA6kdhToPd8AkLdLpX9GjH5kpqluVqTu70mgOm7tpGoJDZGaNbr9nJlJgnipqHJQRPORixIQ==" + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.72.1.tgz", + "integrity": "sha512-TyQX2gO08klGTMuzD+xm3iVrzXiIygCB7t+NWeicOR05hkzgeWOiAZ8q40uMfIDRfEAc6hd66sJdIEhU/yUZZA==" }, "node_modules/react-native/node_modules/pretty-format": { "version": "26.6.2", @@ -34534,17 +34490,17 @@ } }, "node_modules/react-test-renderer": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.0.0.tgz", - "integrity": "sha512-SyZTP/FSkwfiKOZuTZiISzsrC8A80KNlQ8PyyoGoOq+VzMAab6Em1POK/CiX3+XyXG6oiJa1C53zYDbdrJu9fw==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.1.0.tgz", + "integrity": "sha512-OfuueprJFW7h69GN+kr4Ywin7stcuqaYAt1g7airM5cUgP0BoF5G5CXsPGmXeDeEkncb2fqYNECO4y18sSqphg==", "dev": true, "dependencies": { - "react-is": "^18.0.0", - "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.21.0" + "react-is": "^18.1.0", + "react-shallow-renderer": "^16.15.0", + "scheduler": "^0.22.0" }, "peerDependencies": { - "react": "^18.0.0" + "react": "^18.1.0" } }, "node_modules/react-test-renderer/node_modules/react-is": { @@ -34553,6 +34509,15 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "node_modules/react-test-renderer/node_modules/scheduler": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz", + "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/react-web-config": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/react-web-config/-/react-web-config-1.0.0.tgz", @@ -36329,9 +36294,9 @@ } }, "node_modules/scheduler": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz", - "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dependencies": { "loose-envify": "^1.1.0" } @@ -44475,7 +44440,7 @@ "@oguzhnatly/react-native-image-manipulator": { "version": "git+ssh://git@github.com/Expensify/react-native-image-manipulator.git#c5f654fc9d0ad7cc5b89d50b34ecf8b0e3f4d050", "integrity": "sha512-PvrSoCq5PS1MA5ZWUpB0khfzH6sM8SI6YiVl4i2SItPr7IeRxiWfI4n45VhBCCElc1z5GhAwTZOBaIzXTX7/og==", - "from": "@oguzhnatly/react-native-image-manipulator@https://github.com/Expensify/react-native-image-manipulator#c5f654fc9d0ad7cc5b89d50b34ecf8b0e3f4d050" + "from": "@oguzhnatly/react-native-image-manipulator@github:Expensify/react-native-image-manipulator#c5f654fc9d0ad7cc5b89d50b34ecf8b0e3f4d050" }, "@onfido/active-video-capture": { "version": "0.0.1", @@ -44488,9 +44453,9 @@ } }, "@onfido/react-native-sdk": { - "version": "git+ssh://git@github.com/Expensify/react-native-sdk.git#5d36f3128c4798a767782c8bc565ace30308edba", - "integrity": "sha512-85lYvaG+fj2b4l6WON+7DUV29CCNkB8lP7QaRq80wzK/78e1m/gY4TJmMdhfdDCjLY6RK42bpU3CpyV7wuSz/g==", - "from": "@onfido/react-native-sdk@github:Expensify/react-native-sdk#5d36f3128c4798a767782c8bc565ace30308edba", + "version": "git+ssh://git@github.com/Expensify/react-native-sdk.git#d70947f263b2e59899d82f8d1ef3841d053927ff", + "integrity": "sha512-xqQ9ERZhnJPkWVaaPBaoeBQ8UMHVy/cCPxEzow5rBuPuzmA1KYvrbu1FUqTMriUhVnLFR57TDCyZR8s/+u/eRg==", + "from": "@onfido/react-native-sdk@github:Expensify/react-native-sdk#d70947f263b2e59899d82f8d1ef3841d053927ff", "requires": {} }, "@pieter-pot/react-native-fast-image": { @@ -44537,9 +44502,9 @@ "dev": true }, "@react-native-async-storage/async-storage": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.17.9.tgz", - "integrity": "sha512-HKhMvjpA5/YzNMkcY3qeWLdTtUrtJe243knHNNYe1c0IplX69hZyiw7DjFwAgxPG9+YvzHDHliqPV+mBNOv+cQ==", + "version": "1.17.10", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.17.10.tgz", + "integrity": "sha512-KrR021BmBLsA0TT1AAsfH16bHYy0MSbhdAeBAqpriak3GS1T2alFcdTUvn13p0ZW6FKRD6Bd3ryU2zhU/IYYJQ==", "requires": { "merge-options": "^3.0.4" } @@ -44553,28 +44518,25 @@ } }, "@react-native-community/cli": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-8.0.6.tgz", - "integrity": "sha512-E36hU/if3quQCfJHGWVkpsCnwtByRCwORuAX0r6yr1ebKktpKeEO49zY9PAu/Z1gfyxCtgluXY0HfRxjKRFXTg==", - "requires": { - "@react-native-community/cli-clean": "^8.0.4", - "@react-native-community/cli-config": "^8.0.6", - "@react-native-community/cli-debugger-ui": "^8.0.0", - "@react-native-community/cli-doctor": "^8.0.6", - "@react-native-community/cli-hermes": "^8.0.5", - "@react-native-community/cli-plugin-metro": "^8.0.4", - "@react-native-community/cli-server-api": "^8.0.4", - "@react-native-community/cli-tools": "^8.0.4", - "@react-native-community/cli-types": "^8.0.0", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-9.0.0.tgz", + "integrity": "sha512-PHt4aPMw3TP/QSaFvlUjfcCniEjz7egXamIMNxNVdUsSr2JhDr6W0l+CflpRMU2ZYlb+79o8lXHWAo38drJ0ow==", + "requires": { + "@react-native-community/cli-clean": "^9.0.0", + "@react-native-community/cli-config": "^9.0.0", + "@react-native-community/cli-debugger-ui": "^9.0.0", + "@react-native-community/cli-doctor": "^9.0.0", + "@react-native-community/cli-hermes": "^9.0.0", + "@react-native-community/cli-plugin-metro": "^9.0.0", + "@react-native-community/cli-server-api": "^9.0.0", + "@react-native-community/cli-tools": "^9.0.0", + "@react-native-community/cli-types": "^9.0.0", "chalk": "^4.1.2", - "commander": "^2.19.0", + "commander": "^9.4.0", "execa": "^1.0.0", "find-up": "^4.1.0", "fs-extra": "^8.1.0", "graceful-fs": "^4.1.3", - "leven": "^3.1.0", - "lodash": "^4.17.15", - "minimist": "^1.2.0", "prompts": "^2.4.0", "semver": "^6.3.0" }, @@ -44610,9 +44572,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", + "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==" }, "cross-spawn": { "version": "6.0.5", @@ -44776,11 +44738,11 @@ } }, "@react-native-community/cli-clean": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-8.0.4.tgz", - "integrity": "sha512-IwS1M1NHg6+qL8PThZYMSIMYbZ6Zbx+lIck9PLBskbosFo24M3lCOflOl++Bggjakp6mR+sRXxLMexid/GeOsQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-9.0.0.tgz", + "integrity": "sha512-PaSz11fdSr5YI4YPl/auPdk7UCJaKFsH3gyFm8fKHqry2iPYQ3v3K8/FccVzmGbHgrvOcgAoWyhdVaFznXSp7A==", "requires": { - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-tools": "^9.0.0", "chalk": "^4.1.2", "execa": "^1.0.0", "prompts": "^2.4.0" @@ -44910,11 +44872,11 @@ } }, "@react-native-community/cli-config": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-8.0.6.tgz", - "integrity": "sha512-mjVpVvdh8AviiO8xtqeX+BkjqE//NMDnISwsLWSJUfNCwTAPmdR8PGbhgP5O4hWHyJ3WkepTopl0ya7Tfi3ifw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-9.0.0.tgz", + "integrity": "sha512-f61VjBZP/GoD1wwYdz4Y8lQeRpUwEtc/vgWSP6FDlsmGjCh0qtS7k2joEq7fJGStTC9xSl7weEx0+mo4yj3oUA==", "requires": { - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-tools": "^9.0.0", "cosmiconfig": "^5.1.0", "deepmerge": "^3.2.0", "glob": "^7.1.3", @@ -44963,21 +44925,21 @@ } }, "@react-native-community/cli-debugger-ui": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-8.0.0.tgz", - "integrity": "sha512-u2jq06GZwZ9sRERzd9FIgpW6yv4YOW4zz7Ym/B8eSzviLmy3yI/8mxJtvlGW+J8lBsfMcQoqJpqI6Rl1nZy9yQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-9.0.0.tgz", + "integrity": "sha512-7hH05ZwU9Tp0yS6xJW0bqcZPVt0YCK7gwj7gnRu1jDNN2kughf6Lg0Ys29rAvtZ7VO1PK5c1O+zs7yFnylQDUA==", "requires": { "serve-static": "^1.13.1" } }, "@react-native-community/cli-doctor": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-8.0.6.tgz", - "integrity": "sha512-ZQqyT9mJMVeFEVIwj8rbDYGCA2xXjJfsQjWk2iTRZ1CFHfhPSUuUiG8r6mJmTinAP9t+wYcbbIYzNgdSUKnDMw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-9.0.0.tgz", + "integrity": "sha512-W5Z0V+vaOM5hcbOUGakhXjYAa4qrH4XVEw4wnpmVb+2Qme0Cwdf9pH4wdGXsCz2cu2CWQu6DfxB6qbDFR5+HiQ==", "requires": { - "@react-native-community/cli-config": "^8.0.6", - "@react-native-community/cli-platform-ios": "^8.0.6", - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-config": "^9.0.0", + "@react-native-community/cli-platform-ios": "^9.0.0", + "@react-native-community/cli-tools": "^9.0.0", "chalk": "^4.1.2", "command-exists": "^1.2.8", "envinfo": "^7.7.2", @@ -45137,12 +45099,12 @@ } }, "@react-native-community/cli-hermes": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-8.0.5.tgz", - "integrity": "sha512-Zm0wM6SfgYAEX1kfJ1QBvTayabvh79GzmjHyuSnEROVNPbl4PeCG4WFbwy489tGwOP9Qx9fMT5tRIFCD8bp6/g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-9.0.0.tgz", + "integrity": "sha512-wdv8coZ2Ptw0QQ24M8oKYsncrdIjCXIOb4d2lFp5fFmWaEbL05e8zYOavS/WSMBHwsTKiz6wCxhRYcOcX9ysFA==", "requires": { - "@react-native-community/cli-platform-android": "^8.0.5", - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-platform-android": "^9.0.0", + "@react-native-community/cli-tools": "^9.0.0", "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6", "ip": "^1.1.5" @@ -45199,17 +45161,15 @@ } }, "@react-native-community/cli-platform-android": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-8.0.5.tgz", - "integrity": "sha512-z1YNE4T1lG5o9acoQR1GBvf7mq6Tzayqo/za5sHVSOJAC9SZOuVN/gg/nkBa9a8n5U7qOMFXfwhTMNqA474gXA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-9.0.0.tgz", + "integrity": "sha512-4Rp5OUZW/7Qc9hyCd+ZEikuu2k9dW3ssu6KzWygbVc9wY80i4GQmvjfsiUi21o3uPDvL4KUMANmnQqoTOIcVMA==", "requires": { - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-tools": "^9.0.0", "chalk": "^4.1.2", "execa": "^1.0.0", "fs-extra": "^8.1.0", "glob": "^7.1.3", - "jetifier": "^1.6.2", - "lodash": "^4.17.15", "logkitty": "^0.7.1", "slash": "^3.0.0" }, @@ -45361,18 +45321,15 @@ } }, "@react-native-community/cli-platform-ios": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-8.0.6.tgz", - "integrity": "sha512-CMR6mu/LVx6JVfQRDL9uULsMirJT633bODn+IrYmrwSz250pnhON16We8eLPzxOZHyDjm7JPuSgHG3a/BPiRuQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-9.0.0.tgz", + "integrity": "sha512-ODS/DiNvKlEqL+Y4tU/DOIff7th733JOkJRC/GZFCWlCyC0gyutxtbGfWxPW5ifm6NS5oc/EXiIZvCtzTnFnhQ==", "requires": { - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-tools": "^9.0.0", "chalk": "^4.1.2", "execa": "^1.0.0", "glob": "^7.1.3", - "js-yaml": "^3.13.1", - "lodash": "^4.17.15", - "ora": "^5.4.1", - "plist": "^3.0.2" + "ora": "^5.4.1" }, "dependencies": { "ansi-styles": { @@ -45499,19 +45456,19 @@ } }, "@react-native-community/cli-plugin-metro": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-8.0.4.tgz", - "integrity": "sha512-UWzY1eMcEr/6262R2+d0Is5M3L/7Y/xXSDIFMoc5Rv5Wucl3hJM/TxHXmByvHpuJf6fJAfqOskyt4bZCvbI+wQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-9.0.0.tgz", + "integrity": "sha512-kKQa2vhkg1HJA/ZBdGX9dFR8WqBGgUe41BX9kinvB5zYmfWeX/JwOxorGKNSmvql88LROckrvZtzH+p9YR0G5g==", "requires": { - "@react-native-community/cli-server-api": "^8.0.4", - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-server-api": "^9.0.0", + "@react-native-community/cli-tools": "^9.0.0", "chalk": "^4.1.2", - "metro": "^0.70.1", - "metro-config": "^0.70.1", - "metro-core": "^0.70.1", - "metro-react-native-babel-transformer": "^0.70.1", - "metro-resolver": "^0.70.1", - "metro-runtime": "^0.70.1", + "metro": "^0.72.1", + "metro-config": "^0.72.1", + "metro-core": "^0.72.1", + "metro-react-native-babel-transformer": "^0.72.1", + "metro-resolver": "^0.72.1", + "metro-runtime": "^0.72.1", "readline": "^1.3.0" }, "dependencies": { @@ -45628,19 +45585,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "hermes-estree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.6.0.tgz", - "integrity": "sha512-2YTGzJCkhdmT6VuNprWjXnvTvw/3iPNw804oc7yknvQpNKo+vJGZmtvLLCghOZf0OwzKaNAzeIMp71zQbNl09w==" - }, - "hermes-parser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.6.0.tgz", - "integrity": "sha512-Vf58jBZca2+QBLR9h7B7mdg8oFz2g5ILz1iVouZ5DOrOrAfBmPfJjdjDT8jrO0f+iJ4/hSRrQHqHIjSnTaLUDQ==", - "requires": { - "hermes-estree": "0.6.0" - } - }, "import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -45650,26 +45594,6 @@ "resolve-from": "^3.0.0" } }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, "jest-regex-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", @@ -45741,9 +45665,9 @@ } }, "metro": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.70.3.tgz", - "integrity": "sha512-uEWS7xg8oTetQDABYNtsyeUjdLhH3KAvLFpaFFoJqUpOk2A3iygszdqmjobFl6W4zrvKDJS+XxdMR1roYvUhTw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.72.2.tgz", + "integrity": "sha512-TWqKnPMu4OX7ew7HJwsD4LBzhtn7Iqeu2OAqjlMCJtqMKqi/YWoxFf1VGZxH/mJVLhbe/5SWU5St/tqsST8swg==", "requires": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.14.0", @@ -45763,27 +45687,27 @@ "error-stack-parser": "^2.0.6", "fs-extra": "^1.0.0", "graceful-fs": "^4.2.4", - "hermes-parser": "0.6.0", + "hermes-parser": "0.8.0", "image-size": "^0.6.0", "invariant": "^2.2.4", - "jest-haste-map": "^27.3.1", "jest-worker": "^27.2.0", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.70.3", - "metro-cache": "0.70.3", - "metro-cache-key": "0.70.3", - "metro-config": "0.70.3", - "metro-core": "0.70.3", - "metro-hermes-compiler": "0.70.3", - "metro-inspector-proxy": "0.70.3", - "metro-minify-uglify": "0.70.3", - "metro-react-native-babel-preset": "0.70.3", - "metro-resolver": "0.70.3", - "metro-runtime": "0.70.3", - "metro-source-map": "0.70.3", - "metro-symbolicate": "0.70.3", - "metro-transform-plugins": "0.70.3", - "metro-transform-worker": "0.70.3", + "metro-babel-transformer": "0.72.2", + "metro-cache": "0.72.2", + "metro-cache-key": "0.72.2", + "metro-config": "0.72.2", + "metro-core": "0.72.2", + "metro-file-map": "0.72.2", + "metro-hermes-compiler": "0.72.2", + "metro-inspector-proxy": "0.72.2", + "metro-minify-uglify": "0.72.2", + "metro-react-native-babel-preset": "0.72.2", + "metro-resolver": "0.72.2", + "metro-runtime": "0.72.2", + "metro-source-map": "0.72.2", + "metro-symbolicate": "0.72.2", + "metro-transform-plugins": "0.72.2", + "metro-transform-worker": "0.72.2", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -45798,62 +45722,81 @@ } }, "metro-babel-transformer": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.70.3.tgz", - "integrity": "sha512-bWhZRMn+mIOR/s3BDpFevWScz9sV8FGktVfMlF1eJBLoX24itHDbXvTktKBYi38PWIKcHedh6THSFpJogfuwNA==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.72.2.tgz", + "integrity": "sha512-3Bxk/MoXHn/ysmsH7ov6inDHrSWz5eowYRGzilOSSXe9y3DJ/ceTHfT+DWsPr9IgTJLQfKVN/F0pZ+1Ndqh52A==", "requires": { "@babel/core": "^7.14.0", - "hermes-parser": "0.6.0", - "metro-source-map": "0.70.3", + "hermes-parser": "0.8.0", + "metro-source-map": "0.72.2", "nullthrows": "^1.1.1" } }, "metro-cache": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.70.3.tgz", - "integrity": "sha512-iCix/+z812fUqa6KlOxaTkY6LQQDoXIe/VljXkGIvpygSCmYyhjQpfQVZEVVPezFmUBYXNdabdQ6cYx6JX3yMg==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.72.2.tgz", + "integrity": "sha512-0Yw3J32eYTp7x7bAAg+a9ScBG/mpib6Wq4WPSYvhoNilPFHzh7knLDMil3WGVCQlI1r+5xtpw/FDhNVKuypQqg==", "requires": { - "metro-core": "0.70.3", + "metro-core": "0.72.2", "rimraf": "^2.5.4" } }, "metro-cache-key": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.70.3.tgz", - "integrity": "sha512-0zpw+IcpM3hmGd5sKMdxNv3sbOIUYnMUvx1/yaM6vNRReSPmOLX0bP8fYf3CGgk8NEreZ1OHbVsuw7bdKt40Mw==" + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.72.2.tgz", + "integrity": "sha512-P8p4QQzbEFMuk81xklc62qdE+CGBjP9u+ECP3iYNXIAW0+apS6Dntyvx/xCLy0a4MIryXqg2EJ2Z8XrmKmNeGQ==" }, "metro-config": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.70.3.tgz", - "integrity": "sha512-SSCDjSTygoCgzoj61DdrBeJzZDRwQxUEfcgc6t6coxWSExXNR4mOngz0q4SAam49Bmjq9J2Jft6qUKnUTPrRgA==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.72.2.tgz", + "integrity": "sha512-rvX4fBctPYEIPtTEcgun7Q+3IwuR5+gMPQrwDhE8hHDHPmFkfrW9UsEqD7VArJFRr0AwXSd7GD+eapFPjXr43Q==", "requires": { "cosmiconfig": "^5.0.5", "jest-validate": "^26.5.2", - "metro": "0.70.3", - "metro-cache": "0.70.3", - "metro-core": "0.70.3", - "metro-runtime": "0.70.3" + "metro": "0.72.2", + "metro-cache": "0.72.2", + "metro-core": "0.72.2", + "metro-runtime": "0.72.2" } }, "metro-core": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.70.3.tgz", - "integrity": "sha512-NzfHB/w5R7yLaOeU1tzPTbBzCRsYSvpKJkLMP0yudszKZzIAZqNdjoEJ9GZ688Wi0ynZxcU0BxukXh4my80ZBw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.72.2.tgz", + "integrity": "sha512-OXNH8UbKIhvpyHGJrdQYnPUmyPHSuVY4OO6pQxODdTW+uiO68PPPgIIVN67vlCAirZolxRFpma70N7m0sGCZyg==", "requires": { - "jest-haste-map": "^27.3.1", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.70.3" + "metro-resolver": "0.72.2" + } + }, + "metro-file-map": { + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.72.2.tgz", + "integrity": "sha512-6LMgsVT2/Ik6sKtzG1T13pwxJYrSX/JtbF5HwOU7Q/L79Mopy9NQnw9hQoXPcnVXA12gbWfp6Va/NnycaTxX+w==", + "requires": { + "abort-controller": "^3.0.0", + "anymatch": "^3.0.3", + "debug": "^2.2.0", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-regex-util": "^27.0.6", + "jest-serializer": "^27.0.6", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", + "micromatch": "^4.0.4", + "walker": "^1.0.7" } }, "metro-hermes-compiler": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.70.3.tgz", - "integrity": "sha512-W6WttLi4E72JL/NyteQ84uxYOFMibe0PUr9aBKuJxxfCq6QRnJKOVcNY0NLW0He2tneXGk+8ZsNz8c0flEvYqg==" + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.72.2.tgz", + "integrity": "sha512-X8fjDBGNwjHxYAlMtrsr8x/JI/Gep7uzLDuHOMuRU5iAIVt+gH0Z+zjbJTsX++yLZ41i755zw5akvpQnyjVl/w==" }, "metro-inspector-proxy": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.70.3.tgz", - "integrity": "sha512-qQoNdPGrmyoJSWYkxSDpTaAI8xyqVdNDVVj9KRm1PG8niSuYmrCCFGLLFsMvkVYwsCWUGHoGBx0UoAzVp14ejw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.72.2.tgz", + "integrity": "sha512-VEJU3J+0qrU33o+5tHemVuRWMXswtSrRI1lTE9yFiU8GAxoKrSy2kfJ5cOPLfv/8Nf6M6zRayjUs/Q46kjvfow==", "requires": { "connect": "^3.6.5", "debug": "^2.2.0", @@ -45862,97 +45805,52 @@ } }, "metro-minify-uglify": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.70.3.tgz", - "integrity": "sha512-oHyjV9WDqOlDE1FPtvs6tIjjeY/oP1PNUPYL1wqyYtqvjN+zzAOrcbsAAL1sv+WARaeiMsWkF2bwtNo+Hghoog==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.72.2.tgz", + "integrity": "sha512-b9KH4vMd1yvBYfcA3xvc1HZmPWIpOhiNyiEjh7pw7il1TONAR0+Rj8TS0yG57eSYM8IB86UIwB7Y5PVCNfUNXQ==", "requires": { "uglify-es": "^3.1.9" } }, - "metro-react-native-babel-preset": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.70.3.tgz", - "integrity": "sha512-4Nxc1zEiHEu+GTdEMEsHnRgfaBkg8f/Td3+FcQ8NTSvs+xL3LBrQy6N07idWSQZHIdGFf+tTHvRfSIWLD8u8Tg==", - "requires": { - "@babel/core": "^7.14.0", - "@babel/plugin-proposal-async-generator-functions": "^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", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.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", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - } - }, "metro-resolver": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.70.3.tgz", - "integrity": "sha512-5Pc5S/Gs4RlLbziuIWtvtFd9GRoILlaRC8RZDVq5JZWcWHywKy/PjNmOBNhpyvtRlzpJfy/ssIfLhu8zINt1Mw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.72.2.tgz", + "integrity": "sha512-5KTWolUgA6ivLkg3DmFS2WltphBPQW7GT7An+6Izk/NU+y/6crmsoaLmNxjpZo4Fv+i/FxDSXqpbpQ6KrRWvlQ==", "requires": { "absolute-path": "^0.0.0" } }, "metro-runtime": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.70.3.tgz", - "integrity": "sha512-22xU7UdXZacniTIDZgN2EYtmfau2pPyh97Dcs+cWrLcJYgfMKjWBtesnDcUAQy3PHekDYvBdJZkoQUeskYTM+w==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.72.2.tgz", + "integrity": "sha512-jIHH6ILSWJtINHA0+KgnH1T5RO5mkf46sQahgC+GYjZjGoshs8+tBdjviYD/xy5s4olCJ1hmycV+XvauQmJdkQ==", "requires": { - "@babel/runtime": "^7.0.0" + "@babel/runtime": "^7.0.0", + "react-refresh": "^0.4.0" } }, "metro-source-map": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.70.3.tgz", - "integrity": "sha512-zsYtZGrwRbbGEFHtmMqqeCH9K9aTGNVPsurMOWCUeQA3VGyVGXPGtLMC+CdAM9jLpUyg6jw2xh0esxi+tYH7Uw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.72.2.tgz", + "integrity": "sha512-dqYK8DZ4NzGkhik0IkKRBLuPplXqF6GoKrFQ/XMw0FYGy3+dFJ9nIDxsCyg3GcjCt6Mg8FEqGrXlpMG7MrtC9Q==", "requires": { "@babel/traverse": "^7.14.0", "@babel/types": "^7.0.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.70.3", + "metro-symbolicate": "0.72.2", "nullthrows": "^1.1.1", - "ob1": "0.70.3", + "ob1": "0.72.2", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "metro-symbolicate": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.70.3.tgz", - "integrity": "sha512-JTYkF1dpeDUssQ84juE1ycnhHki2ylJBBdJE1JHtfu5oC+z1ElDbBdPHq90Uvt8HbRov/ZAnxvv7Zy6asS+WCA==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.72.2.tgz", + "integrity": "sha512-Rn47dSggFU9jf+fpUE6/gkNQU7PQPTIbh2iUu7jI8cJFBODs0PWlI5h0W9XlQ56lcBtjLQz6fvZSloKdDcI2fQ==", "requires": { "invariant": "^2.2.4", - "metro-source-map": "0.70.3", + "metro-source-map": "0.72.2", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -45960,9 +45858,9 @@ } }, "metro-transform-plugins": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.70.3.tgz", - "integrity": "sha512-dQRIJoTkWZN2IVS2KzgS1hs7ZdHDX3fS3esfifPkqFAEwHiLctCf0EsPgIknp0AjMLvmGWfSLJigdRB/dc0ASw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.72.2.tgz", + "integrity": "sha512-f2Zt6ti156TWFrnCRg7vxBIHBJcERBX8nwKmRKGFCbU+rk4YOxwONY4Y0Gn9Kocfu313P1xNqWYH5rCqvEWMaQ==", "requires": { "@babel/core": "^7.14.0", "@babel/generator": "^7.14.0", @@ -45972,22 +45870,22 @@ } }, "metro-transform-worker": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.70.3.tgz", - "integrity": "sha512-MtVVsnHhhBOp9GRLCdAb2mD1dTCsIzT4+m34KMRdBDCEbDIb90YafT5prpU8qbj5uKd0o2FOQdrJ5iy5zQilHw==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.72.2.tgz", + "integrity": "sha512-z5OOnEO3NV6PgI8ORIBvJ5m+u9THFpy+6WIg/MUjP9k1oqasWaP1Rfhv7K/a+MD6uho1rgXj6nwWDqybsqHY/w==", "requires": { "@babel/core": "^7.14.0", "@babel/generator": "^7.14.0", "@babel/parser": "^7.14.0", "@babel/types": "^7.0.0", "babel-preset-fbjs": "^3.4.0", - "metro": "0.70.3", - "metro-babel-transformer": "0.70.3", - "metro-cache": "0.70.3", - "metro-cache-key": "0.70.3", - "metro-hermes-compiler": "0.70.3", - "metro-source-map": "0.70.3", - "metro-transform-plugins": "0.70.3", + "metro": "0.72.2", + "metro-babel-transformer": "0.72.2", + "metro-cache": "0.72.2", + "metro-cache-key": "0.72.2", + "metro-hermes-compiler": "0.72.2", + "metro-source-map": "0.72.2", + "metro-transform-plugins": "0.72.2", "nullthrows": "^1.1.1" } }, @@ -45997,9 +45895,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "ob1": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.70.3.tgz", - "integrity": "sha512-Vy9GGhuXgDRY01QA6kdhToPd8AkLdLpX9GjH5kpqluVqTu70mgOm7tpGoJDZGaNbr9nJlJgnipqHJQRPORixIQ==" + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.72.2.tgz", + "integrity": "sha512-P4zh/5GzyXPIzz+2eq2Hjd1wTZAfpwTIBWKhYx8X/DD2wCuFVprBEZp1FerWyTMwOA6AnVxiX1h0JE1v/s+PAQ==" }, "p-limit": { "version": "2.3.0", @@ -46113,12 +46011,12 @@ } }, "@react-native-community/cli-server-api": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-8.0.4.tgz", - "integrity": "sha512-Orr14njx1E70CVrUA8bFdl+mrnbuXUjf1Rhhm0RxUadFpvkHuOi5dh8Bryj2MKtf8eZrpEwZ7tuQPhJEULW16A==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-9.0.0.tgz", + "integrity": "sha512-4b7yOsTeqZGBD7eIczjMkzegvegIRQGT0lLtofNCpI5Gof0vMYpo1rM2cY76TgjIQiBhVA0pVKcfXUD/u9BA9Q==", "requires": { - "@react-native-community/cli-debugger-ui": "^8.0.0", - "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-debugger-ui": "^9.0.0", + "@react-native-community/cli-tools": "^9.0.0", "compression": "^1.7.1", "connect": "^3.6.5", "errorhandler": "^1.5.0", @@ -46179,14 +46077,13 @@ } }, "@react-native-community/cli-tools": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-8.0.4.tgz", - "integrity": "sha512-ePN9lGxh6LRFiotyddEkSmuqpQhnq2iw9oiXYr4EFWpIEy0yCigTuSTiDF68+c8M9B+7bTwkRpz/rMPC4ViO5Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-9.0.0.tgz", + "integrity": "sha512-qv8e9i4ybdRVw2VxolvVGv1mH9lMhstEuMvxvpwqHGNhTyevwpdVevuR5D/lbPz2EXogQpnMdQMLCiDoxxV4Ow==", "requires": { "appdirsjs": "^1.2.4", "chalk": "^4.1.2", "find-up": "^5.0.0", - "lodash": "^4.17.15", "mime": "^2.4.1", "node-fetch": "^2.6.0", "open": "^6.2.0", @@ -46259,9 +46156,9 @@ } }, "@react-native-community/cli-types": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-8.0.0.tgz", - "integrity": "sha512-1lZS1PEvMlFaN3Se1ksyoFWzMjk+YfKi490GgsqKJln9gvFm8tqVPdnXttI5Uf2DQf3BMse8Bk8dNH4oV6Ewow==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-9.0.0.tgz", + "integrity": "sha512-EsDHzJwGA7Fkb1TErxiWMZIu50836NKgX3/dzPTwI/5KfvGPRjt4sBHvKJ7cQVMe1IgHwPhcO6izjcK69MPjTA==", "requires": { "joi": "^17.2.1" } @@ -46411,9 +46308,9 @@ } }, "@react-navigation/elements": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.4.tgz", - "integrity": "sha512-O0jICpjn3jskVo4yiWzZozmj7DZy1ZBbn3O7dbenuUjZSj/cscjwaapmZZFGcI/IMmjmx8UTKsybhCFEIbGf3g==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.5.tgz", + "integrity": "sha512-3Ef5cYuQXqJRco7RG99fkDEciAuYTkAD7go5D8RFYG8rAp2aI/cDnGwFwvFVANlRsbFFPGU3ZLY8EUJihf4Hjw==", "requires": {} }, "@react-navigation/native": { @@ -50847,6 +50744,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, "requires": { "@types/node": "*" } @@ -51051,9 +50949,9 @@ "dev": true }, "@types/react": { - "version": "18.0.17", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.17.tgz", - "integrity": "sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==", + "version": "18.0.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.18.tgz", + "integrity": "sha512-6hI08umYs6NaiHFEEGioXnxJ+oEhY3eRz8VCUaudZmGdtvPviCJB8mgaMxaDWAdPSYd4eFavrPk2QIolwbLYrg==", "peer": true, "requires": { "@types/prop-types": "*", @@ -51062,9 +50960,9 @@ } }, "@types/react-native": { - "version": "0.69.5", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.69.5.tgz", - "integrity": "sha512-mSUCuGUsW2kJlZiu4GmdYVDKZX/52iyC9rm6dxAmflJj1b7kSO/CMSDy5WbcfS8QerxTqbYGTrIwHD0GnXHzbQ==", + "version": "0.69.7", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.69.7.tgz", + "integrity": "sha512-IVWswgynlIfYLJHegI4ABCO+7p5sY+vq4/+lHV/NKVZ9WjZj9HrBsLJjWAqO1fMywyAaR8gGMSUtAilu5e2E3A==", "peer": true, "requires": { "@types/react": "*" @@ -59991,11 +59889,6 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, - "hermes-engine": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.11.0.tgz", - "integrity": "sha512-7aMUlZja2IyLYAcZ69NBnwJAR5ZOYlSllj0oMpx08a8HzxHOys0eKCzfphrf6D0vX1JGO1QQvVsQKe6TkYherw==" - }, "hermes-estree": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.8.0.tgz", @@ -62956,11 +62849,6 @@ } } }, - "jetifier": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", - "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==" - }, "joi": { "version": "17.6.0", "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", @@ -64418,6 +64306,52 @@ "p-locate": "^4.1.0" } }, + "metro-react-native-babel-preset": { + "version": "0.71.3", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.71.3.tgz", + "integrity": "sha512-ym8xeoK/5fY/TsQPQXVnJN822NB9TZglxc2XVk+DM8kJO0XacWh2GtDRFeFHEehVsYWpIZeaDPF2XES+YU5mhA==", + "requires": { + "@babel/core": "^7.14.0", + "@babel/plugin-proposal-async-generator-functions": "^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", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.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", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -64444,6 +64378,11 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, + "react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==" + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -64910,9 +64849,9 @@ } }, "metro-react-native-babel-preset": { - "version": "0.71.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.71.3.tgz", - "integrity": "sha512-ym8xeoK/5fY/TsQPQXVnJN822NB9TZglxc2XVk+DM8kJO0XacWh2GtDRFeFHEehVsYWpIZeaDPF2XES+YU5mhA==", + "version": "0.72.2", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.2.tgz", + "integrity": "sha512-OMp77TUUZAoiuUv5uKNc08AnJNQxD28k92eQvo8tPcA8Wx6OZlEUvL7M7SFkef2mEYJ0vnrRjOamSnbBuq/+1w==", "requires": { "@babel/core": "^7.14.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", @@ -64963,47 +64902,34 @@ } }, "metro-react-native-babel-transformer": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.70.3.tgz", - "integrity": "sha512-WKBU6S/G50j9cfmFM4k4oRYprd8u3qjleD4so1E2zbTNILg+gYla7ZFGCAvi2G0ZcqS2XuGCR375c2hF6VVvwg==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.72.1.tgz", + "integrity": "sha512-hMnN0MOgVloAk94YuXN7sLeDaZ51Y6xIcJXxIU1s/KaygAGXk6o7VAdwf2MY/IV1SIct5lkW4Gn71u/9/EvfXA==", "requires": { "@babel/core": "^7.14.0", "babel-preset-fbjs": "^3.4.0", - "hermes-parser": "0.6.0", - "metro-babel-transformer": "0.70.3", - "metro-react-native-babel-preset": "0.70.3", - "metro-source-map": "0.70.3", + "hermes-parser": "0.8.0", + "metro-babel-transformer": "0.72.1", + "metro-react-native-babel-preset": "0.72.1", + "metro-source-map": "0.72.1", "nullthrows": "^1.1.1" }, "dependencies": { - "hermes-estree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.6.0.tgz", - "integrity": "sha512-2YTGzJCkhdmT6VuNprWjXnvTvw/3iPNw804oc7yknvQpNKo+vJGZmtvLLCghOZf0OwzKaNAzeIMp71zQbNl09w==" - }, - "hermes-parser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.6.0.tgz", - "integrity": "sha512-Vf58jBZca2+QBLR9h7B7mdg8oFz2g5ILz1iVouZ5DOrOrAfBmPfJjdjDT8jrO0f+iJ4/hSRrQHqHIjSnTaLUDQ==", - "requires": { - "hermes-estree": "0.6.0" - } - }, "metro-babel-transformer": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.70.3.tgz", - "integrity": "sha512-bWhZRMn+mIOR/s3BDpFevWScz9sV8FGktVfMlF1eJBLoX24itHDbXvTktKBYi38PWIKcHedh6THSFpJogfuwNA==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.72.1.tgz", + "integrity": "sha512-VK7A9gepnhrKC0DMoxtPjYYHjkkfNwzLMYJgeL6Il6IaX/K/VHTILSEqgpxfNDos2jrXazuR5+rXDLE/RCzqmw==", "requires": { "@babel/core": "^7.14.0", - "hermes-parser": "0.6.0", - "metro-source-map": "0.70.3", + "hermes-parser": "0.8.0", + "metro-source-map": "0.72.1", "nullthrows": "^1.1.1" } }, "metro-react-native-babel-preset": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.70.3.tgz", - "integrity": "sha512-4Nxc1zEiHEu+GTdEMEsHnRgfaBkg8f/Td3+FcQ8NTSvs+xL3LBrQy6N07idWSQZHIdGFf+tTHvRfSIWLD8u8Tg==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.1.tgz", + "integrity": "sha512-DlvMw2tFrCqD9OXBoN11fPM09kHC22FZpnkTmG4Pr4kecV+aDmEGxwakjUcjELrX1JCXz2MLPvqeJkbiP1f5CA==", "requires": { "@babel/core": "^7.14.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", @@ -65047,27 +64973,27 @@ } }, "metro-source-map": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.70.3.tgz", - "integrity": "sha512-zsYtZGrwRbbGEFHtmMqqeCH9K9aTGNVPsurMOWCUeQA3VGyVGXPGtLMC+CdAM9jLpUyg6jw2xh0esxi+tYH7Uw==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.72.1.tgz", + "integrity": "sha512-77TZuf10Ru+USo97HwDT8UceSzOGBZB8EYTObOsR0n1sjQHjvKsMflLA9Pco13o9NsIYAG6c6P/0vIpiHKqaKA==", "requires": { "@babel/traverse": "^7.14.0", "@babel/types": "^7.0.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.70.3", + "metro-symbolicate": "0.72.1", "nullthrows": "^1.1.1", - "ob1": "0.70.3", + "ob1": "0.72.1", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "metro-symbolicate": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.70.3.tgz", - "integrity": "sha512-JTYkF1dpeDUssQ84juE1ycnhHki2ylJBBdJE1JHtfu5oC+z1ElDbBdPHq90Uvt8HbRov/ZAnxvv7Zy6asS+WCA==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.72.1.tgz", + "integrity": "sha512-ScC3dVd2XrfZSd6kubOw7EJNp2oHdjrqOjGpFohtcXGjhqkzDosp7Fg84VgwQGN8g720xvUyEBfSMmUCXcicOQ==", "requires": { "invariant": "^2.2.4", - "metro-source-map": "0.70.3", + "metro-source-map": "0.72.1", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -65075,9 +65001,9 @@ } }, "ob1": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.70.3.tgz", - "integrity": "sha512-Vy9GGhuXgDRY01QA6kdhToPd8AkLdLpX9GjH5kpqluVqTu70mgOm7tpGoJDZGaNbr9nJlJgnipqHJQRPORixIQ==" + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.72.1.tgz", + "integrity": "sha512-TyQX2gO08klGTMuzD+xm3iVrzXiIygCB7t+NWeicOR05hkzgeWOiAZ8q40uMfIDRfEAc6hd66sJdIEhU/yUZZA==" }, "react-refresh": { "version": "0.4.3", @@ -67212,9 +67138,9 @@ } }, "react": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.0.0.tgz", - "integrity": "sha512-x+VL6wbT4JRVPm7EGxXhZ8w8LTROaxPXOqhlGyVSrv0sB1jkyFGgXxJ8LVoPRLvPR6/CIZGFmfzqUa2NYeMr2A==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "requires": { "loose-envify": "^1.1.0" } @@ -67282,12 +67208,12 @@ "requires": {} }, "react-dom": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.0.0.tgz", - "integrity": "sha512-XqX7uzmFo0pUceWFCt7Gff6IyIMzFUn7QMZrbrQfGxtaxXZIcGQzoNpRLE3fQLnS4XzLLPMZX2T9TRcSrasicw==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "requires": { "loose-envify": "^1.1.0", - "scheduler": "^0.21.0" + "scheduler": "^0.23.0" } }, "react-freeze": { @@ -67302,14 +67228,14 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-native": { - "version": "npm:@expensify/react-native@0.69.4", - "resolved": "https://registry.npmjs.org/@expensify/react-native/-/react-native-0.69.4.tgz", - "integrity": "sha512-iLD9w+fPNIe47CBDP2Wvy44tn/AajWwLiznGiNHVV/ZijhtxTRRFawmhfXFpqHWT/Z2xb9hp/sC0HNp0yJPJOA==", + "version": "npm:@expensify/react-native@0.70.1", + "resolved": "https://registry.npmjs.org/@expensify/react-native/-/react-native-0.70.1.tgz", + "integrity": "sha512-PRJ8La+sy0EWEYCS/SiCpiHVesJGTKYzf9aQzzAXbpSp4AUTVOINP1KeLSWb272xXySCFEF9/l5ssO+cnWUsSQ==", "requires": { "@jest/create-cache-key-function": "^27.0.1", - "@react-native-community/cli": "^8.0.4", - "@react-native-community/cli-platform-android": "^8.0.4", - "@react-native-community/cli-platform-ios": "^8.0.4", + "@react-native-community/cli": "^9.0.0", + "@react-native-community/cli-platform-android": "^9.0.0", + "@react-native-community/cli-platform-ios": "^9.0.0", "@react-native/assets": "1.0.0", "@react-native/normalize-color": "2.0.0", "@react-native/polyfills": "2.0.0", @@ -67317,24 +67243,23 @@ "anser": "^1.4.9", "base64-js": "^1.1.2", "event-target-shim": "^5.0.1", - "hermes-engine": "~0.11.0", "invariant": "^2.2.4", "jsc-android": "^250230.2.1", "memoize-one": "^5.0.0", - "metro-react-native-babel-transformer": "0.70.3", - "metro-runtime": "0.70.3", - "metro-source-map": "0.70.3", + "metro-react-native-babel-transformer": "0.72.1", + "metro-runtime": "0.72.1", + "metro-source-map": "0.72.1", "mkdirp": "^0.5.1", "nullthrows": "^1.1.1", "pretty-format": "^26.5.2", "promise": "^8.0.3", "react-devtools-core": "4.24.0", - "react-native-codegen": "^0.69.1", - "react-native-gradle-plugin": "^0.0.7", + "react-native-codegen": "^0.71.0", + "react-native-gradle-plugin": "^0.71.0", "react-refresh": "^0.4.0", - "react-shallow-renderer": "16.15.0", + "react-shallow-renderer": "^16.15.0", "regenerator-runtime": "^0.13.2", - "scheduler": "^0.21.0", + "scheduler": "^0.23.0", "stacktrace-parser": "^0.1.3", "use-sync-external-store": "^1.0.0", "whatwg-fetch": "^3.0.0", @@ -67373,35 +67298,36 @@ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" }, "metro-runtime": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.70.3.tgz", - "integrity": "sha512-22xU7UdXZacniTIDZgN2EYtmfau2pPyh97Dcs+cWrLcJYgfMKjWBtesnDcUAQy3PHekDYvBdJZkoQUeskYTM+w==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.72.1.tgz", + "integrity": "sha512-CO+fvJKYHKuR2vo7kjsegQ2oF3FMwa4YhnUInQ+xPVxWoy8DbOpmruKBoTsQVgHwyIziXzvJa+mze/6CFvT+3A==", "requires": { - "@babel/runtime": "^7.0.0" + "@babel/runtime": "^7.0.0", + "react-refresh": "^0.4.0" } }, "metro-source-map": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.70.3.tgz", - "integrity": "sha512-zsYtZGrwRbbGEFHtmMqqeCH9K9aTGNVPsurMOWCUeQA3VGyVGXPGtLMC+CdAM9jLpUyg6jw2xh0esxi+tYH7Uw==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.72.1.tgz", + "integrity": "sha512-77TZuf10Ru+USo97HwDT8UceSzOGBZB8EYTObOsR0n1sjQHjvKsMflLA9Pco13o9NsIYAG6c6P/0vIpiHKqaKA==", "requires": { "@babel/traverse": "^7.14.0", "@babel/types": "^7.0.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.70.3", + "metro-symbolicate": "0.72.1", "nullthrows": "^1.1.1", - "ob1": "0.70.3", + "ob1": "0.72.1", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "metro-symbolicate": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.70.3.tgz", - "integrity": "sha512-JTYkF1dpeDUssQ84juE1ycnhHki2ylJBBdJE1JHtfu5oC+z1ElDbBdPHq90Uvt8HbRov/ZAnxvv7Zy6asS+WCA==", + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.72.1.tgz", + "integrity": "sha512-ScC3dVd2XrfZSd6kubOw7EJNp2oHdjrqOjGpFohtcXGjhqkzDosp7Fg84VgwQGN8g720xvUyEBfSMmUCXcicOQ==", "requires": { "invariant": "^2.2.4", - "metro-source-map": "0.70.3", + "metro-source-map": "0.72.1", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -67417,9 +67343,9 @@ } }, "ob1": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.70.3.tgz", - "integrity": "sha512-Vy9GGhuXgDRY01QA6kdhToPd8AkLdLpX9GjH5kpqluVqTu70mgOm7tpGoJDZGaNbr9nJlJgnipqHJQRPORixIQ==" + "version": "0.72.1", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.72.1.tgz", + "integrity": "sha512-TyQX2gO08klGTMuzD+xm3iVrzXiIygCB7t+NWeicOR05hkzgeWOiAZ8q40uMfIDRfEAc6hd66sJdIEhU/yUZZA==" }, "pretty-format": { "version": "26.6.2", @@ -67489,9 +67415,9 @@ "dev": true }, "react-native-codegen": { - "version": "0.69.1", - "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.69.1.tgz", - "integrity": "sha512-TOZEqBarczcyYN3iZE3VpKkooOevaAzBq9n7lU0h9mQUvtRhLVyolc+a5K6cWI0e4v4K69I0MqzjPcPeFKo32Q==", + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.71.0.tgz", + "integrity": "sha512-QkZapZx7vLNcszJHNkkIaZwsfGiI0quuq3ejJW2C3jMNT+Ed2lkuI8G/sfXAQOWQgX7/9iaeGDxE9Rjiz8EkAg==", "requires": { "@babel/parser": "^7.14.0", "flow-parser": "^0.121.0", @@ -67555,9 +67481,9 @@ } }, "react-native-gradle-plugin": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.7.tgz", - "integrity": "sha512-+4JpbIx42zGTONhBTIXSyfyHICHC29VTvhkkoUOJAh/XHPEixpuBduYgf6Y4y9wsN1ARlQhBBoptTvXvAFQf5g==" + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.0.tgz", + "integrity": "sha512-hQyRvWjQH9uozYciy/SmsgXuxlHGSauvtotitJsXB0nwBO/luWHmH1rzHN4vS/9oHQm6x6uJNAedbPgTZwXb5g==" }, "react-native-haptic-feedback": { "version": "1.14.0", @@ -67952,14 +67878,14 @@ } }, "react-test-renderer": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.0.0.tgz", - "integrity": "sha512-SyZTP/FSkwfiKOZuTZiISzsrC8A80KNlQ8PyyoGoOq+VzMAab6Em1POK/CiX3+XyXG6oiJa1C53zYDbdrJu9fw==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.1.0.tgz", + "integrity": "sha512-OfuueprJFW7h69GN+kr4Ywin7stcuqaYAt1g7airM5cUgP0BoF5G5CXsPGmXeDeEkncb2fqYNECO4y18sSqphg==", "dev": true, "requires": { - "react-is": "^18.0.0", - "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.21.0" + "react-is": "^18.1.0", + "react-shallow-renderer": "^16.15.0", + "scheduler": "^0.22.0" }, "dependencies": { "react-is": { @@ -67967,6 +67893,15 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true + }, + "scheduler": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz", + "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0" + } } } }, @@ -69375,9 +69310,9 @@ } }, "scheduler": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz", - "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "requires": { "loose-envify": "^1.1.0" } diff --git a/package.json b/package.json index 8e539460aca..094b31c8b3e 100644 --- a/package.json +++ b/package.json @@ -43,9 +43,9 @@ "@formatjs/intl-numberformat": "^6.2.5", "@formatjs/intl-pluralrules": "^4.0.13", "@oguzhnatly/react-native-image-manipulator": "github:Expensify/react-native-image-manipulator#c5f654fc9d0ad7cc5b89d50b34ecf8b0e3f4d050", - "@onfido/react-native-sdk": "github:Expensify/react-native-sdk#5d36f3128c4798a767782c8bc565ace30308edba", + "@onfido/react-native-sdk": "github:Expensify/react-native-sdk#d70947f263b2e59899d82f8d1ef3841d053927ff", "@pieter-pot/react-native-fast-image": "8.5.11", - "@react-native-async-storage/async-storage": "^1.17.7", + "@react-native-async-storage/async-storage": "^1.17.10", "@react-native-community/cameraroll": "git+https://github.com/react-native-cameraroll/react-native-cameraroll.git#3f0aed96db68e134f199171c7b06c1b4d6cb382b", "@react-native-community/clipboard": "^1.5.1", "@react-native-community/datetimepicker": "^3.5.2", @@ -79,11 +79,11 @@ "process": "^0.11.10", "prop-types": "^15.7.2", "pusher-js": "^7.0.6", - "react": "18.0.0", + "react": "18.2.0", "react-collapse": "^5.1.0", "react-content-loader": "^6.1.0", - "react-dom": "18.0.0", - "react-native": "npm:@expensify/react-native@0.69.4", + "react-dom": "18.2.0", + "react-native": "npm:@expensify/react-native@0.70.1", "react-native-blob-util": "^0.16.2", "react-native-collapsible": "^1.6.0", "react-native-config": "^1.4.5", @@ -167,7 +167,7 @@ "jest": "^26.6.3", "jest-circus": "^26.6.3", "jest-cli": "^26.6.3", - "metro-react-native-babel-preset": "^0.71.3", + "metro-react-native-babel-preset": "^0.72.1", "mock-fs": "^4.13.0", "portfinder": "^1.0.28", "pusher-js-mock": "^0.3.3", @@ -175,7 +175,7 @@ "react-native-flipper": "https://gitpkg.now.sh/facebook/flipper/react-native/react-native-flipper?9cacc9b59402550eae866e0e81e5f0c2f8203e6b", "react-native-performance-flipper-reporter": "^2.0.0", "react-native-svg-transformer": "^0.14.3", - "react-test-renderer": "18.0.0", + "react-test-renderer": "18.1.0", "semver": "^7.3.4", "style-loader": "^2.0.0", "wait-port": "^0.2.9", From 32125f8659ffc0537c1c559ff7db713a0bc0e9ee Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 7 Sep 2022 15:01:22 +0100 Subject: [PATCH 13/73] Bump react-test-renderer to 18.2.0 --- package-lock.json | 42 ++++++++++++------------------------------ package.json | 2 +- 2 files changed, 13 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index f5316164607..0e210a1ecfd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -148,7 +148,7 @@ "react-native-flipper": "https://gitpkg.now.sh/facebook/flipper/react-native/react-native-flipper?9cacc9b59402550eae866e0e81e5f0c2f8203e6b", "react-native-performance-flipper-reporter": "^2.0.0", "react-native-svg-transformer": "^0.14.3", - "react-test-renderer": "18.1.0", + "react-test-renderer": "18.2.0", "semver": "^7.3.4", "style-loader": "^2.0.0", "wait-port": "^0.2.9", @@ -34490,17 +34490,17 @@ } }, "node_modules/react-test-renderer": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.1.0.tgz", - "integrity": "sha512-OfuueprJFW7h69GN+kr4Ywin7stcuqaYAt1g7airM5cUgP0BoF5G5CXsPGmXeDeEkncb2fqYNECO4y18sSqphg==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.2.0.tgz", + "integrity": "sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==", "dev": true, "dependencies": { - "react-is": "^18.1.0", + "react-is": "^18.2.0", "react-shallow-renderer": "^16.15.0", - "scheduler": "^0.22.0" + "scheduler": "^0.23.0" }, "peerDependencies": { - "react": "^18.1.0" + "react": "^18.2.0" } }, "node_modules/react-test-renderer/node_modules/react-is": { @@ -34509,15 +34509,6 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, - "node_modules/react-test-renderer/node_modules/scheduler": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz", - "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/react-web-config": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/react-web-config/-/react-web-config-1.0.0.tgz", @@ -67878,14 +67869,14 @@ } }, "react-test-renderer": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.1.0.tgz", - "integrity": "sha512-OfuueprJFW7h69GN+kr4Ywin7stcuqaYAt1g7airM5cUgP0BoF5G5CXsPGmXeDeEkncb2fqYNECO4y18sSqphg==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.2.0.tgz", + "integrity": "sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==", "dev": true, "requires": { - "react-is": "^18.1.0", + "react-is": "^18.2.0", "react-shallow-renderer": "^16.15.0", - "scheduler": "^0.22.0" + "scheduler": "^0.23.0" }, "dependencies": { "react-is": { @@ -67893,15 +67884,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true - }, - "scheduler": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz", - "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0" - } } } }, diff --git a/package.json b/package.json index 094b31c8b3e..ca2ca9089df 100644 --- a/package.json +++ b/package.json @@ -175,7 +175,7 @@ "react-native-flipper": "https://gitpkg.now.sh/facebook/flipper/react-native/react-native-flipper?9cacc9b59402550eae866e0e81e5f0c2f8203e6b", "react-native-performance-flipper-reporter": "^2.0.0", "react-native-svg-transformer": "^0.14.3", - "react-test-renderer": "18.1.0", + "react-test-renderer": "18.2.0", "semver": "^7.3.4", "style-loader": "^2.0.0", "wait-port": "^0.2.9", From 5111caa10d9e4f32a93d03ec1d30040f0cf147d4 Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 7 Sep 2022 15:40:10 +0100 Subject: [PATCH 14/73] Rename loadLibrary call --- .../modules/MainApplicationTurboModuleManagerDelegate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/src/main/java/com/expensify/chat/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java b/android/app/src/main/java/com/expensify/chat/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java index 1781cfd57ca..0e0e3fefa32 100644 --- a/android/app/src/main/java/com/expensify/chat/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java +++ b/android/app/src/main/java/com/expensify/chat/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java @@ -41,7 +41,7 @@ protected synchronized void maybeLoadOtherSoLibraries() { if (!sIsSoLibraryLoaded) { // If you change the name of your application .so file in the Android.mk file, // make sure you update the name here as well. - SoLoader.loadLibrary("rndiffapp_appmodules"); + SoLoader.loadLibrary("newexpensify_appmodules"); sIsSoLibraryLoaded = true; } } From 17394dab1089d9741f80368676feec047cfe9f61 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 12 Sep 2022 18:05:59 -0400 Subject: [PATCH 15/73] Revert "partial revert" This reverts commit 46c7c43c2b231e48f56948f8e71a0c9421a5fdcc. --- src/CONST.js | 1 - src/libs/Navigation/AppNavigator/AuthScreens.js | 9 +-------- src/libs/Navigation/AppNavigator/index.js | 5 +---- src/libs/Navigation/NavigationRoot.js | 14 +------------- 4 files changed, 3 insertions(+), 26 deletions(-) diff --git a/src/CONST.js b/src/CONST.js index a2dbc0ef947..78a2c2a8896 100755 --- a/src/CONST.js +++ b/src/CONST.js @@ -670,7 +670,6 @@ const CONST = { FREE: 'free', PERSONAL: 'personal', CORPORATE: 'corporate', - TEAM: 'team', }, ROLE: { ADMIN: 'admin', diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.js b/src/libs/Navigation/AppNavigator/AuthScreens.js index a363dd84ba9..3454a684784 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.js +++ b/src/libs/Navigation/AppNavigator/AuthScreens.js @@ -3,7 +3,6 @@ import Onyx, {withOnyx} from 'react-native-onyx'; import moment from 'moment'; import _ from 'underscore'; import lodashGet from 'lodash/get'; -import PropTypes from 'prop-types'; import * as StyleUtils from '../../../styles/StyleUtils'; import withWindowDimensions, {windowDimensionsPropTypes} from '../../../components/withWindowDimensions'; import CONST from '../../../CONST'; @@ -87,9 +86,6 @@ const modalScreenListeners = { const propTypes = { ...windowDimensionsPropTypes, - - /** The current path as reported by the NavigationContainer */ - currentPath: PropTypes.string.isRequired, }; class AuthScreens extends React.Component { @@ -116,6 +112,7 @@ class AuthScreens extends React.Component { // Listen for report changes and fetch some data we need on initialization UnreadIndicatorUpdater.listenForReportChanges(); App.openApp(); + App.setUpPoliciesAndNavigate(this.props.session); Timing.end(CONST.TIMING.HOMEPAGE_INITIAL_RENDER); const searchShortcutConfig = CONST.KEYBOARD_SHORTCUTS.SEARCH; @@ -133,10 +130,6 @@ class AuthScreens extends React.Component { } shouldComponentUpdate(nextProps) { - // we perform this check here instead of componentDidUpdate to skip an unnecessary re-render - if (this.props.currentPath !== nextProps.currentPath) { - App.setUpPoliciesAndNavigate(nextProps.session, nextProps.currentPath); - } return nextProps.isSmallScreenWidth !== this.props.isSmallScreenWidth; } diff --git a/src/libs/Navigation/AppNavigator/index.js b/src/libs/Navigation/AppNavigator/index.js index b1f53844dcb..6a7b910ebae 100644 --- a/src/libs/Navigation/AppNavigator/index.js +++ b/src/libs/Navigation/AppNavigator/index.js @@ -6,9 +6,6 @@ import AuthScreens from './AuthScreens'; const propTypes = { /** If we have an authToken this is true */ authenticated: PropTypes.bool.isRequired, - - /** The current path as reported by the NavigationContainer */ - currentPath: PropTypes.string.isRequired, }; const AppNavigator = props => ( @@ -16,7 +13,7 @@ const AppNavigator = props => ( ? ( // These are the protected screens and only accessible when an authToken is present - + ) : ( diff --git a/src/libs/Navigation/NavigationRoot.js b/src/libs/Navigation/NavigationRoot.js index 57fd9ccd030..4002c0101c3 100644 --- a/src/libs/Navigation/NavigationRoot.js +++ b/src/libs/Navigation/NavigationRoot.js @@ -28,16 +28,6 @@ const propTypes = { }; class NavigationRoot extends Component { - constructor(props) { - super(props); - - this.state = { - currentPath: '', - }; - - this.parseAndLogRoute = this.parseAndLogRoute.bind(this); - } - /** * Intercept navigation state changes and log it * @param {NavigationState} state @@ -57,8 +47,6 @@ class NavigationRoot extends Component { } UnreadIndicatorUpdater.throttledUpdatePageTitleAndUnreadCount(); - - this.setState({currentPath}); } render() { @@ -79,7 +67,7 @@ class NavigationRoot extends Component { enabled: false, }} > - + ); } From 8f4ec05430394ed3601f25f2079e478b221dfbf9 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 12 Sep 2022 18:23:43 -0400 Subject: [PATCH 16/73] navigate to exitTo when we're already logged in --- src/pages/LogOutPreviousUserPage.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/pages/LogOutPreviousUserPage.js b/src/pages/LogOutPreviousUserPage.js index d9d36602721..85ef92887e5 100644 --- a/src/pages/LogOutPreviousUserPage.js +++ b/src/pages/LogOutPreviousUserPage.js @@ -7,6 +7,8 @@ import ONYXKEYS from '../ONYXKEYS'; import * as Session from '../libs/actions/Session'; import FullScreenLoadingIndicator from '../components/FullscreenLoadingIndicator'; import * as SessionUtils from '../libs/SessionUtils'; +import Navigation from '../libs/Navigation/Navigation'; +import ROUTES from '../ROUTES'; const propTypes = { /** The data about the current session which will be set once the user is authenticated and we return to this component as an AuthScreen */ @@ -24,6 +26,10 @@ class LogOutPreviousUserPage extends Component { const isLoggingInAsNewUser = SessionUtils.isLoggingInAsNewUser(transitionURL, sessionEmail); if (isLoggingInAsNewUser) { Session.signOutAndRedirectToSignIn(); + } else { + const exitTo = lodashGet(this.props, 'route.params.exitTo'); + Navigation.dismissModal(); + Navigation.navigate(exitTo || ROUTES.HOME); } }); } From 458cc16f9e07b6a8459bb8cb77a7d60c09a54422 Mon Sep 17 00:00:00 2001 From: aimane-chnaif Date: Tue, 13 Sep 2022 20:50:16 -0600 Subject: [PATCH 17/73] auto focus on search field after navigating directly to search page --- src/pages/home/report/ReportActionCompose.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/home/report/ReportActionCompose.js b/src/pages/home/report/ReportActionCompose.js index a82101de219..c7fb2872698 100755 --- a/src/pages/home/report/ReportActionCompose.js +++ b/src/pages/home/report/ReportActionCompose.js @@ -592,7 +592,7 @@ class ReportActionCompose extends React.Component { Date: Thu, 15 Sep 2022 22:37:49 +0700 Subject: [PATCH 18/73] fix: 10510 ellipsis is not showing up in medium screen width --- src/CONST.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CONST.js b/src/CONST.js index d0c875389e7..d5f7bf3af51 100755 --- a/src/CONST.js +++ b/src/CONST.js @@ -312,7 +312,7 @@ const CONST = { RESERVED_ROOM_NAMES: ['#admins', '#announce'], MAX_PREVIEW_AVATARS: 4, MAX_ROOM_NAME_LENGTH: 80, - LAST_MESSAGE_TEXT_MAX_LENGTH: 80, + LAST_MESSAGE_TEXT_MAX_LENGTH: 200, }, COMPOSER: { MAX_LINES: 16, From 475e13f9c77201ab7d1439620a96b3db03173023 Mon Sep 17 00:00:00 2001 From: Rushat Gabhane Date: Fri, 16 Sep 2022 05:15:08 +0530 Subject: [PATCH 19/73] RoomNameInput - rm setNativeProps --- src/components/RoomNameInput.js | 8 ++++---- src/pages/ReportSettingsPage.js | 7 +------ 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/components/RoomNameInput.js b/src/components/RoomNameInput.js index 8bd14fe9408..8516763ee88 100644 --- a/src/components/RoomNameInput.js +++ b/src/components/RoomNameInput.js @@ -12,8 +12,8 @@ const propTypes = { /** Callback to execute when the text input is modified correctly */ onChangeText: PropTypes.func, - /** Initial room name to show in input field. This should include the '#' already prefixed to the name */ - initialValue: PropTypes.string, + /** Room name to show in input field. This should include the '#' already prefixed to the name */ + value: PropTypes.string, /** Whether we should show the input as disabled */ disabled: PropTypes.bool, @@ -50,7 +50,7 @@ const propTypes = { const defaultProps = { onChangeText: () => {}, - initialValue: '', + value: '', disabled: false, errorText: '', ...fullPolicyDefaultProps, @@ -101,7 +101,7 @@ class RoomNameInput extends Component { prefixCharacter={CONST.POLICY.ROOM_PREFIX} placeholder={this.props.translate('newRoomPage.social')} onChange={this.setModifiedRoomName} - defaultValue={this.props.initialValue.substring(1)} // Since the room name always starts with a prefix, we omit the first character to avoid displaying it twice. + value={this.props.value.substring(1)} // Since the room name always starts with a prefix, we omit the first character to avoid displaying it twice. errorText={this.props.errorText} autoCapitalize="none" /> diff --git a/src/pages/ReportSettingsPage.js b/src/pages/ReportSettingsPage.js index 9efc59dc940..0ba0ea99644 100644 --- a/src/pages/ReportSettingsPage.js +++ b/src/pages/ReportSettingsPage.js @@ -125,11 +125,6 @@ class ReportSettingsPage extends Component { */ resetToPreviousName() { this.setState({newRoomName: this.props.report.reportName}); - - // Reset the input's value back to the previously saved report name - if (this.roomNameInputRef) { - this.roomNameInputRef.setNativeProps({text: this.props.report.reportName.replace(CONST.POLICY.ROOM_PREFIX, '')}); - } Report.clearPolicyRoomNameErrors(this.props.report.reportID); } @@ -229,7 +224,7 @@ class ReportSettingsPage extends Component { : ( this.roomNameInputRef = el} - initialValue={this.state.newRoomName} + value={this.state.newRoomName} policyID={linkedWorkspace && linkedWorkspace.id} errorText={this.state.errors.newRoomName} onChangeText={newRoomName => this.clearErrorAndSetValue('newRoomName', newRoomName)} From dab753e078f09317e311adadc08c638b1933104f Mon Sep 17 00:00:00 2001 From: Rushat Gabhane Date: Fri, 16 Sep 2022 05:22:05 +0530 Subject: [PATCH 20/73] signInForm - replace setNativeProps with setAttribute --- src/components/SignInPageForm/index.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/SignInPageForm/index.js b/src/components/SignInPageForm/index.js index 4ee95d1cb81..b38692aaedd 100644 --- a/src/components/SignInPageForm/index.js +++ b/src/components/SignInPageForm/index.js @@ -8,10 +8,8 @@ class Form extends React.Component { } // Password Managers need these attributes to be able to identify the form elements properly. - this.form.setNativeProps({ - method: 'post', - action: '/', - }); + this.form.setAttribute('method', 'post'); + this.form.setAttribute('action', '/'); } render() { From 0ca051e95b0f830667fdb481d0aa31b7e3b459c5 Mon Sep 17 00:00:00 2001 From: Rushat Gabhane Date: Fri, 16 Sep 2022 05:23:35 +0530 Subject: [PATCH 21/73] TextInputLabel - replace setNativeProps with setAttribute --- src/components/TextInput/TextInputLabel/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/TextInput/TextInputLabel/index.js b/src/components/TextInput/TextInputLabel/index.js index b6f8ca99861..29ae00fdcb9 100644 --- a/src/components/TextInput/TextInputLabel/index.js +++ b/src/components/TextInput/TextInputLabel/index.js @@ -8,7 +8,7 @@ class TextInputLabel extends PureComponent { if (!this.props.for) { return; } - this.label.setNativeProps({for: this.props.for}); + this.label.setAttribute('for', this.props.for); } render() { From 5a9850793f174aefea0cc67fda0e763a072fd739 Mon Sep 17 00:00:00 2001 From: Rushat Gabhane Date: Fri, 16 Sep 2022 05:26:07 +0530 Subject: [PATCH 22/73] TextInput - replace setNativeProps with setAttribute --- src/components/TextInput/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/TextInput/index.js b/src/components/TextInput/index.js index 744eedaecbf..4cbed48ce31 100644 --- a/src/components/TextInput/index.js +++ b/src/components/TextInput/index.js @@ -7,11 +7,11 @@ import * as baseTextInputPropTypes from './baseTextInputPropTypes'; class TextInput extends React.Component { componentDidMount() { if (this.props.disableKeyboard) { - this.textInput.setNativeProps({inputmode: 'none'}); + this.textInput.setAttribute('inputmode', 'none'); } if (this.props.name) { - this.textInput.setNativeProps({name: this.props.name}); + this.textInput.setAttribute('name', this.props.name); } } From f0a894e1868aa0d6295c04c426d52bf865167acf Mon Sep 17 00:00:00 2001 From: aimane-chnaif Date: Fri, 16 Sep 2022 03:21:06 -0600 Subject: [PATCH 23/73] isNewChat() function --- src/pages/home/report/ReportActionCompose.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pages/home/report/ReportActionCompose.js b/src/pages/home/report/ReportActionCompose.js index c7fb2872698..cf476cd6016 100755 --- a/src/pages/home/report/ReportActionCompose.js +++ b/src/pages/home/report/ReportActionCompose.js @@ -190,6 +190,10 @@ class ReportActionCompose extends React.Component { ReportActionComposeFocusManager.clear(); } + isNewChat() { + return _.size(this.props.reportActions) === 1; + } + onSelectionChange(e) { this.setState({selection: e.nativeEvent.selection}); } @@ -246,7 +250,7 @@ class ReportActionCompose extends React.Component { return this.props.translate('reportActionCompose.blockedFromConcierge'); } - if (_.size(this.props.reportActions) === 1) { + if (this.isNewChat()) { return this.props.translate('reportActionCompose.sayHello'); } @@ -592,7 +596,7 @@ class ReportActionCompose extends React.Component { Date: Fri, 16 Sep 2022 03:22:17 -0600 Subject: [PATCH 24/73] rename isNewChat to isEmptyChat --- src/pages/home/report/ReportActionCompose.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/home/report/ReportActionCompose.js b/src/pages/home/report/ReportActionCompose.js index cf476cd6016..1231625efdc 100755 --- a/src/pages/home/report/ReportActionCompose.js +++ b/src/pages/home/report/ReportActionCompose.js @@ -190,7 +190,7 @@ class ReportActionCompose extends React.Component { ReportActionComposeFocusManager.clear(); } - isNewChat() { + isEmptyChat() { return _.size(this.props.reportActions) === 1; } @@ -250,7 +250,7 @@ class ReportActionCompose extends React.Component { return this.props.translate('reportActionCompose.blockedFromConcierge'); } - if (this.isNewChat()) { + if (this.isEmptyChat()) { return this.props.translate('reportActionCompose.sayHello'); } @@ -596,7 +596,7 @@ class ReportActionCompose extends React.Component { Date: Fri, 16 Sep 2022 03:29:35 -0600 Subject: [PATCH 25/73] fix lint error --- src/pages/home/report/ReportActionCompose.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/home/report/ReportActionCompose.js b/src/pages/home/report/ReportActionCompose.js index 1231625efdc..ed992ecdc5a 100755 --- a/src/pages/home/report/ReportActionCompose.js +++ b/src/pages/home/report/ReportActionCompose.js @@ -190,10 +190,6 @@ class ReportActionCompose extends React.Component { ReportActionComposeFocusManager.clear(); } - isEmptyChat() { - return _.size(this.props.reportActions) === 1; - } - onSelectionChange(e) { this.setState({selection: e.nativeEvent.selection}); } @@ -307,6 +303,10 @@ class ReportActionCompose extends React.Component { this.setState({maxLines}); } + isEmptyChat() { + return _.size(this.props.reportActions) === 1; + } + /** * Callback for the emoji picker to add whatever emoji is chosen into the main input * From 17f3d6ac7a62e00d75d3dc7a1c7ec35e0fc6ffea Mon Sep 17 00:00:00 2001 From: Yogendra Rawal Date: Mon, 19 Sep 2022 19:18:08 +0545 Subject: [PATCH 26/73] Fix: Safari App Store Link Redirect --- src/libs/actions/Link.js | 5 +++-- src/libs/asyncOpenURL/index.website.js | 5 +++-- src/pages/settings/AppDownloadLinks.js | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/libs/actions/Link.js b/src/libs/actions/Link.js index c31232e38cd..a850e5ada2e 100644 --- a/src/libs/actions/Link.js +++ b/src/libs/actions/Link.js @@ -62,13 +62,14 @@ function openOldDotLink(url) { /** * @param {String} url + * @param {Boolean} skipCheck */ -function openExternalLink(url) { +function openExternalLink(url, skipCheck = false) { if (showGrowlIfOffline()) { return; } - asyncOpenURL(Promise.resolve(), url); + asyncOpenURL(Promise.resolve(), url, skipCheck); } export { diff --git a/src/libs/asyncOpenURL/index.website.js b/src/libs/asyncOpenURL/index.website.js index 265a7d11f89..675ca927cc2 100644 --- a/src/libs/asyncOpenURL/index.website.js +++ b/src/libs/asyncOpenURL/index.website.js @@ -5,15 +5,16 @@ import {Linking} from 'react-native'; * * @param {Promise} promise * @param {string} url + * @param {Boolean} skipCheck */ -export default function asyncOpenURL(promise, url) { +export default function asyncOpenURL(promise, url, skipCheck) { if (!url) { return; } const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); - if (!isSafari) { + if (!isSafari || skipCheck) { promise.then((params) => { Linking.openURL(typeof url === 'string' ? url : url(params)); }); diff --git a/src/pages/settings/AppDownloadLinks.js b/src/pages/settings/AppDownloadLinks.js index d9db3229ad6..35e72eef7dc 100644 --- a/src/pages/settings/AppDownloadLinks.js +++ b/src/pages/settings/AppDownloadLinks.js @@ -41,7 +41,7 @@ const AppDownloadLinksPage = (props) => { icon: Expensicons.Apple, iconRight: Expensicons.NewWindow, action: () => { - Link.openExternalLink(CONST.APP_DOWNLOAD_LINKS.IOS); + Link.openExternalLink(CONST.APP_DOWNLOAD_LINKS.IOS, true); }, link: CONST.APP_DOWNLOAD_LINKS.IOS, }, From 94ddbe0db220b9dfb176e27ec24fe64a0e752001 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 19 Sep 2022 13:23:01 -0400 Subject: [PATCH 27/73] Revert "navigate to exitTo when we're already logged in" This reverts commit 8f4ec05430394ed3601f25f2079e478b221dfbf9. --- src/pages/LogOutPreviousUserPage.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/pages/LogOutPreviousUserPage.js b/src/pages/LogOutPreviousUserPage.js index 85ef92887e5..d9d36602721 100644 --- a/src/pages/LogOutPreviousUserPage.js +++ b/src/pages/LogOutPreviousUserPage.js @@ -7,8 +7,6 @@ import ONYXKEYS from '../ONYXKEYS'; import * as Session from '../libs/actions/Session'; import FullScreenLoadingIndicator from '../components/FullscreenLoadingIndicator'; import * as SessionUtils from '../libs/SessionUtils'; -import Navigation from '../libs/Navigation/Navigation'; -import ROUTES from '../ROUTES'; const propTypes = { /** The data about the current session which will be set once the user is authenticated and we return to this component as an AuthScreen */ @@ -26,10 +24,6 @@ class LogOutPreviousUserPage extends Component { const isLoggingInAsNewUser = SessionUtils.isLoggingInAsNewUser(transitionURL, sessionEmail); if (isLoggingInAsNewUser) { Session.signOutAndRedirectToSignIn(); - } else { - const exitTo = lodashGet(this.props, 'route.params.exitTo'); - Navigation.dismissModal(); - Navigation.navigate(exitTo || ROUTES.HOME); } }); } From fa60fa337c00c64d1f35f87c8cd7a42ac55bfec8 Mon Sep 17 00:00:00 2001 From: Yogendra Rawal Date: Tue, 20 Sep 2022 00:31:33 +0545 Subject: [PATCH 28/73] Fix: param name and jsdoc as requested --- src/libs/actions/Link.js | 6 +++--- src/libs/asyncOpenURL/index.website.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libs/actions/Link.js b/src/libs/actions/Link.js index a850e5ada2e..1cba0623f81 100644 --- a/src/libs/actions/Link.js +++ b/src/libs/actions/Link.js @@ -62,14 +62,14 @@ function openOldDotLink(url) { /** * @param {String} url - * @param {Boolean} skipCheck + * @param {Boolean} shouldSkipCustomSafariLogic When true, we will use `Linking.openURL` even if the browser is Safari. */ -function openExternalLink(url, skipCheck = false) { +function openExternalLink(url, shouldSkipCustomSafariLogic = false) { if (showGrowlIfOffline()) { return; } - asyncOpenURL(Promise.resolve(), url, skipCheck); + asyncOpenURL(Promise.resolve(), url, shouldSkipCustomSafariLogic); } export { diff --git a/src/libs/asyncOpenURL/index.website.js b/src/libs/asyncOpenURL/index.website.js index 675ca927cc2..e1c491450c1 100644 --- a/src/libs/asyncOpenURL/index.website.js +++ b/src/libs/asyncOpenURL/index.website.js @@ -5,16 +5,16 @@ import {Linking} from 'react-native'; * * @param {Promise} promise * @param {string} url - * @param {Boolean} skipCheck + * @param {Boolean} shouldSkipCustomSafariLogic When true, we will use `Linking.openURL` even if the browser is Safari. */ -export default function asyncOpenURL(promise, url, skipCheck) { +export default function asyncOpenURL(promise, url, shouldSkipCustomSafariLogic) { if (!url) { return; } const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); - if (!isSafari || skipCheck) { + if (!isSafari || shouldSkipCustomSafariLogic) { promise.then((params) => { Linking.openURL(typeof url === 'string' ? url : url(params)); }); From 79ff03118d26ab116f97aa95b5a65b197827258b Mon Sep 17 00:00:00 2001 From: Rushat Gabhane Date: Tue, 20 Sep 2022 00:20:41 +0530 Subject: [PATCH 29/73] pass value to room name input --- src/pages/workspace/WorkspaceNewRoomPage.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/workspace/WorkspaceNewRoomPage.js b/src/pages/workspace/WorkspaceNewRoomPage.js index 1dae4d8d5b6..198eb4e53cf 100644 --- a/src/pages/workspace/WorkspaceNewRoomPage.js +++ b/src/pages/workspace/WorkspaceNewRoomPage.js @@ -160,6 +160,7 @@ class WorkspaceNewRoomPage extends React.Component { policyID={this.state.policyID} errorText={this.state.errors.roomName} onChangeText={roomName => this.clearErrorAndSetValue('roomName', roomName)} + value={this.state.roomName} /> From bf19d4b86cef7182acb5b1c5a3784ce0fba5e8ca Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 19 Sep 2022 16:52:44 -0400 Subject: [PATCH 30/73] ensure the NavigationContainer is ready when navigating after transitions --- src/libs/Navigation/Navigation.js | 18 ++++++++++++++++++ src/libs/Navigation/NavigationRoot.js | 5 +++-- src/libs/actions/App.js | 9 ++++++--- src/libs/actions/Policy.js | 5 ++++- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/libs/Navigation/Navigation.js b/src/libs/Navigation/Navigation.js index 7f932813812..30f6b4ca839 100644 --- a/src/libs/Navigation/Navigation.js +++ b/src/libs/Navigation/Navigation.js @@ -10,6 +10,11 @@ import ONYXKEYS from '../../ONYXKEYS'; import linkingConfig from './linkingConfig'; import navigationRef from './navigationRef'; +let resolveNavigationIsReadyPromise; +const navigationIsReadyPromise = new Promise((resolve) => { + resolveNavigationIsReadyPromise = resolve; +}); + let isLoggedIn = false; Onyx.connect({ key: ONYXKEYS.SESSION, @@ -186,6 +191,17 @@ function isActiveRoute(routePath) { return getActiveRoute().substring(1) === routePath; } +/** + * @returns {Promise} + */ +function isNavigationReady() { + return navigationIsReadyPromise; +} + +function setIsNavigationReady() { + resolveNavigationIsReadyPromise(); +} + export default { canNavigate, navigate, @@ -196,6 +212,8 @@ export default { closeDrawer, getDefaultDrawerState, setDidTapNotification, + isNavigationReady, + setIsNavigationReady, }; export { diff --git a/src/libs/Navigation/NavigationRoot.js b/src/libs/Navigation/NavigationRoot.js index 4002c0101c3..1618fea6d3c 100644 --- a/src/libs/Navigation/NavigationRoot.js +++ b/src/libs/Navigation/NavigationRoot.js @@ -1,7 +1,7 @@ import React, {Component} from 'react'; import PropTypes from 'prop-types'; import {NavigationContainer, DefaultTheme, getPathFromState} from '@react-navigation/native'; -import * as Navigation from './Navigation'; +import Navigation, {navigationRef} from './Navigation'; import linkingConfig from './linkingConfig'; import AppNavigator from './AppNavigator'; import FullScreenLoadingIndicator from '../../components/FullscreenLoadingIndicator'; @@ -47,6 +47,7 @@ class NavigationRoot extends Component { } UnreadIndicatorUpdater.throttledUpdatePageTitleAndUnreadCount(); + Navigation.setIsNavigationReady(); } render() { @@ -61,7 +62,7 @@ class NavigationRoot extends Component { onStateChange={this.parseAndLogRoute} onReady={this.props.onReady} theme={navigationTheme} - ref={Navigation.navigationRef} + ref={navigationRef} linking={linkingConfig} documentTitle={{ enabled: false, diff --git a/src/libs/actions/App.js b/src/libs/actions/App.js index 2e2a493ed46..523a8c92be0 100644 --- a/src/libs/actions/App.js +++ b/src/libs/actions/App.js @@ -181,9 +181,12 @@ function setUpPoliciesAndNavigate(session) { return; } if (!isLoggingInAsNewUser && exitTo) { - // We must call dismissModal() to remove the /transition route from history - Navigation.dismissModal(); - Navigation.navigate(exitTo); + Navigation.isNavigationReady() + .then(() => { + // We must call dismissModal() to remove the /transition route from history + Navigation.dismissModal(); + Navigation.navigate(exitTo); + }); } } diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index 5fac77a5638..a62424a9ccf 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -966,7 +966,10 @@ function createWorkspace() { value: null, }], }).then(() => { - Navigation.navigate(ROUTES.getWorkspaceInitialRoute(policyID)); + Navigation.isNavigationReady() + .then(() => { + Navigation.navigate(ROUTES.getWorkspaceInitialRoute(policyID)); + }); }); } From 08e2218f4233c3db789da0f1a11d3a347e94ad0c Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 19 Sep 2022 17:30:49 -0400 Subject: [PATCH 31/73] dismiss transition route for transitions --- src/libs/actions/Policy.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index a62424a9ccf..d1e8e1c51e5 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -968,6 +968,7 @@ function createWorkspace() { }).then(() => { Navigation.isNavigationReady() .then(() => { + Navigation.dismissModal(); // Dismiss /transition route for OldDot to NewDot transitions Navigation.navigate(ROUTES.getWorkspaceInitialRoute(policyID)); }); }); From 164f30955c7d26d5a7e004d5a3b7784a621091b2 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 20 Sep 2022 09:43:18 -1000 Subject: [PATCH 32/73] Pass apiRequestType with requests so we can handle reauthentication --- src/CONST.js | 5 +++++ src/libs/API.js | 9 +++++++-- src/libs/Middleware/Reauthentication.js | 17 ++++++++++++----- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/CONST.js b/src/CONST.js index cdde88fd32b..1eb13b5c8ac 100755 --- a/src/CONST.js +++ b/src/CONST.js @@ -836,6 +836,11 @@ const CONST = { }, }, }, + API_REQUEST_TYPE: { + READ: 'read', + WRITE: 'write', + MAKE_REQUEST_WITH_SIDE_EFFECTS: 'makeRequestWithSideEffects', + }, }; export default CONST; diff --git a/src/libs/API.js b/src/libs/API.js index cd3cb042098..fafb113a700 100644 --- a/src/libs/API.js +++ b/src/libs/API.js @@ -3,6 +3,7 @@ import Onyx from 'react-native-onyx'; import * as Request from './Request'; import * as SequentialQueue from './Network/SequentialQueue'; import pkg from '../../package.json'; +import CONST from '../CONST'; /** * All calls to API.write() will be persisted to disk as JSON with the params, successData, and failureData. @@ -27,6 +28,7 @@ function write(command, apiCommandParameters = {}, onyxData = {}) { const data = { ...apiCommandParameters, appversion: pkg.version, + apiRequestType: CONST.API_REQUEST_TYPE.WRITE, }; // Assemble all the request data we'll be storing in the queue @@ -62,9 +64,11 @@ function write(command, apiCommandParameters = {}, onyxData = {}) { * @param {Object} [onyxData.optimisticData] - Onyx instructions that will be passed to Onyx.update() before the request is made. * @param {Object} [onyxData.successData] - Onyx instructions that will be passed to Onyx.update() when the response has jsonCode === 200. * @param {Object} [onyxData.failureData] - Onyx instructions that will be passed to Onyx.update() when the response has jsonCode !== 200. + * @param {String} [newAPIRequestType] - Can be either 'read', 'write', or 'makeRequestWithSideEffects'. We use this to either return the + * chained response back to the caller or to trigger reconnection callbacks when reauthentication is required. * @returns {Promise} */ -function makeRequestWithSideEffects(command, apiCommandParameters = {}, onyxData = {}) { +function makeRequestWithSideEffects(command, apiCommandParameters = {}, onyxData = {}, newAPIRequestType = CONST.API_REQUEST_TYPE.MAKE_REQUEST_WITH_SIDE_EFFECTS) { // Optimistically update Onyx if (onyxData.optimisticData) { Onyx.update(onyxData.optimisticData); @@ -74,6 +78,7 @@ function makeRequestWithSideEffects(command, apiCommandParameters = {}, onyxData const data = { ...apiCommandParameters, appversion: pkg.version, + newAPIRequestType, }; // Assemble all the request data we'll be storing @@ -100,7 +105,7 @@ function makeRequestWithSideEffects(command, apiCommandParameters = {}, onyxData * @param {Object} [onyxData.failureData] - Onyx instructions that will be passed to Onyx.update() when the response has jsonCode !== 200. */ function read(command, apiCommandParameters, onyxData) { - makeRequestWithSideEffects(command, apiCommandParameters, onyxData); + makeRequestWithSideEffects(command, apiCommandParameters, onyxData, CONST.API_REQUEST_TYPE.READ); } export { diff --git a/src/libs/Middleware/Reauthentication.js b/src/libs/Middleware/Reauthentication.js index 79b76ca19f4..3a99cf5f9ee 100644 --- a/src/libs/Middleware/Reauthentication.js +++ b/src/libs/Middleware/Reauthentication.js @@ -7,6 +7,7 @@ import * as Authentication from '../Authentication'; import * as PersistedRequests from '../actions/PersistedRequests'; import * as Request from '../Request'; import Log from '../Log'; +import NetworkConnection from '../NetworkConnection'; /** * Reauthentication middleware @@ -35,7 +36,8 @@ function Reauthentication(response, request, isFromSequentialQueue) { // creating and deleting logins. In those cases, they should handle the original response instead // of the new response created by handleExpiredAuthToken. const shouldRetry = lodashGet(request, 'data.shouldRetry'); - if (!shouldRetry) { + const apiRequestType = lodashGet(request, 'data.apiRequestType'); + if (!shouldRetry && !apiRequestType) { if (isFromSequentialQueue) { return data; } @@ -62,16 +64,21 @@ function Reauthentication(response, request, isFromSequentialQueue) { return Authentication.reauthenticate(request.commandName) .then((authenticateResponse) => { - if (isFromSequentialQueue) { - return Request.processWithMiddleware(request, true); + if (isFromSequentialQueue || apiRequestType === CONST.API_REQUEST_TYPE.MAKE_REQUEST_WITH_SIDE_EFFECTS) { + return Request.processWithMiddleware(request, isFromSequentialQueue); + } + + if (apiRequestType === CONST.API_REQUEST_TYPE.READ) { + NetworkConnection.triggerReconnectionCallbacks(); + return Promise.resolve(); } MainQueue.replay(request); return authenticateResponse; }) .catch(() => { - if (isFromSequentialQueue) { - throw new Error('Unable to reauthenticate sequential queue request because we failed to reauthenticate'); + if (isFromSequentialQueue || apiRequestType) { + throw new Error('Failed to reauthenticate'); } // If we make it here, then our reauthenticate request could not be made due to a networking issue. The original request can be retried safely. From e76c0e4e646c10f7e143c773ecc580e25634b8d0 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 20 Sep 2022 15:50:05 -0400 Subject: [PATCH 33/73] Revert "Revert "Refactor withFullPolicy"" This reverts commit f67be5a222e5f751423c771f3f827f764aaf0f5f. --- src/components/AvatarWithIndicator.js | 4 +- src/components/RoomNameInput.js | 4 -- src/pages/ReportSettingsPage.js | 15 ----- .../workspace/WorkspaceBankAccountPage.js | 4 +- src/pages/workspace/WorkspaceInitialPage.js | 8 +-- src/pages/workspace/WorkspaceInvitePage.js | 8 +-- src/pages/workspace/WorkspaceMembersPage.js | 8 +-- src/pages/workspace/WorkspaceNewRoomPage.js | 8 +-- .../workspace/WorkspacePageWithSections.js | 4 +- src/pages/workspace/WorkspaceSettingsPage.js | 8 +-- .../reimburse/WorkspaceReimburseView.js | 4 +- .../{withFullPolicy.js => withPolicy.js} | 56 ++++++------------- 12 files changed, 43 insertions(+), 88 deletions(-) rename src/pages/workspace/{withFullPolicy.js => withPolicy.js} (64%) diff --git a/src/components/AvatarWithIndicator.js b/src/components/AvatarWithIndicator.js index afa59dfbdd9..1bd517cfd64 100644 --- a/src/components/AvatarWithIndicator.js +++ b/src/components/AvatarWithIndicator.js @@ -11,7 +11,7 @@ import policyMemberPropType from '../pages/policyMemberPropType'; import bankAccountPropTypes from './bankAccountPropTypes'; import cardPropTypes from './cardPropTypes'; import userWalletPropTypes from '../pages/EnablePayments/userWalletPropTypes'; -import {fullPolicyPropTypes} from '../pages/workspace/withFullPolicy'; +import {policyPropTypes} from '../pages/workspace/withPolicy'; import walletTermsPropTypes from '../pages/EnablePayments/walletTermsPropTypes'; import * as PolicyUtils from '../libs/PolicyUtils'; import * as PaymentMethods from '../libs/actions/PaymentMethods'; @@ -30,7 +30,7 @@ const propTypes = { policiesMemberList: PropTypes.objectOf(policyMemberPropType), /** All the user's policies (from Onyx via withFullPolicy) */ - policies: PropTypes.objectOf(fullPolicyPropTypes.policy), + policies: PropTypes.objectOf(policyPropTypes.policy), /** List of bank accounts */ bankAccountList: PropTypes.objectOf(bankAccountPropTypes), diff --git a/src/components/RoomNameInput.js b/src/components/RoomNameInput.js index 8bd14fe9408..55e1a2296a7 100644 --- a/src/components/RoomNameInput.js +++ b/src/components/RoomNameInput.js @@ -5,7 +5,6 @@ import CONST from '../CONST'; import ONYXKEYS from '../ONYXKEYS'; import compose from '../libs/compose'; import withLocalize, {withLocalizePropTypes} from './withLocalize'; -import withFullPolicy, {fullPolicyDefaultProps, fullPolicyPropTypes} from '../pages/workspace/withFullPolicy'; import TextInput from './TextInput'; const propTypes = { @@ -22,7 +21,6 @@ const propTypes = { errorText: PropTypes.string, ...withLocalizePropTypes, - ...fullPolicyPropTypes, /* Onyx Props */ @@ -53,7 +51,6 @@ const defaultProps = { initialValue: '', disabled: false, errorText: '', - ...fullPolicyDefaultProps, forwardedRef: () => {}, }; @@ -114,7 +111,6 @@ RoomNameInput.defaultProps = defaultProps; export default compose( withLocalize, - withFullPolicy, withOnyx({ reports: { key: ONYXKEYS.COLLECTION.REPORT, diff --git a/src/pages/ReportSettingsPage.js b/src/pages/ReportSettingsPage.js index 9efc59dc940..0fe5d285fb9 100644 --- a/src/pages/ReportSettingsPage.js +++ b/src/pages/ReportSettingsPage.js @@ -18,7 +18,6 @@ import Text from '../components/Text'; import Button from '../components/Button'; import RoomNameInput from '../components/RoomNameInput'; import Picker from '../components/Picker'; -import withFullPolicy, {fullPolicyDefaultProps, fullPolicyPropTypes} from './workspace/withFullPolicy'; import * as ValidationUtils from '../libs/ValidationUtils'; import OfflineWithFeedback from '../components/OfflineWithFeedback'; @@ -31,7 +30,6 @@ const propTypes = { }), }).isRequired, - ...fullPolicyPropTypes, ...withLocalizePropTypes, /* Onyx Props */ @@ -79,17 +77,6 @@ const propTypes = { }).isRequired, }; -const defaultProps = { - ...fullPolicyDefaultProps, - report: { - reportID: 0, - reportName: '', - policyID: '', - notificationPreference: '', - visibility: '', - }, -}; - class ReportSettingsPage extends Component { constructor(props) { super(props); @@ -287,11 +274,9 @@ class ReportSettingsPage extends Component { } ReportSettingsPage.propTypes = propTypes; -ReportSettingsPage.defaultProps = defaultProps; export default compose( withLocalize, - withFullPolicy, withOnyx({ report: { key: ({route}) => `${ONYXKEYS.COLLECTION.REPORT}${route.params.reportID}`, diff --git a/src/pages/workspace/WorkspaceBankAccountPage.js b/src/pages/workspace/WorkspaceBankAccountPage.js index 6b95d4685dd..64bd69cb9bd 100644 --- a/src/pages/workspace/WorkspaceBankAccountPage.js +++ b/src/pages/workspace/WorkspaceBankAccountPage.js @@ -21,7 +21,7 @@ import Section from '../../components/Section'; import WorkspaceResetBankAccountModal from './WorkspaceResetBankAccountModal'; import styles from '../../styles/styles'; import CONST from '../../CONST'; -import withFullPolicy from './withFullPolicy'; +import withPolicy from './withPolicy'; import Button from '../../components/Button'; import MenuItem from '../../components/MenuItem'; import FullPageNotFoundView from '../../components/BlockingViews/FullPageNotFoundView'; @@ -131,5 +131,5 @@ export default compose( key: ONYXKEYS.REIMBURSEMENT_ACCOUNT, }, }), - withFullPolicy, + withPolicy, )(WorkspaceBankAccountPage); diff --git a/src/pages/workspace/WorkspaceInitialPage.js b/src/pages/workspace/WorkspaceInitialPage.js index 9b1d13b09f9..8ba4c347ba5 100644 --- a/src/pages/workspace/WorkspaceInitialPage.js +++ b/src/pages/workspace/WorkspaceInitialPage.js @@ -20,7 +20,7 @@ import HeaderWithCloseButton from '../../components/HeaderWithCloseButton'; import compose from '../../libs/compose'; import Avatar from '../../components/Avatar'; import FullPageNotFoundView from '../../components/BlockingViews/FullPageNotFoundView'; -import withFullPolicy, {fullPolicyPropTypes, fullPolicyDefaultProps} from './withFullPolicy'; +import withPolicy, {policyPropTypes, policyDefaultProps} from './withPolicy'; import * as Policy from '../../libs/actions/Policy'; import * as PolicyUtils from '../../libs/PolicyUtils'; import CONST from '../../CONST'; @@ -30,7 +30,7 @@ import policyMemberPropType from '../policyMemberPropType'; import OfflineWithFeedback from '../../components/OfflineWithFeedback'; const propTypes = { - ...fullPolicyPropTypes, + ...policyPropTypes, ...withLocalizePropTypes, /** The employee list of this policy (coming from Onyx) */ @@ -38,7 +38,7 @@ const propTypes = { }; const defaultProps = { - ...fullPolicyDefaultProps, + ...policyDefaultProps, policyMemberList: {}, }; @@ -248,7 +248,7 @@ WorkspaceInitialPage.defaultProps = defaultProps; export default compose( withLocalize, - withFullPolicy, + withPolicy, withOnyx({ policyMemberList: { key: ({policy}) => `${ONYXKEYS.COLLECTION.POLICY_MEMBER_LIST}${policy.id}`, diff --git a/src/pages/workspace/WorkspaceInvitePage.js b/src/pages/workspace/WorkspaceInvitePage.js index dbefba433b4..86fcc48b975 100644 --- a/src/pages/workspace/WorkspaceInvitePage.js +++ b/src/pages/workspace/WorkspaceInvitePage.js @@ -20,7 +20,7 @@ import CONST from '../../CONST'; import FullScreenLoadingIndicator from '../../components/FullscreenLoadingIndicator'; import * as Link from '../../libs/actions/Link'; import Text from '../../components/Text'; -import withFullPolicy, {fullPolicyPropTypes, fullPolicyDefaultProps} from './withFullPolicy'; +import withPolicy, {policyPropTypes, policyDefaultProps} from './withPolicy'; import {withNetwork} from '../../components/OnyxProvider'; import FullPageNotFoundView from '../../components/BlockingViews/FullPageNotFoundView'; import networkPropTypes from '../../components/networkPropTypes'; @@ -53,12 +53,12 @@ const propTypes = { }), }).isRequired, - ...fullPolicyPropTypes, + ...policyPropTypes, ...withLocalizePropTypes, ...networkPropTypes, }; -const defaultProps = fullPolicyDefaultProps; +const defaultProps = policyDefaultProps; class WorkspaceInvitePage extends React.Component { constructor(props) { @@ -352,7 +352,7 @@ WorkspaceInvitePage.defaultProps = defaultProps; export default compose( withLocalize, - withFullPolicy, + withPolicy, withNetwork(), withOnyx({ personalDetails: { diff --git a/src/pages/workspace/WorkspaceMembersPage.js b/src/pages/workspace/WorkspaceMembersPage.js index db12309ce7b..1de2d175956 100644 --- a/src/pages/workspace/WorkspaceMembersPage.js +++ b/src/pages/workspace/WorkspaceMembersPage.js @@ -25,7 +25,7 @@ import withWindowDimensions, {windowDimensionsPropTypes} from '../../components/ import OptionRow from '../../components/OptionRow'; import CheckboxWithTooltip from '../../components/CheckboxWithTooltip'; import Hoverable from '../../components/Hoverable'; -import withFullPolicy, {fullPolicyPropTypes, fullPolicyDefaultProps} from './withFullPolicy'; +import withPolicy, {policyPropTypes, policyDefaultProps} from './withPolicy'; import CONST from '../../CONST'; import OfflineWithFeedback from '../../components/OfflineWithFeedback'; import {withNetwork} from '../../components/OnyxProvider'; @@ -45,13 +45,13 @@ const propTypes = { }), }).isRequired, - ...fullPolicyPropTypes, + ...policyPropTypes, ...withLocalizePropTypes, ...windowDimensionsPropTypes, ...networkPropTypes, }; -const defaultProps = fullPolicyDefaultProps; +const defaultProps = policyDefaultProps; class WorkspaceMembersPage extends React.Component { constructor(props) { @@ -367,7 +367,7 @@ WorkspaceMembersPage.defaultProps = defaultProps; export default compose( withLocalize, withWindowDimensions, - withFullPolicy, + withPolicy, withNetwork(), withOnyx({ personalDetails: { diff --git a/src/pages/workspace/WorkspaceNewRoomPage.js b/src/pages/workspace/WorkspaceNewRoomPage.js index 1dae4d8d5b6..440362bb91e 100644 --- a/src/pages/workspace/WorkspaceNewRoomPage.js +++ b/src/pages/workspace/WorkspaceNewRoomPage.js @@ -3,7 +3,6 @@ import {ScrollView, View} from 'react-native'; import _ from 'underscore'; import {withOnyx} from 'react-native-onyx'; import PropTypes from 'prop-types'; -import withFullPolicy, {fullPolicyDefaultProps, fullPolicyPropTypes} from './withFullPolicy'; import * as Report from '../../libs/actions/Report'; import withLocalize, {withLocalizePropTypes} from '../../components/withLocalize'; import compose from '../../libs/compose'; @@ -35,17 +34,17 @@ const propTypes = { policyID: PropTypes.string, }).isRequired, + /** List of betas available to current user */ + betas: PropTypes.arrayOf(PropTypes.string), + /** Are we loading the createPolicyRoom command */ isLoadingCreatePolicyRoom: PropTypes.bool, - ...fullPolicyPropTypes, - ...withLocalizePropTypes, }; const defaultProps = { betas: [], isLoadingCreatePolicyRoom: false, - ...fullPolicyDefaultProps, }; class WorkspaceNewRoomPage extends React.Component { @@ -203,7 +202,6 @@ WorkspaceNewRoomPage.propTypes = propTypes; WorkspaceNewRoomPage.defaultProps = defaultProps; export default compose( - withFullPolicy, withOnyx({ betas: { key: ONYXKEYS.BETAS, diff --git a/src/pages/workspace/WorkspacePageWithSections.js b/src/pages/workspace/WorkspacePageWithSections.js index d6fc3b3a09e..7c0ecacc0d8 100644 --- a/src/pages/workspace/WorkspacePageWithSections.js +++ b/src/pages/workspace/WorkspacePageWithSections.js @@ -15,7 +15,7 @@ import * as BankAccounts from '../../libs/actions/BankAccounts'; import BankAccount from '../../libs/models/BankAccount'; import reimbursementAccountPropTypes from '../ReimbursementAccount/reimbursementAccountPropTypes'; import userPropTypes from '../settings/userPropTypes'; -import withFullPolicy from './withFullPolicy'; +import withPolicy from './withPolicy'; import {withNetwork} from '../../components/OnyxProvider'; import networkPropTypes from '../../components/networkPropTypes'; @@ -131,6 +131,6 @@ export default compose( key: ONYXKEYS.REIMBURSEMENT_ACCOUNT, }, }), - withFullPolicy, + withPolicy, withNetwork(), )(WorkspacePageWithSections); diff --git a/src/pages/workspace/WorkspaceSettingsPage.js b/src/pages/workspace/WorkspaceSettingsPage.js index a35c1fc690a..40c370abb92 100644 --- a/src/pages/workspace/WorkspaceSettingsPage.js +++ b/src/pages/workspace/WorkspaceSettingsPage.js @@ -19,18 +19,18 @@ import Picker from '../../components/Picker'; import TextInput from '../../components/TextInput'; import FixedFooter from '../../components/FixedFooter'; import WorkspacePageWithSections from './WorkspacePageWithSections'; -import withFullPolicy, {fullPolicyPropTypes, fullPolicyDefaultProps} from './withFullPolicy'; +import withPolicy, {policyPropTypes, policyDefaultProps} from './withPolicy'; import {withNetwork} from '../../components/OnyxProvider'; import OfflineWithFeedback from '../../components/OfflineWithFeedback'; import FullPageNotFoundView from '../../components/BlockingViews/FullPageNotFoundView'; const propTypes = { - ...fullPolicyPropTypes, + ...policyPropTypes, ...withLocalizePropTypes, }; const defaultProps = { - ...fullPolicyDefaultProps, + ...policyDefaultProps, }; class WorkspaceSettingsPage extends React.Component { @@ -162,7 +162,7 @@ WorkspaceSettingsPage.propTypes = propTypes; WorkspaceSettingsPage.defaultProps = defaultProps; export default compose( - withFullPolicy, + withPolicy, withOnyx({ currencyList: {key: ONYXKEYS.CURRENCY_LIST}, }), diff --git a/src/pages/workspace/reimburse/WorkspaceReimburseView.js b/src/pages/workspace/reimburse/WorkspaceReimburseView.js index 2eb4512a495..ca1cf4ce32d 100644 --- a/src/pages/workspace/reimburse/WorkspaceReimburseView.js +++ b/src/pages/workspace/reimburse/WorkspaceReimburseView.js @@ -17,7 +17,7 @@ import * as Link from '../../../libs/actions/Link'; import compose from '../../../libs/compose'; import ONYXKEYS from '../../../ONYXKEYS'; import * as Policy from '../../../libs/actions/Policy'; -import withFullPolicy from '../withFullPolicy'; +import withPolicy from '../withPolicy'; import CONST from '../../../CONST'; import Button from '../../../components/Button'; import getPermittedDecimalSeparator from '../../../libs/getPermittedDecimalSeparator'; @@ -309,7 +309,7 @@ class WorkspaceReimburseView extends React.Component { WorkspaceReimburseView.propTypes = propTypes; export default compose( - withFullPolicy, + withPolicy, withLocalize, withNetwork(), withOnyx({ diff --git a/src/pages/workspace/withFullPolicy.js b/src/pages/workspace/withPolicy.js similarity index 64% rename from src/pages/workspace/withFullPolicy.js rename to src/pages/workspace/withPolicy.js index 45f608d685b..34182871eb4 100644 --- a/src/pages/workspace/withFullPolicy.js +++ b/src/pages/workspace/withPolicy.js @@ -2,7 +2,6 @@ import _ from 'underscore'; import lodashGet from 'lodash/get'; import React from 'react'; import PropTypes from 'prop-types'; -import Str from 'expensify-common/lib/str'; import {withOnyx} from 'react-native-onyx'; import {useNavigationState} from '@react-navigation/native'; import CONST from '../../CONST'; @@ -11,9 +10,6 @@ import * as Policy from '../../libs/actions/Policy'; import ONYXKEYS from '../../ONYXKEYS'; import policyMemberPropType from '../policyMemberPropType'; -let previousRouteName = ''; -let previousRoutePolicyID = ''; - /** * @param {Object} route * @returns {String} @@ -22,20 +18,7 @@ function getPolicyIDFromRoute(route) { return lodashGet(route, 'params.policyID', ''); } -/** - * @param {String} routeName - * @param {String} policyID - * @returns {Boolean} - */ -function isPreviousRouteInSameWorkspace(routeName, policyID) { - return ( - Str.startsWith(routeName, 'Workspace') - && Str.startsWith(previousRouteName, 'Workspace') - && policyID === previousRoutePolicyID - ); -} - -const fullPolicyPropTypes = { +const policyPropTypes = { /** The policy object for the current route */ policy: PropTypes.shape({ /** The ID of the policy */ @@ -78,12 +61,12 @@ const fullPolicyPropTypes = { policyMemberList: PropTypes.objectOf(policyMemberPropType), }; -const fullPolicyDefaultProps = { +const policyDefaultProps = { policy: {}, }; /* - * HOC for loading a full policy. It checks the route params and if current route has a policyID that the previous route did not, it full-loads that policy. + * HOC for connecting a policy in Onyx corresponding to the policyID in route params */ export default function (WrappedComponent) { const propTypes = { @@ -91,46 +74,39 @@ export default function (WrappedComponent) { * That way, if a ref is passed to a component wrapped in the HOC, the ref is a reference to the wrapped component, not the HOC. */ forwardedRef: PropTypes.func, - ...fullPolicyPropTypes, + ...policyPropTypes, }; const defaultProps = { forwardedRef: () => {}, - ...fullPolicyDefaultProps, + ...policyDefaultProps, }; - const WithFullPolicy = (props) => { + const WithPolicy = (props) => { const currentRoute = _.last(useNavigationState(state => state.routes || [])); const policyID = getPolicyIDFromRoute(currentRoute); - const isFromFullPolicy = lodashGet(props, 'policy.isFromFullPolicy', false) || lodashGet(props, `policy.policy_${policyID}.isFromFullPolicy`, false); - if (_.isString(policyID) && !_.isEmpty(policyID) && (!isFromFullPolicy || !isPreviousRouteInSameWorkspace(currentRoute.name, policyID))) { - Policy.loadFullPolicy(policyID); + if (_.isString(policyID) && !_.isEmpty(policyID)) { Policy.updateLastAccessedWorkspace(policyID); } - previousRouteName = currentRoute.name; - previousRoutePolicyID = policyID; - - const rest = _.omit(props, ['forwardedRef', 'policy', 'policyMemberList']); + const rest = _.omit(props, ['forwardedRef']); return ( ); }; - WithFullPolicy.propTypes = propTypes; - WithFullPolicy.defaultProps = defaultProps; - WithFullPolicy.displayName = `withFullPolicy(${getComponentDisplayName(WrappedComponent)})`; - const withFullPolicy = React.forwardRef((props, ref) => ( + WithPolicy.propTypes = propTypes; + WithPolicy.defaultProps = defaultProps; + WithPolicy.displayName = `withFullPolicy(${getComponentDisplayName(WrappedComponent)})`; + const withPolicy = React.forwardRef((props, ref) => ( // eslint-disable-next-line react/jsx-props-no-spreading - + )); return withOnyx({ @@ -140,10 +116,10 @@ export default function (WrappedComponent) { policyMemberList: { key: props => `${ONYXKEYS.COLLECTION.POLICY_MEMBER_LIST}${getPolicyIDFromRoute(props.route)}`, }, - })(withFullPolicy); + })(withPolicy); } export { - fullPolicyPropTypes, - fullPolicyDefaultProps, + policyPropTypes, + policyDefaultProps, }; From c25fc1c68e98f5f6faaa40b4d18e7d297aeeb820 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 20 Sep 2022 09:52:52 -1000 Subject: [PATCH 34/73] Add way to unsubsribe from onReconnect --- src/libs/NetworkConnection.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/libs/NetworkConnection.js b/src/libs/NetworkConnection.js index 50552b2da73..cd4d0b925ec 100644 --- a/src/libs/NetworkConnection.js +++ b/src/libs/NetworkConnection.js @@ -14,7 +14,8 @@ let isOffline = false; let hasPendingNetworkCheck = false; // Holds all of the callbacks that need to be triggered when the network reconnects -const reconnectionCallbacks = []; +let callbackID = 0; +const reconnectionCallbacks = {}; /** * Loop over all reconnection callbacks and fire each one @@ -99,9 +100,13 @@ function stopListeningForReconnect() { * Register callback to fire when we reconnect * * @param {Function} callback - must return a Promise + * @returns {Function} unsubscribe method */ function onReconnect(callback) { - reconnectionCallbacks.push(callback); + const currentID = callbackID; + callbackID++; + reconnectionCallbacks[currentID] = callback; + return () => delete reconnectionCallbacks[currentID]; } /** From 6631a7b70b83925c95c49429fbe71893fbced199 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 20 Sep 2022 10:10:14 -1000 Subject: [PATCH 35/73] Trigger reconnection callbacks when authentication fails on a read request --- src/libs/API.js | 8 ++++---- src/libs/Middleware/Reauthentication.js | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libs/API.js b/src/libs/API.js index fafb113a700..83b0dcd9d15 100644 --- a/src/libs/API.js +++ b/src/libs/API.js @@ -64,11 +64,11 @@ function write(command, apiCommandParameters = {}, onyxData = {}) { * @param {Object} [onyxData.optimisticData] - Onyx instructions that will be passed to Onyx.update() before the request is made. * @param {Object} [onyxData.successData] - Onyx instructions that will be passed to Onyx.update() when the response has jsonCode === 200. * @param {Object} [onyxData.failureData] - Onyx instructions that will be passed to Onyx.update() when the response has jsonCode !== 200. - * @param {String} [newAPIRequestType] - Can be either 'read', 'write', or 'makeRequestWithSideEffects'. We use this to either return the - * chained response back to the caller or to trigger reconnection callbacks when reauthentication is required. + * @param {String} [apiRequestType] - Can be either 'read', 'write', or 'makeRequestWithSideEffects'. We use this to either return the chained + * response back to the caller or to trigger reconnection callbacks when re-authentication is required. * @returns {Promise} */ -function makeRequestWithSideEffects(command, apiCommandParameters = {}, onyxData = {}, newAPIRequestType = CONST.API_REQUEST_TYPE.MAKE_REQUEST_WITH_SIDE_EFFECTS) { +function makeRequestWithSideEffects(command, apiCommandParameters = {}, onyxData = {}, apiRequestType = CONST.API_REQUEST_TYPE.MAKE_REQUEST_WITH_SIDE_EFFECTS) { // Optimistically update Onyx if (onyxData.optimisticData) { Onyx.update(onyxData.optimisticData); @@ -78,7 +78,7 @@ function makeRequestWithSideEffects(command, apiCommandParameters = {}, onyxData const data = { ...apiCommandParameters, appversion: pkg.version, - newAPIRequestType, + apiRequestType, }; // Assemble all the request data we'll be storing diff --git a/src/libs/Middleware/Reauthentication.js b/src/libs/Middleware/Reauthentication.js index 3a99cf5f9ee..281af69de17 100644 --- a/src/libs/Middleware/Reauthentication.js +++ b/src/libs/Middleware/Reauthentication.js @@ -69,7 +69,7 @@ function Reauthentication(response, request, isFromSequentialQueue) { } if (apiRequestType === CONST.API_REQUEST_TYPE.READ) { - NetworkConnection.triggerReconnectionCallbacks(); + NetworkConnection.triggerReconnectionCallbacks('read request made with expired authToken'); return Promise.resolve(); } From a0be71966e4236d9d593693a35a03a6f5c33a572 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 20 Sep 2022 10:30:08 -1000 Subject: [PATCH 36/73] Remove weird log alert and just allow sequential requests to reauthenticate. no need to try to prevent reauthentication attempts --- src/libs/Middleware/Reauthentication.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/libs/Middleware/Reauthentication.js b/src/libs/Middleware/Reauthentication.js index 281af69de17..85ced9f0968 100644 --- a/src/libs/Middleware/Reauthentication.js +++ b/src/libs/Middleware/Reauthentication.js @@ -48,16 +48,8 @@ function Reauthentication(response, request, isFromSequentialQueue) { return data; } - // We are already authenticating - if (NetworkStore.isAuthenticating()) { - if (isFromSequentialQueue) { - // This should never happen in theory. If we go offline while we are Authenticating or handling a response with a 407 jsonCode then isAuthenticating should be - // set to false. If we do somehow get here, we will log about it since we will never know it happened otherwise and it would be difficult to diagnose. - const message = 'Cannot complete sequential request because we are already authenticating'; - Log.alert(`${CONST.ERROR.ENSURE_BUGBOT} ${message}`); - throw new Error(message); - } - + // We are already authenticating and using the DeprecatedAPI so we will replay the request + if (!apiRequestType && NetworkStore.isAuthenticating()) { MainQueue.replay(request); return data; } From b34a06f64fe928f18c1aed8600ebf31be73b05fc Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 20 Sep 2022 17:46:02 -0400 Subject: [PATCH 37/73] update display name for withPolicy --- src/pages/workspace/withPolicy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/withPolicy.js b/src/pages/workspace/withPolicy.js index 34182871eb4..d9c85a5387a 100644 --- a/src/pages/workspace/withPolicy.js +++ b/src/pages/workspace/withPolicy.js @@ -103,7 +103,7 @@ export default function (WrappedComponent) { WithPolicy.propTypes = propTypes; WithPolicy.defaultProps = defaultProps; - WithPolicy.displayName = `withFullPolicy(${getComponentDisplayName(WrappedComponent)})`; + WithPolicy.displayName = `withPolicy(${getComponentDisplayName(WrappedComponent)})`; const withPolicy = React.forwardRef((props, ref) => ( // eslint-disable-next-line react/jsx-props-no-spreading From 0d23cb33abac0cce39ff20d012aecddab6c204a4 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 20 Sep 2022 17:48:14 -0400 Subject: [PATCH 38/73] fix use of withPolicy for reimburse page --- .../reimburse/WorkspaceReimbursePage.js | 12 ++++++--- .../reimburse/WorkspaceReimburseView.js | 25 ++++++------------- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/pages/workspace/reimburse/WorkspaceReimbursePage.js b/src/pages/workspace/reimburse/WorkspaceReimbursePage.js index 2f0e8a9e381..d092235daf1 100644 --- a/src/pages/workspace/reimburse/WorkspaceReimbursePage.js +++ b/src/pages/workspace/reimburse/WorkspaceReimbursePage.js @@ -4,6 +4,8 @@ import withLocalize, {withLocalizePropTypes} from '../../../components/withLocal import WorkspaceReimburseView from './WorkspaceReimburseView'; import WorkspacePageWithSections from '../WorkspacePageWithSections'; import CONST from '../../../CONST'; +import compose from '../../../libs/compose'; +import withPolicy, {policyPropTypes} from '../withPolicy'; const propTypes = { /** The route object passed to this page from the navigator */ @@ -15,6 +17,7 @@ const propTypes = { }).isRequired, }).isRequired, + ...policyPropTypes, ...withLocalizePropTypes, }; @@ -24,8 +27,8 @@ const WorkspaceReimbursePage = props => ( route={props.route} guidesCallTaskID={CONST.GUIDES_CALL_TASK_IDS.WORKSPACE_REIMBURSE} > - {(hasVBA, policyID) => ( - + {hasVBA => ( + )} ); @@ -33,4 +36,7 @@ const WorkspaceReimbursePage = props => ( WorkspaceReimbursePage.propTypes = propTypes; WorkspaceReimbursePage.displayName = 'WorkspaceReimbursePage'; -export default withLocalize(WorkspaceReimbursePage); +export default compose( + withPolicy, + withLocalize, +)(WorkspaceReimbursePage); diff --git a/src/pages/workspace/reimburse/WorkspaceReimburseView.js b/src/pages/workspace/reimburse/WorkspaceReimburseView.js index ca1cf4ce32d..8f08b28e829 100644 --- a/src/pages/workspace/reimburse/WorkspaceReimburseView.js +++ b/src/pages/workspace/reimburse/WorkspaceReimburseView.js @@ -1,7 +1,6 @@ import React from 'react'; import {View} from 'react-native'; import PropTypes from 'prop-types'; -import {withOnyx} from 'react-native-onyx'; import lodashGet from 'lodash/get'; import _ from 'underscore'; import TextInput from '../../../components/TextInput'; @@ -15,9 +14,7 @@ import Section from '../../../components/Section'; import CopyTextToClipboard from '../../../components/CopyTextToClipboard'; import * as Link from '../../../libs/actions/Link'; import compose from '../../../libs/compose'; -import ONYXKEYS from '../../../ONYXKEYS'; import * as Policy from '../../../libs/actions/Policy'; -import withPolicy from '../withPolicy'; import CONST from '../../../CONST'; import Button from '../../../components/Button'; import getPermittedDecimalSeparator from '../../../libs/getPermittedDecimalSeparator'; @@ -91,7 +88,7 @@ class WorkspaceReimburseView extends React.Component { } componentDidMount() { - Policy.openWorkspaceReimburseView(this.props.policyID); + Policy.openWorkspaceReimburseView(this.props.policy.id); } componentDidUpdate(prevProps) { @@ -156,12 +153,12 @@ class WorkspaceReimburseView extends React.Component { const distanceCustomUnit = _.find(lodashGet(this.props, 'policy.customUnits', {}), unit => unit.name === 'Distance'); if (!distanceCustomUnit) { Log.warn('Policy has no customUnits, returning early.', { - policyID: this.props.policyID, + policyID: this.props.policy.id, }); return; } - Policy.updateWorkspaceCustomUnit(this.props.policyID, distanceCustomUnit, { + Policy.updateWorkspaceCustomUnit(this.props.policy.id, distanceCustomUnit, { customUnitID: this.state.unitID, name: this.state.unitName, attributes: {unit: value}, @@ -185,7 +182,7 @@ class WorkspaceReimburseView extends React.Component { const distanceCustomUnit = _.find(lodashGet(this.props, 'policy.customUnits', {}), unit => unit.name === 'Distance'); const currentCustomUnitRate = lodashGet(distanceCustomUnit, ['rates', this.state.unitRateID], {}); - Policy.updateCustomUnitRate(this.props.policyID, currentCustomUnitRate, this.state.unitID, { + Policy.updateCustomUnitRate(this.props.policy.id, currentCustomUnitRate, this.state.unitID, { ...currentCustomUnitRate, rate: numValue * CONST.POLICY.CUSTOM_UNIT_RATE_BASE_OFFSET, }); @@ -201,7 +198,7 @@ class WorkspaceReimburseView extends React.Component { menuItems={[ { title: this.props.translate('workspace.reimburse.viewAllReceipts'), - onPress: () => Link.openOldDotLink(`expenses?policyIDList=${this.props.policyID}&billableReimbursable=reimbursable&submitterEmail=%2B%2B`), + onPress: () => Link.openOldDotLink(`expenses?policyIDList=${this.props.policy.id}&billableReimbursable=reimbursable&submitterEmail=%2B%2B`), icon: Expensicons.Receipt, shouldShowRightIcon: true, iconRight: Expensicons.NewWindow, @@ -234,7 +231,7 @@ class WorkspaceReimburseView extends React.Component { }} pendingAction={lodashGet(this.props, ['policy', 'customUnits', this.state.unitID, 'pendingAction']) || lodashGet(this.props, ['policy', 'customUnits', this.state.unitID, 'rates', this.state.unitRateID, 'pendingAction'])} - onClose={() => Policy.clearCustomUnitErrors(this.props.policyID, this.state.unitID, this.state.unitRateID)} + onClose={() => Policy.clearCustomUnitErrors(this.props.policy.id, this.state.unitID, this.state.unitRateID)} > @@ -271,7 +268,7 @@ class WorkspaceReimburseView extends React.Component {