From 579281f602d8c3b4c71c612782e6f42d7aa94a23 Mon Sep 17 00:00:00 2001 From: vanGalilea Date: Thu, 1 Feb 2024 13:36:49 +0100 Subject: [PATCH] readme update --- README.md | 52 +++++--- apps/rn-cli-app/App.tsx | 21 ++- apps/rn-cli-app/ios/Podfile.lock | 6 - apps/rn-cli-app/package.json | 6 +- apps/rn-expo-app/.gitignore | 5 - yarn.lock | 220 ++++++++++--------------------- 6 files changed, 124 insertions(+), 186 deletions(-) diff --git a/README.md b/README.md index c1bf996..c89da7e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ banner

-## No More Hacks and Headaches | Learn How to Test Your Components Before Your Users Will +## No More Hacks and Headaches <> Learn How to Test Your Components Before Your Users Will [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=vanGalilea_react-native-testing&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=vanGalilea_react-native-testing) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=vanGalilea_react-native-testing&metric=coverage)](https://sonarcloud.io/summary/new_code?id=vanGalilea_react-native-testing) @@ -11,16 +11,17 @@ ### Covered Examples ๐ŸŽž - ๐Ÿ‘† [Clicking buttons and asserting onPress' outcome](https://github.com/vanGalilea/react-native-testing/blob/main/apps/rn-cli-app/__tests__/Counter.test.tsx). -- ๐Ÿ“ฒ [Filling a simple login form and asserting successful submission](https://github.com/vanGalilea/react-native-testing/blob/master/__tests__/LoginSubmission.test.tsx). -- ๐ŸŽฃ [Custom hook testing (number of alternatives)](https://github.com/vanGalilea/react-native-testing/blob/master/__tests__/CounterUsesCustomHook.test.tsx). -- ๐Ÿ“ก [Mocking fetch calls](https://github.com/vanGalilea/react-native-testing/blob/master/__tests__/LoginSubmission.test.tsx#L36). -- ๐Ÿงญ [Mocking navigation through screens](https://github.com/vanGalilea/react-native-testing/blob/master/__tests__/LoginSubmission.test.tsx#L13). ([react navigation v5](https://reactnavigation.org/)) -- ๐Ÿ”š [E2E feel due to real navigation throughout screens](https://github.com/vanGalilea/react-native-testing/blob/master/__tests__/Home.test.tsx). -- ๐Ÿ“ฅ [Handling and mocking providers](https://github.com/vanGalilea/react-native-testing/blob/master/src/test/test-utils.tsx). -- ๐Ÿ“น [Mocking external lib.'s components](https://github.com/vanGalilea/react-native-testing/blob/master/__tests__/Video.test.tsx). -- ๐ŸŽญ [Mocking and interacting with RN's Modal component](https://github.com/vanGalilea/react-native-testing/blob/master/__tests__/Modal.test.tsx). -- ๐Ÿงพ [Handling with a screen with RN's FlatList component](https://github.com/vanGalilea/react-native-testing/blob/master/__tests__/FlatList.test.tsx). -- ๐Ÿ“ก [Using MSW to mock api calls and handling loading/errors](https://github.com/vanGalilea/react-native-testing/blob/master/__tests__/ListWithFetch.test.tsx). +- ๐Ÿ“ฒ [Filling a simple login form and asserting successful submission](https://github.com/vanGalilea/react-native-testing/blob/main/apps/rn-cli-app/__tests__/LoginSubmission.test.tsx). +- ๐ŸŽฃ [Custom hook testing (number of alternatives)](https://github.com/vanGalilea/react-native-testing/blob/main/apps/rn-cli-app/__tests__/CounterUsesCustomHook.test.tsx). +- ๐Ÿ“ก [Mocking fetch calls](https://github.com/vanGalilea/react-native-testing/blob/main/apps/rn-cli-app/__tests__/LoginSubmission.test.tsx#L36). +- ๐Ÿงญ [Navigating through screens with React Navigation](https://github.com/vanGalilea/react-native-testing/blob/main/apps/rn-cli-app/__tests__/LoginSubmission.test.tsx#L13). +- ๐ŸšŸ [Navigating through screens with Expo Router](https://github.com/vanGalilea/react-native-testing/blob/main/apps/rn-expo-app/__tests__/app/index.test.tsx). +- ๐Ÿ”š [E2E feel due to real navigation throughout screens](https://github.com/vanGalilea/react-native-testing/blob/main/apps/rn-cli-app/__tests__/Home.test.tsx). +- ๐Ÿ“ฅ [Handling and mocking providers](https://github.com/vanGalilea/react-native-testing/blob/main/apps/rn-cli-app/src/test/test-utils.tsx). +- ๐Ÿ“น [Mocking external lib.'s components](https://github.com/vanGalilea/react-native-testing/blob/main/apps/rn-cli-app/__tests__/Video.test.tsx). +- ๐ŸŽญ [Mocking and interacting with RN's Modal component](https://github.com/vanGalilea/react-native-testing/blob/main/apps/rn-cli-app/__tests__/Modal.test.tsx). +- ๐Ÿงพ [Handling with a screen with RN's FlatList component](https://github.com/vanGalilea/react-native-testing/blob/main/apps/rn-cli-app/__tests__/FlatList.test.tsx). +- ๐Ÿ“ก [Using MSW to mock api calls and handling loading/errors](https://github.com/vanGalilea/react-native-testing/blob/main/apps/rn-cli-app/__tests__/ListWithFetch.test.tsx). ### Tools in use ๐Ÿ› ๏ธ - [Jest](https://jestjs.io/) @@ -31,25 +32,39 @@ - [RN- Setting up the development environment](https://reactnative.dev/docs/environment-setup) - [Installing Maestro](https://maestro.mobile.dev/getting-started/installing-maestro) -### How to run the tests ๐Ÿƒโ€โ™€๏ธ -- Clone the repo +## Getting Started ๐Ÿš€ +- Clone the repo ` git clone git@github.com:vanGalilea/react-native-testing.git` - Run `yarn` to install dependencies +- Explore RN CLI app and/or Expo app's tests and source code that are relevant to your use case. + + +## RN CLI application +### How to run the tests ๐Ÿƒโ€โ™€๏ธ +- Run `cd apps/rn-cli-app` to navigate to the app folder - Run `yarn test:unit` to run the unit tests - Run `yarn test:unit:dev` to run the unit tests in dev/watch mode - Run `yarn test:unit:coverage` to run the tests and generate a coverage report + +Make sure you have built and run the app in dev mode before running the e2e tests. - Run `yarn test:e2e` to run the e2e tests - Run `yarn test:e2e:dev` to run the e2e tests in dev/watch mode - Run `yarn test:e2e:record` to run the e2e tests and record a video of the tests ### How to run the app ๐Ÿ“ฑ -- Clone the repo -- Run `yarn` to install dependencies +- Run `cd apps/rn-cli-app` to navigate to the app folder - Run `npx pod-install` to install iOS dependencies - Run `yarn start` to start the metro bundler - Click `i` to run the app on iOS simulator or `a` to run it on Android emulator -### Ideas and future improvements ๐Ÿš€ -- โš›๏ธ Add tests for react native web project +## Expo application +### How to run the tests ๐Ÿƒโ€โ™€๏ธ +- Run `cd apps/rn-expo-app` to navigate to the app folder +- Run `yarn test:unit` to run the unit tests + +### How to run the app ๐Ÿ“ฑ +- Run `cd apps/rn-expo-app` to navigate to the app folder +- Run `yarn start` to start the metro bundler +- Click `i` to run the app on iOS simulator or `a` to run it on Android emulator ### Inspiration, resources and further reading ๐Ÿ“š - ๐Ÿ“‘ A blog by [Steve Galili]([url](https://github.com/vanGalilea)) on ["Where and How to Start Testing Your React Native App"](https://medium.com/@stevegalili/where-and-how-to-start-testing-your-react-native-app-%EF%B8%8F-and-how-to-keep-on-testin-ec3464fb9b41) @@ -61,7 +76,6 @@ For more info check [Epic React](https://epicreact.dev/). - ๐Ÿ—บ [React Navigation](https://reactnavigation.org/) - ๐Ÿ›ฐ [MSW](https://mswjs.io/) -### Impression of the the project ๐Ÿ“ธ - +### Impression of the project ๐Ÿ“ธ https://github.com/vanGalilea/react-native-testing/assets/25864161/cdb6cdc7-7b28-4ecd-819f-52dd3c3d76c8 diff --git a/apps/rn-cli-app/App.tsx b/apps/rn-cli-app/App.tsx index 70787f1..0137c0c 100644 --- a/apps/rn-cli-app/App.tsx +++ b/apps/rn-cli-app/App.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import {NavigationContainer} from '@react-navigation/native'; +import {NavigationContainer, useNavigation} from '@react-navigation/native'; import { createStackNavigator, StackNavigationProp, @@ -13,7 +13,7 @@ import {ThemeProvider} from './src/utils/theme'; import ListWithFetch from './src/components/ListWithFetch'; import LoginSubmission from './src/components/LoginSubmission'; import Counter from './src/components/Counter'; -import {Alert} from 'react-native'; +import {Alert, Pressable, Text} from 'react-native'; export type RootStackParamList = { Home: undefined; @@ -53,7 +53,7 @@ export default () => { @@ -75,3 +75,18 @@ export default () => { ); }; + +const HeaderLeft = () => { + const navigation = useNavigation(); + if (!navigation.canGoBack()) { + return null; + } + + return ( + navigation.goBack()}> + โ† + + ); +}; diff --git a/apps/rn-cli-app/ios/Podfile.lock b/apps/rn-cli-app/ios/Podfile.lock index b1d9761..3a7858e 100644 --- a/apps/rn-cli-app/ios/Podfile.lock +++ b/apps/rn-cli-app/ios/Podfile.lock @@ -1126,8 +1126,6 @@ PODS: - React-Core - RNCMaskedView (0.1.11): - React - - RNFlashList (1.6.3): - - React-Core - RNGestureHandler (2.14.1): - glog - RCT-Folly (= 2022.05.16.00) @@ -1216,7 +1214,6 @@ DEPENDENCIES: - ReactCommon/turbomodule/core (from `../../../node_modules/react-native/ReactCommon`) - "RNCAsyncStorage (from `../../../node_modules/@react-native-community/async-storage`)" - "RNCMaskedView (from `../../../node_modules/@react-native-community/masked-view`)" - - "RNFlashList (from `../../../node_modules/@shopify/flash-list`)" - RNGestureHandler (from `../../../node_modules/react-native-gesture-handler`) - RNScreens (from `../../../node_modules/react-native-screens`) - Yoga (from `../../../node_modules/react-native/ReactCommon/yoga`) @@ -1343,8 +1340,6 @@ EXTERNAL SOURCES: :path: "../../../node_modules/@react-native-community/async-storage" RNCMaskedView: :path: "../../../node_modules/@react-native-community/masked-view" - RNFlashList: - :path: "../../../node_modules/@shopify/flash-list" RNGestureHandler: :path: "../../../node_modules/react-native-gesture-handler" RNScreens: @@ -1418,7 +1413,6 @@ SPEC CHECKSUMS: ReactCommon: ddb128564dcbfa0287d3d1a2d10f8c7457c971f6 RNCAsyncStorage: b03032fdbdb725bea0bd9e5ec5a7272865ae7398 RNCMaskedView: 0e1bc4bfa8365eba5fbbb71e07fbdc0555249489 - RNFlashList: 4b4b6b093afc0df60ae08f9cbf6ccd4c836c667a RNGestureHandler: 25b969a1ffc806b9f9ad2e170d4a3b049c6af85e RNScreens: b582cb834dc4133307562e930e8fa914b8c04ef2 SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 diff --git a/apps/rn-cli-app/package.json b/apps/rn-cli-app/package.json index 9a07b62..8d367a4 100644 --- a/apps/rn-cli-app/package.json +++ b/apps/rn-cli-app/package.json @@ -10,9 +10,9 @@ "test:unit": "jest", "test:unit:dev": "jest --watch", "test:unit:coverage": "jest --coverage", - "test:e2e": "maestro test e2e/flow.yaml", - "test:e2e:dev": "maestro test -c e2e/flow.yaml", - "test:e2e:record": "maestro record e2e/flow.yaml" + "test:e2e": "maestro test .maestro/flow.yaml", + "test:e2e:dev": "maestro test -c .maestro/flow.yaml", + "test:e2e:record": "maestro record .maestro/flow.yaml" }, "dependencies": { "@react-native-community/async-storage": "^1.12.1", diff --git a/apps/rn-expo-app/.gitignore b/apps/rn-expo-app/.gitignore index 0b37b6e..5350487 100644 --- a/apps/rn-expo-app/.gitignore +++ b/apps/rn-expo-app/.gitignore @@ -34,8 +34,3 @@ yarn-error.* # typescript *.tsbuildinfo -# @generated expo-cli sync-2b81b286409207a5da26e14c78851eb30d8ccbdb -# The following patterns were generated by expo-cli - -expo-env.d.ts -# @end expo-cli \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index f52f348..4dc90c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1263,10 +1263,10 @@ mv "~2" safe-json-stringify "~1" -"@expo/cli@0.17.4": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.17.4.tgz#ac720bc03e16cc9f4130b4319118053743b50395" - integrity sha512-6pswecVC9qCBp1qa004D2HjPeXKYDaw/PhyUOsqnF7AUCwunlKa1tJO0Ik8zxzF68kuywIOXUnTJl74Z2aHqiw== +"@expo/cli@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.17.3.tgz#0763696671522062e5592411d02952ed905d4838" + integrity sha512-lIK8igsEQxTh4WuDlcEhE0wAJcDrAyjWDF00phdmwuSCpE5SaEXNlddOXvGxEVKPhUxHZUFo9NbfoQC+JVmkfA== dependencies: "@babel/runtime" "^7.20.0" "@expo/code-signing-certificates" "0.0.5" @@ -2007,12 +2007,12 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-compose-refs" "1.0.0" -"@react-native-async-storage/async-storage@^1.21.0": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz#d7e370028e228ab84637016ceeb495878b7a44c8" - integrity sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag== +"@react-native-community/async-storage@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@react-native-community/async-storage/-/async-storage-1.12.1.tgz#25f821b4f6b13abe005ad67e47c6f1cee9f27b24" + integrity sha512-70WGaH3PKYASi4BThuEEKMkyAgE9k7VytBqmgPRx3MzJx9/MkspwqJGmn3QLCgHLIFUgF1pit2mWICbRJ3T3lg== dependencies: - merge-options "^3.0.4" + deep-assign "^3.0.0" "@react-native-community/cli-clean@12.3.0": version "12.3.0" @@ -2320,23 +2320,16 @@ prompts "^2.4.2" semver "^7.5.2" -"@react-native-masked-view/masked-view@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@react-native-masked-view/masked-view/-/masked-view-0.3.1.tgz#5bd76f17004a6ccbcec03856893777ee91f23d29" - integrity sha512-uVm8U6nwFIlUd1iDIB5cS+lDadApKR+l8k4k84d9hn+GN4lzAIJhUZ9syYX7c022MxNgAlbxoFLt0pqKoyaAGg== +"@react-native-community/masked-view@^0.1.11": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@react-native-community/masked-view/-/masked-view-0.1.11.tgz#2f4c6e10bee0786abff4604e39a37ded6f3980ce" + integrity sha512-rQfMIGSR/1r/SyN87+VD8xHHzDYeHaJq6elOSCAD+0iLagXkSI2pfA0LmSXP21uw5i3em7GkkRjfJ8wpqWXZNw== -"@react-native/assets-registry@0.73.1", "@react-native/assets-registry@~0.73.1": +"@react-native/assets-registry@0.73.1", "@react-native/assets-registry@^0.73.1", "@react-native/assets-registry@~0.73.1": version "0.73.1" resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.73.1.tgz#e2a6b73b16c183a270f338dc69c36039b3946e85" integrity sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg== -"@react-native/babel-plugin-codegen@0.73.2": - version "0.73.2" - resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.2.tgz#447656cde437b71dc3ef0af3f8a5b215653d5d07" - integrity sha512-PadyFZWVaWXIBP7Q5dgEL7eAd7tnsgsLjoHJB1hIRZZuVUg1Zqe3nULwC7RFAqOtr5Qx7KXChkFFcKQ3WnZzGw== - dependencies: - "@react-native/codegen" "0.73.2" - "@react-native/babel-plugin-codegen@0.73.3": version "0.73.3" resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.3.tgz#6bf135322b89264342c80778ee6bb697f968f773" @@ -2344,54 +2337,6 @@ dependencies: "@react-native/codegen" "0.73.2" -"@react-native/babel-preset@0.73.19": - version "0.73.19" - resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.73.19.tgz#a6c0587651804f8f01d6f3b7729f1d4a2d469691" - integrity sha512-ujon01uMOREZecIltQxPDmJ6xlVqAUFGI/JCSpeVYdxyXBoBH5dBb0ihj7h6LKH1q1jsnO9z4MxfddtypKkIbg== - dependencies: - "@babel/core" "^7.20.0" - "@babel/plugin-proposal-async-generator-functions" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.18.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" - "@babel/plugin-proposal-numeric-separator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.20.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.18.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.20.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.20.0" - "@babel/plugin-transform-flow-strip-types" "^7.20.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-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@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-typescript" "^7.5.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - "@react-native/babel-plugin-codegen" "0.73.2" - babel-plugin-transform-flow-enums "^0.0.2" - react-refresh "^0.14.0" - "@react-native/babel-preset@0.73.20", "@react-native/babel-preset@^0.73.18": version "0.73.20" resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.73.20.tgz#65ab68cce16bb222bb1faece498abb6f7b1d5db0" @@ -2440,7 +2385,7 @@ babel-plugin-transform-flow-enums "^0.0.2" react-refresh "^0.14.0" -"@react-native/codegen@0.73.2": +"@react-native/codegen@0.73.2", "@react-native/codegen@^0.73.2": version "0.73.2" resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.73.2.tgz#58af4e4c3098f0e6338e88ec64412c014dd51519" integrity sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ== @@ -2453,20 +2398,20 @@ mkdirp "^0.5.1" nullthrows "^1.1.1" -"@react-native/community-cli-plugin@0.73.12": - version "0.73.12" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.12.tgz#3a72a8cbae839a0382d1a194a7067d4ffa0da04c" - integrity sha512-xWU06OkC1cX++Duh/cD/Wv+oZ0oSY3yqbtxAqQA2H3Q+MQltNNJM6MqIHt1VOZSabRf/LVlR1JL6U9TXJirkaw== +"@react-native/community-cli-plugin@0.73.11": + version "0.73.11" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.11.tgz#8826cb81bb794408202e1ce7d87e45710eff1a9f" + integrity sha512-s0bprwljKS1Al8wOKathDDmRyF+70CcNE2G/aqZ7+L0NoOE0Uxxx/5P2BxlM2Mfht7O33B4SeMNiPdE/FqIubQ== dependencies: "@react-native-community/cli-server-api" "12.3.0" "@react-native-community/cli-tools" "12.3.0" - "@react-native/dev-middleware" "0.73.7" - "@react-native/metro-babel-transformer" "0.73.13" + "@react-native/dev-middleware" "^0.73.6" + "@react-native/metro-babel-transformer" "^0.73.12" chalk "^4.0.0" execa "^5.1.1" - metro "^0.80.3" - metro-config "^0.80.3" - metro-core "^0.80.3" + metro "^0.80.0" + metro-config "^0.80.0" + metro-core "^0.80.0" node-fetch "^2.2.0" readline "^1.3.0" @@ -2508,7 +2453,7 @@ serve-static "^1.13.1" temp-dir "^2.0.0" -"@react-native/eslint-config@0.73.2": +"@react-native/eslint-config@^0.73.1": version "0.73.2" resolved "https://registry.yarnpkg.com/@react-native/eslint-config/-/eslint-config-0.73.2.tgz#40b2cd8ce245e90c885b8ab15fae1219a946bfac" integrity sha512-YzMfes19loTfbrkbYNAfHBDXX4oRBzc5wnvHs4h2GIHUj6YKs5ZK5lldqSrBJCdZAI3nuaO9Qj+t5JRwou571w== @@ -2532,27 +2477,17 @@ resolved "https://registry.yarnpkg.com/@react-native/eslint-plugin/-/eslint-plugin-0.73.1.tgz#79d2c4d90c80bfad8900db335bfbaf1ca599abdc" integrity sha512-8BNMFE8CAI7JLWLOs3u33wcwcJ821LYs5g53Xyx9GhSg0h8AygTwDrwmYb/pp04FkCNCPjKPBoaYRthQZmxgwA== -"@react-native/gradle-plugin@0.73.4": +"@react-native/gradle-plugin@0.73.4", "@react-native/gradle-plugin@^0.73.4": version "0.73.4" resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz#aa55784a8c2b471aa89934db38c090d331baf23b" integrity sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg== -"@react-native/js-polyfills@0.73.1": +"@react-native/js-polyfills@0.73.1", "@react-native/js-polyfills@^0.73.1": version "0.73.1" resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.73.1.tgz#730b0a7aaab947ae6f8e5aa9d995e788977191ed" integrity sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g== -"@react-native/metro-babel-transformer@0.73.13": - version "0.73.13" - resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.13.tgz#81cb6dd8d5140c57f5595183fd6857feb8b7f5d7" - integrity sha512-k9AQifogQfgUXPlqQSoMtX2KUhniw4XvJl+nZ4hphCH7qiMDAwuP8OmkJbz5E/N+Ro9OFuLE7ax4GlwxaTsAWg== - dependencies: - "@babel/core" "^7.20.0" - "@react-native/babel-preset" "0.73.19" - hermes-parser "0.15.0" - nullthrows "^1.1.1" - -"@react-native/metro-babel-transformer@0.73.14": +"@react-native/metro-babel-transformer@0.73.14", "@react-native/metro-babel-transformer@^0.73.12": version "0.73.14" resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.14.tgz#a4ee02c729216e4ab5b7c7aa28abbfe8e0a943a8" integrity sha512-5wLeYw/lormpSqYfI9H/geZ/EtPmi+x5qLkEit15Q/70hkzYo/M+aWztUtbOITfgTEOP8d6ybROzoGsqgyZLcw== @@ -2562,17 +2497,7 @@ hermes-parser "0.15.0" nullthrows "^1.1.1" -"@react-native/metro-config@0.73.3": - version "0.73.3" - resolved "https://registry.yarnpkg.com/@react-native/metro-config/-/metro-config-0.73.3.tgz#15f5e1393258148fadb285821dd9b037ea411459" - integrity sha512-aIVh+lM52n7/RFDXLDiIp1vI21jc9thm2VxdkP7KwxMut7VvW+2tO38zKt74/2ker2ca0205tbf3pyCYBvV6Ww== - dependencies: - "@react-native/js-polyfills" "0.73.1" - "@react-native/metro-babel-transformer" "0.73.13" - metro-config "^0.80.3" - metro-runtime "^0.80.3" - -"@react-native/metro-config@0.73.4": +"@react-native/metro-config@^0.73.2": version "0.73.4" resolved "https://registry.yarnpkg.com/@react-native/metro-config/-/metro-config-0.73.4.tgz#475feab57a60734c5f40c60ef92f4552dec6174c" integrity sha512-4IpWb9InOY23ssua6z/ho2B4uRqF4QaNHGg4aV3D/og5yiVF39GEm/REHU36i+KoHRO3GcB6DrI7N9KrcvgGBw== @@ -2587,17 +2512,17 @@ resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.1.0.tgz#939b87a9849e81687d3640c5efa2a486ac266f91" integrity sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA== -"@react-native/normalize-colors@0.73.2", "@react-native/normalize-colors@^0.73.0": +"@react-native/normalize-colors@0.73.2", "@react-native/normalize-colors@^0.73.0", "@react-native/normalize-colors@^0.73.2": version "0.73.2" resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz#cc8e48fbae2bbfff53e12f209369e8d2e4cf34ec" integrity sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w== -"@react-native/typescript-config@0.73.1": +"@react-native/typescript-config@^0.73.1": version "0.73.1" resolved "https://registry.yarnpkg.com/@react-native/typescript-config/-/typescript-config-0.73.1.tgz#c97a42f5cd264069bfe86b737c531ed2f042ae6d" integrity sha512-7Wrmdp972ZO7xvDid+xRGtvX6xz47cpGj7Y7VKlUhSVFFqbOGfB5WCpY1vMr6R/fjl+Og2fRw+TETN2+JnJi0w== -"@react-native/virtualized-lists@0.73.4": +"@react-native/virtualized-lists@0.73.4", "@react-native/virtualized-lists@^0.73.4": version "0.73.4" resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.73.4.tgz#640e594775806f63685435b5d9c3d05c378ccd8c" integrity sha512-HpmLg1FrEiDtrtAbXiwCgXFYyloK/dOIPIuWW3fsqukwJEWAiTzm1nXGJ7xPU5XTHiWZ4sKup5Ebaj8z7iyWog== @@ -4394,6 +4319,13 @@ dedent@^1.0.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== +deep-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-3.0.0.tgz#c8e4c4d401cba25550a2f0f486a2e75bc5f219a2" + integrity sha512-YX2i9XjJ7h5q/aQ/IM9PEwEnDqETAIYbggmdDB3HLTlSgo1CxPsj6pvhPG68rq6SVE0+p+6Ywsm5fTYNrYtBWw== + dependencies: + is-obj "^1.0.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -5186,13 +5118,13 @@ expo-status-bar@~1.11.1: resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.11.1.tgz#a11318741d361048c11db2b16c4364a79a74af30" integrity sha512-ddQEtCOgYHTLlFUe/yH67dDBIoct5VIULthyT3LRJbEwdpzAgueKsX2FYK02ldh440V87PWKCamh7R9evk1rrg== -expo@~50.0.5: - version "50.0.5" - resolved "https://registry.yarnpkg.com/expo/-/expo-50.0.5.tgz#16c13eca981990fce2c884e974885935aca74da8" - integrity sha512-gfZbJv8eqVG1xX8QqlQHF4Mn6HnLFuE14Kq5FRUVZQWE+IhlrP+mr+un7Zdp/3a63Bp/VkPzHi77G1bVP1pM7A== +expo@~50.0.3: + version "50.0.4" + resolved "https://registry.yarnpkg.com/expo/-/expo-50.0.4.tgz#3ec5349a58b8b3264bc2f218d85b673beb352a99" + integrity sha512-8QWBvYZyKFd7pHxbtri8/ZITBR19QbrW2IkezAhs3ZOHR2kluSgNfyo9ojAe7GnOnE8hCB6Xe83Dbm0R3Ealhw== dependencies: "@babel/runtime" "^7.20.0" - "@expo/cli" "0.17.4" + "@expo/cli" "0.17.3" "@expo/config" "8.5.4" "@expo/config-plugins" "7.8.4" "@expo/metro-config" "0.17.3" @@ -6156,6 +6088,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -6166,11 +6103,6 @@ is-path-inside@^3.0.2, is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -6764,7 +6696,7 @@ jest-worker@^29.6.3, jest-worker@^29.7.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.6.3, jest@^29.7.0: +jest@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== @@ -7237,13 +7169,6 @@ memory-cache@~0.2.0: resolved "https://registry.yarnpkg.com/memory-cache/-/memory-cache-0.2.0.tgz#7890b01d52c00c8ebc9d533e1f8eb17e3034871a" integrity sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA== -merge-options@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" - integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== - dependencies: - is-plain-obj "^2.1.0" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -7276,7 +7201,7 @@ metro-cache@0.80.5: metro-core "0.80.5" rimraf "^3.0.2" -metro-config@0.80.5, metro-config@^0.80.3: +metro-config@0.80.5, metro-config@^0.80.0, metro-config@^0.80.3: version "0.80.5" resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.80.5.tgz#859e2ce307372f583bc8ebfe69bd233dd9328a8b" integrity sha512-elqo/lwvF+VjZ1OPyvmW/9hSiGlmcqu+rQvDKw5F5WMX48ZC+ySTD1WcaD7e97pkgAlJHVYqZ98FCjRAYOAFRQ== @@ -7289,7 +7214,7 @@ metro-config@0.80.5, metro-config@^0.80.3: metro-core "0.80.5" metro-runtime "0.80.5" -metro-core@0.80.5, metro-core@^0.80.3: +metro-core@0.80.5, metro-core@^0.80.0, metro-core@^0.80.3: version "0.80.5" resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.80.5.tgz#3ead635dcecfa6d0b380f8a80d3e5406f70846a9" integrity sha512-vkLuaBhnZxTVpaZO8ZJVEHzjaqSXpOdpAiztSZ+NDaYM6jEFgle3/XIbLW91jTSf2+T8Pj5yB1G7KuOX+BcVwg== @@ -7327,14 +7252,14 @@ metro-resolver@0.80.5: resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.80.5.tgz#3915be3b2bcf4f3e9e2f24bdde8d8c9ac26bb134" integrity sha512-haJ/Hveio3zv/Fr4eXVdKzjUeHHDogYok7OpRqPSXGhTXisNXB+sLN7CpcUrCddFRUDLnVaqQOYwhYsFndgUwA== -metro-runtime@0.80.5, metro-runtime@^0.80.3: +metro-runtime@0.80.5, metro-runtime@^0.80.0, metro-runtime@^0.80.3: version "0.80.5" resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.80.5.tgz#48ac4c732be195e0ebdefb5ac5d32c7da76305ad" integrity sha512-L0syTWJUdWzfUmKgkScr6fSBVTh6QDr8eKEkRtn40OBd8LPagrJGySBboWSgbyn9eIb4ayW3Y347HxgXBSAjmg== dependencies: "@babel/runtime" "^7.0.0" -metro-source-map@0.80.5, metro-source-map@^0.80.3: +metro-source-map@0.80.5, metro-source-map@^0.80.0, metro-source-map@^0.80.3: version "0.80.5" resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.80.5.tgz#21acdc1d5417cf3009209555d84cbeb61de5d6d5" integrity sha512-DwSF4l03mKPNqCtyQ6K23I43qzU1BViAXnuH81eYWdHglP+sDlPpY+/7rUahXEo6qXEHXfAJgVoo1sirbXbmsQ== @@ -7389,7 +7314,7 @@ metro-transform-worker@0.80.5: metro-transform-plugins "0.80.5" nullthrows "^1.1.1" -metro@0.80.5, metro@^0.80.3: +metro@0.80.5, metro@^0.80.0, metro@^0.80.3: version "0.80.5" resolved "https://registry.yarnpkg.com/metro/-/metro-0.80.5.tgz#94cd36df2eab434f050314a6d31529e8dc1b26df" integrity sha512-OE/CGbOgbi8BlTN1QqJgKOBaC27dS0JBQw473JcivrpgVnqIsluROA7AavEaTVUrB9wPUZvoNVDROn5uiM2jfw== @@ -8165,7 +8090,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@2.8.8, prettier@^2.8.8: +prettier@^2.8.8: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== @@ -8405,7 +8330,7 @@ react-native-video@6.0.0-alpha.7: keymirror "^0.1.1" prop-types "^15.7.2" -react-native@*, react-native@0.73.3: +react-native@*: version "0.73.3" resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.73.3.tgz#aae18b4c6da84294c1f8e1d6446b46c887bf087c" integrity sha512-RSQDtT2DNUcmB4IgmW9NhRb5wqvXFl6DI2NEJmt0ps2OrVHpoA8Tkq+lkFOA/fvPscJKtFKEHFBDSR5UHR3PUw== @@ -8449,22 +8374,22 @@ react-native@*, react-native@0.73.3: ws "^6.2.2" yargs "^17.6.2" -react-native@0.73.2: - version "0.73.2" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.73.2.tgz#74ee163c8189660d41d1da6560411da7ce41a608" - integrity sha512-7zj9tcUYpJUBdOdXY6cM8RcXYWkyql4kMyGZflW99E5EuFPoC7Ti+ZQSl7LP9ZPzGD0vMfslwyDW0I4tPWUCFw== +react-native@0.73.1: + version "0.73.1" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.73.1.tgz#5eafaa7e54feeab8b55e8b8e4efc4d21052a4fff" + integrity sha512-nLl9O2yKRh1nMXwsk4SUiD0ddd19RqlKgNU9AU8bTK/zD2xwnVOG56YK1/22SN67niWyoeG83vVg1eTk+S6ReA== dependencies: "@jest/create-cache-key-function" "^29.6.3" "@react-native-community/cli" "12.3.0" "@react-native-community/cli-platform-android" "12.3.0" "@react-native-community/cli-platform-ios" "12.3.0" - "@react-native/assets-registry" "0.73.1" - "@react-native/codegen" "0.73.2" - "@react-native/community-cli-plugin" "0.73.12" - "@react-native/gradle-plugin" "0.73.4" - "@react-native/js-polyfills" "0.73.1" - "@react-native/normalize-colors" "0.73.2" - "@react-native/virtualized-lists" "0.73.4" + "@react-native/assets-registry" "^0.73.1" + "@react-native/codegen" "^0.73.2" + "@react-native/community-cli-plugin" "0.73.11" + "@react-native/gradle-plugin" "^0.73.4" + "@react-native/js-polyfills" "^0.73.1" + "@react-native/normalize-colors" "^0.73.2" + "@react-native/virtualized-lists" "^0.73.4" abort-controller "^3.0.0" anser "^1.4.9" ansi-regex "^5.0.0" @@ -8476,8 +8401,8 @@ react-native@0.73.2: jest-environment-node "^29.6.3" jsc-android "^250231.0.0" memoize-one "^5.0.0" - metro-runtime "^0.80.3" - metro-source-map "^0.80.3" + metro-runtime "^0.80.0" + metro-source-map "^0.80.0" mkdirp "^0.5.1" nullthrows "^1.1.1" pretty-format "^26.5.2" @@ -9745,11 +9670,6 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" - integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== - typescript@5.3.3, typescript@^5.1.3: version "5.3.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"