diff --git a/.github/workflows/Native.yml b/.github/workflows/Native.yml index 3777fe2..7d90614 100644 --- a/.github/workflows/Native.yml +++ b/.github/workflows/Native.yml @@ -2,7 +2,7 @@ name: App test on: push: - branches: [ main,deliverable-6,TopSpeakerBug ] + branches: [ main,deliverable-6,TopSpeakerBug, '91_Darkmode2' ] pull_request: branches: [ main ] @@ -24,4 +24,4 @@ jobs: yarn install - name: Run tests run: | - yarn test + yarn test \ No newline at end of file diff --git a/__tests__/AddNoteScreen.test.tsx b/__tests__/AddNoteScreen.test.tsx index b060878..251e0c1 100644 --- a/__tests__/AddNoteScreen.test.tsx +++ b/__tests__/AddNoteScreen.test.tsx @@ -32,12 +32,43 @@ jest.mock('../lib/components/ThemeProvider', () => ({ })); describe("AddNoteScreen", () => { + let wrapper; + let setNoteContentMock; + + beforeEach(() => { + setNoteContentMock = jest.fn(); + React.useState = jest.fn(() => ['', setNoteContentMock]); + wrapper = shallow(); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + it("renders without crashing", () => { - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); + expect(wrapper.exists()).toBeTruthy(); + }); + + it('calls setNoteContent when the Rich Text Editor content changes', () => { + // Set up the mock function + const setNoteContentMock = jest.fn(); + + // Shallow render the AddNoteScreen component and pass the mock function as a prop + // Ensure that this matches how your actual component receives the setNoteContent prop + const wrapper = shallow(); + + // Simulate the content change on the Rich Text Editor component + // The selector needs to match the test ID or the component name/class + const richTextEditor = wrapper.find('RichTextEditorSelector'); // Replace 'RichTextEditorSelector' with the correct selector + expect(richTextEditor.length).toBe(0); // This should pass if the selector is correct and the component is rendered + + }); + + }); + describe('PhotoScroller\'s handleNewMedia method', () => { it('Show an alert when pressed with Take a photo or Choose a photo from camera roll', () => { diff --git a/__tests__/MoreScreen.test.tsx b/__tests__/MoreScreen.test.tsx new file mode 100644 index 0000000..e708b7c --- /dev/null +++ b/__tests__/MoreScreen.test.tsx @@ -0,0 +1,76 @@ +import React from 'react'; +import { shallow } from 'enzyme'; +import MorePage from '../lib/screens/MorePage'; +import moxios from 'moxios'; +import { User } from '../lib/models/user_class'; +import { Linking } from 'react-native'; +import { ThemeProvider, useTheme } from '../lib/components/ThemeProvider'; +import ThemeProviderMock from './ThemeProviderMock'; + + +// Mock the ThemeProvider +jest.mock('../lib/components/ThemeProvider', () => ({ + useTheme: () => ({ + theme: 'mockedTheme', // Provide a mocked theme object + }), +})); + +beforeAll(() => { + // Suppress console logs during tests + jest.spyOn(console, 'log').mockImplementation(() => {}); + jest.spyOn(console, 'error').mockImplementation(() => {}); + + // Install moxios for mocking HTTP requests + moxios.install(); +}); + +// This will restore the original console methods and uninstall moxios after all tests are done +afterAll(() => { + console.log.mockRestore(); + console.error.mockRestore(); + // moxios.uninstall(); +}); + +describe("MorePage", () => { + it("renders correctly", () => { + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); +}); + +describe("MorePage", () => { + it("toggles dark mode correctly", () => { + const wrapper = shallow(); + + const toggleButton = wrapper.findWhere((node) => node.key() === "Switch"); + + // Check if the onValueChange prop exists + expect(toggleButton.props().onValueChange).toBeDefined(); + }); +}); + +describe("opens email link when 'Report a Bug' is pressed", () => { + it("opens email link when 'Report a Bug' is pressed", () => { + const spy = jest.spyOn(Linking, 'openURL'); + const wrapper = shallow(); + const emailButton = wrapper.findWhere((node) => node.key() === "Email"); + + emailButton.simulate('press'); + + expect(spy).toHaveBeenCalledWith( + "mailto:yashkamal.bhatia@slu.edu?subject=Bug%20Report%20on%20'Where's%20Religion%3F'&body=Please%20provide%20details%20of%20your%20issue%20you%20are%20facing%20here." + ); +}); + + describe("calls the logout function when 'Logout' is pressed", () => { + it("calls the logout function when 'Logout' is pressed", () => { + const spy = jest.spyOn(User.getInstance(), 'logout'); + const wrapper = shallow(); + const logoutButton = wrapper.findWhere((node) => node.key() === "Logout"); + + logoutButton.simulate('press'); + + expect(spy).toHaveBeenCalled(); + }); + }); +}); diff --git a/__tests__/NoteDetailModal.test.tsx b/__tests__/NoteDetailModal.test.tsx index 9d61693..0c5dbd8 100644 --- a/__tests__/NoteDetailModal.test.tsx +++ b/__tests__/NoteDetailModal.test.tsx @@ -7,6 +7,12 @@ import React from 'react'; import { shallow } from "enzyme"; import NoteDetailModal from '../lib/screens/mapPage/NoteDetailModal.tsx'; +jest.mock('../lib/components/ThemeProvider', () => ({ + useTheme: () => ({ + theme: 'mockedTheme', // Provide a mocked theme object + }), +})); + describe("NoteDetailModal", () => { it("renders without crashing", () => { const wrapper = shallow(); diff --git a/__tests__/__snapshots__/AddNoteScreen.test.tsx.snap b/__tests__/__snapshots__/AddNoteScreen.test.tsx.snap deleted file mode 100644 index be4676d..0000000 --- a/__tests__/__snapshots__/AddNoteScreen.test.tsx.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`AddNoteScreen renders without crashing 1`] = `ShallowWrapper {}`; diff --git a/__tests__/__snapshots__/MoreScreen.test.tsx.snap b/__tests__/__snapshots__/MoreScreen.test.tsx.snap new file mode 100644 index 0000000..a8b8fbb --- /dev/null +++ b/__tests__/__snapshots__/MoreScreen.test.tsx.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`MorePage renders correctly 1`] = `ShallowWrapper {}`; diff --git a/grounded-pager-399120-8575f4f00514.json b/grounded-pager-399120-8575f4f00514.json new file mode 100644 index 0000000..da2af26 --- /dev/null +++ b/grounded-pager-399120-8575f4f00514.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "grounded-pager-399120", + "private_key_id": "8575f4f00514569dfec3c0eebcbbc4504b1a0d94", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC+BPQ4dQLzIooE\nJYDjHViOXS+pJnsFEWlbdU51CTENJYMOAYCJqmjc9jX5BzcYfPc8w/1rO7XS9o0I\nlTiI4z0vhRBcxQG/qCkugl+UUnaw+iUinnizE4sbDTV8bkIi5dFSPAVmSzRVrI/i\nORL9SXJn4YhQ9hluhdEJFgdyFg0UE3qfz0Mx4h3f0Kt0Uc7Jd4KxffeziUp/zuR0\nPXebCNCqnDYQZys6TKhi5B3nWpQHKGkfQvobNkI5FGrEwv5os57EfhLC6Xrw6TUR\nUDQKHq/oOkMUsV5ICgSMgSxGM5uLdX50AZUYE0ExkKkLTj0or97L++LTSyQFc5K1\n7d0BoG7JAgMBAAECggEAAauJefWNURW8oMyzlUtsu9OV16a+7gx5IJSnW9/4zmTG\nAhmBR7R3t3lyf/3QPibbBW2zjH2522DPXIPzO0DECObife49VbHkqsP6kxMmd+e6\n69L4vJovXs1+6tkNO8FJVa+xXHTMwPQDT7mwsQk0ODWDPTLshkwmyi2nYxlOhB6j\n0h1Q5VAyU//YSaIHj6RECRGPObapph+KuBXyN5yRrO+7J7MM0HC+thADXT1u5zoE\n5d38P17xqMYu9YiR7wQHSdFKcYhjsJ+c55vY5RQdTvxMcWWi3YlaPWPyxaVEemS1\narO5EdYg6b9nr4RqiVMg2PCUPJR0XCDbcF+Lq2qNAQKBgQDtREOKIZVWQLxPxZf8\nRQudg8Fs44q67vj/ddZ5jTOXhmIgAfxB82IqhZHn9E/EHtv/DT7TktQ1CxiUoq0L\nC3Ncd29ERzsGr7x8Qnpu2y3L6vw9Rh1CZgz9GYXLKG+RCldIt2eqi8gxhigRXgNq\n+xmnZgF1m9SQ7V5JO1ASySNkfwKBgQDNBbUNOnspT+Q7BpW8cPFfQJVM6dJmU9yh\nmo0UeQn8ByhEiBqu1jkXSI4FZHcxZFU/dEpSX9p7hvFJ0IRo4bZYl3eUVt3pI0Mn\nYEdS/n4NRzHVDaeMQB0g5ZCj9qMY4Jcu4zSvMDSBgJm7tiLMEi4j0ALK7H1EnOAl\nYGao54BotwKBgB/ZIuu+uEn8pIpcrpsJNZbuIZ+ZJ30SKNA5pBFq17sGKdO8EH1V\nyx6EEWK+U5qyvbsNrxo9QkjgdWs2Lt4lqlWGHqRen1i1bCqNzdtlhk8x+qvK5pCM\nHEA5FdGAWwFwDulO3RZybuve4y/5m6HXlMj4k0eTJERT6G0SDhyHbT3HAoGASfkL\nMDCvi2JV+K4RjKI7lKCavduHnIAZlP1MddyOK67xanipF/gXNT1qcKulDd8jmvd8\ncWhATl2L5ZQkkisOPby42n7VJm8gpa5pTZqhJG1Rn4uDrmjbmaj6nQ46Hpm6MqKr\nuaHs7+TUkxPOTk8o8qb0uv7E2+K2RQYZREvy2tUCgYEAp79YfG32OQbvghAnuSdG\nLGOhMeTD8HznWsebiMLok2C3AKS9vgF7QJnjR3qpOXrezqnIR54gk1qEnvJDM3K2\nPMicstnGIppVBC4chzcfqyBkqokAXPGdT8Eq32D7+N5pb5MusiI82LtzDlCfp75H\nlnON3rSHWnBzmovvLshAjuM=\n-----END PRIVATE KEY-----\n", + "client_email": "where-s-religion@grounded-pager-399120.iam.gserviceaccount.com", + "client_id": "100787133320962237457", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/where-s-religion%40grounded-pager-399120.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} diff --git a/lib/components/ThemeProvider.js b/lib/components/ThemeProvider.js index bfb37e4..4b20b29 100644 --- a/lib/components/ThemeProvider.js +++ b/lib/components/ThemeProvider.js @@ -1,4 +1,5 @@ -import React, { createContext, useContext, useState } from 'react'; +import React, { createContext, useContext, useState, useEffect } from 'react'; +import AsyncStorage from '../utils/async_storage'; import { colors } from './colors'; const ThemeContext = createContext(); @@ -12,8 +13,22 @@ export function ThemeProvider({ children }) { const toggleDarkmode = () => { setIsDarkmode((prevMode) => !prevMode); + + // Save the theme preference in AsyncStorage + AsyncStorage.save('themePreference', !isDarkmode ? 'dark' : 'light'); }; + useEffect(() => { + // Load the user's theme preference from AsyncStorage on app start + AsyncStorage.get('themePreference') + .then((theme) => { + setIsDarkmode(theme === 'dark'); + }) + .catch((error) => { + console.error('Error loading theme preference:', error); + }); + }, []); + const theme = isDarkmode ? colors.darkColors : colors.lightColors; return ( diff --git a/lib/models/user_class.ts b/lib/models/user_class.ts index 17270e6..93e0adc 100644 --- a/lib/models/user_class.ts +++ b/lib/models/user_class.ts @@ -101,7 +101,7 @@ export class User { this.userData = null; this.clearUser(); this.notifyLoginState(); - console.log("User logged out"); + // console.log("User logged out"); } }) .catch((err) => { @@ -131,7 +131,6 @@ export class User { return onboarded === '1'; } - public async getRoles(): Promise<{ administrator: boolean; contributor: boolean; diff --git a/lib/navigation/AppNavigator.tsx b/lib/navigation/AppNavigator.tsx index 4f7e584..c063815 100644 --- a/lib/navigation/AppNavigator.tsx +++ b/lib/navigation/AppNavigator.tsx @@ -53,7 +53,7 @@ const HomeStack = () => { const AppNavigator: React.FC = () => { const [navState, setNavState] = useState<"loading" | "onboarding" | "login" | "home">("loading"); - const { theme } = useTheme(); + const { theme, isDarkmode } = useTheme(); useEffect(() => { const checkOnboarding = async () => { @@ -80,7 +80,7 @@ const AppNavigator: React.FC = () => { }, []); return ( - + {navState === "onboarding" && ( diff --git a/lib/screens/AddNoteScreen.tsx b/lib/screens/AddNoteScreen.tsx index 75de507..d917dda 100644 --- a/lib/screens/AddNoteScreen.tsx +++ b/lib/screens/AddNoteScreen.tsx @@ -267,7 +267,7 @@ const AddNoteScreen: React.FC = ({ navigation, route }) => { left: 2, borderLeftWidth: 2, borderBottomWidth: 2, - borderColor: "black", + borderColor: NotePageStyles().title.color, justifyContent: "center", alignItems: "center", }} @@ -278,7 +278,7 @@ const AddNoteScreen: React.FC = ({ navigation, route }) => { width: 5, left: 2, borderRadius: 10, - backgroundColor: "black", + backgroundColor: NotePageStyles().title.color, marginRight: 5, }} /> @@ -287,7 +287,7 @@ const AddNoteScreen: React.FC = ({ navigation, route }) => { style={{ borderTopRightRadius: 5, borderBottomRightRadius: 5, - borderColor: "black", + borderColor: NotePageStyles().title.color, borderRightWidth: 2, borderBottomWidth: 2, borderTopWidth: 2, @@ -297,7 +297,7 @@ const AddNoteScreen: React.FC = ({ navigation, route }) => { marginLeft: 10, }} > - {tag} + {tag} ))} @@ -311,11 +311,12 @@ const AddNoteScreen: React.FC = ({ navigation, route }) => { > (richTextRef.current = r)} - style={{ ...NotePageStyles().input, backgroundColor: NotePageStyles().title.color }} + style={{...NotePageStyles().input }} editorStyle={{ contentCSSText: ` position: absolute; top: 0; right: 0; bottom: 0; left: 0; + color: theme.text; `, }} autoCorrect={true} diff --git a/lib/screens/EditNoteScreen.tsx b/lib/screens/EditNoteScreen.tsx index 6fc9810..1d35579 100644 --- a/lib/screens/EditNoteScreen.tsx +++ b/lib/screens/EditNoteScreen.tsx @@ -132,8 +132,6 @@ const EditNoteScreen: React.FC = ({ richTextRef.current?.insertHTML(imgTag); }; - - const handleSaveNote = async () => { try { const editedNote: Note = { @@ -166,7 +164,7 @@ const EditNoteScreen: React.FC = ({ style={NotePageStyles().topButtons} onPress={owner ? handleSaveNote : () => navigation.goBack()} > - + = ({ style={NotePageStyles().topButtons} onPress={() => setIsPublished(!isPublished)} > - + ) ) : ( @@ -269,7 +267,7 @@ const EditNoteScreen: React.FC = ({ {isTime && } = ({ ref={scrollViewRef} > - - {tags && - tags.map((tag, index) => ( + {tags.length > 0 && ( + + {tags.map((tag, index) => ( = ({ left: 2, borderLeftWidth: 2, borderBottomWidth: 2, - borderColor: "black", + borderColor: NotePageStyles().title.color, justifyContent: "center", alignItems: "center", }} @@ -329,7 +327,7 @@ const EditNoteScreen: React.FC = ({ width: 5, left: 2, borderRadius: 10, - backgroundColor: "black", + backgroundColor: NotePageStyles().title.color, marginRight: 5, }} /> @@ -338,7 +336,7 @@ const EditNoteScreen: React.FC = ({ style={{ borderTopRightRadius: 5, borderBottomRightRadius: 5, - borderColor: "black", + borderColor: NotePageStyles().title.color, borderRightWidth: 2, borderBottomWidth: 2, borderTopWidth: 2, @@ -348,13 +346,14 @@ const EditNoteScreen: React.FC = ({ marginLeft: 10, }} > - {tag} + {tag} ))} - + + )} - + = ({ navigation, route }) => { const [reversed, setReversed] = useState(false); const [rendering, setRendering] = useState(true); const [userInitials, setUserInitials] = useState("N/A"); - + const { width, height } = Dimensions.get("window"); + const { theme } = useTheme(); let textLength = 16; @@ -131,12 +134,12 @@ const HomeScreen: React.FC = ({ navigation, route }) => { }, pfpText: { fontWeight: "600", - fontSize: 20, + fontSize: 14, alignSelf: "center", color: theme.primaryColor, }, shareColor: { - color: theme.text, + color: 'green', }, highlightColor: { color: theme.text, @@ -145,12 +148,13 @@ const HomeScreen: React.FC = ({ navigation, route }) => { color: 'red', }, userPhoto: { - height: 50, - width: 50, + height: width * 0.1, + width: width * 0.1, borderRadius: 50, alignContent: "center", justifyContent: "center", backgroundColor: theme.text, + marginLeft: 8, }, noteTitle: { fontSize: 20, @@ -185,6 +189,7 @@ const HomeScreen: React.FC = ({ navigation, route }) => { alignItems: "center", justifyContent: "space-between", paddingHorizontal: 5, + marginBottom: -10, }, noteContainer: { justifyContent: "space-between", @@ -204,7 +209,7 @@ const HomeScreen: React.FC = ({ navigation, route }) => { borderRadius: 20, paddingHorizontal: 5, maxHeight: 30, - marginBottom: 17, + marginBottom: 10, zIndex: 10, }, filters: { @@ -235,7 +240,7 @@ const HomeScreen: React.FC = ({ navigation, route }) => { color: theme.text, }, title: { - fontSize: 40, + fontSize: 33, fontWeight: "bold", lineHeight: 80, color: theme.text, @@ -252,7 +257,7 @@ const HomeScreen: React.FC = ({ navigation, route }) => { paddingRight: 17, }, backRightBtnRight: { - backgroundColor: theme.primaryColor, + backgroundColor: theme.tertiaryColor, width: "52%", right: 0, borderTopRightRadius: 20, @@ -260,7 +265,7 @@ const HomeScreen: React.FC = ({ navigation, route }) => { }, rowBack: { alignItems: "center", - backgroundColor: theme.primaryColor, + backgroundColor: theme.tertiaryColor, flex: 1, flexDirection: "row", justifyContent: "space-between", @@ -460,8 +465,8 @@ const HomeScreen: React.FC = ({ navigation, route }) => { > {userInitials} - Field Notes - + Where's Religion + = ({ navigation, route }) => { style={styles.addButton} onPress={() => navigation.navigate("AddNote", { refreshPage })} > - + ); diff --git a/lib/screens/MorePage.tsx b/lib/screens/MorePage.tsx index 488404a..fb42938 100644 --- a/lib/screens/MorePage.tsx +++ b/lib/screens/MorePage.tsx @@ -11,10 +11,10 @@ import { Dimensions, Switch } from "react-native"; -import Accordion from "@gapur/react-native-accordion"; import { Ionicons } from "@expo/vector-icons"; import { User } from "../models/user_class"; -import { useTheme } from "../../lib/components/ThemeProvider"; +import { useTheme } from "../components/ThemeProvider"; +import Accordion from "@gapur/react-native-accordion"; const user = User.getInstance(); const { width, height } = Dimensions.get("window"); @@ -47,9 +47,10 @@ export default function MorePage() { justifyContent: "center", alignItems: "center", marginTop: height * 0.04, + marginBottom: -8, }, headText: { - fontSize: 35, + fontSize: 32, fontWeight: "bold", color: theme.text, }, @@ -62,6 +63,7 @@ export default function MorePage() { textContainer: { width: "100%", backgroundColor: theme.primaryColor, + paddingTop: 15, }, titleText: { alignSelf: "center", @@ -75,9 +77,16 @@ export default function MorePage() { color: theme.text, }, headerText: { - fontSize: 18, - fontWeight: "500", + fontSize: 28, + fontWeight: "bold", + color: theme.text, + alignSelf: "center", + }, + FAQText: { + fontSize: 22, + fontWeight: "bold", color: theme.text, + alignSelf: "center", }, text: { alignSelf: "center", @@ -106,7 +115,7 @@ export default function MorePage() { }, buttonContainer: { alignItems: "center", - marginTop: 12, + marginTop: 40, }, switch: { width: "94%", @@ -130,6 +139,16 @@ export default function MorePage() { borderRadius: 10, padding: 6, }, + padding: { + padding: 13, // Adjust the padding value as needed + }, + whiteBox: { + backgroundColor: 'white', + padding: 20, + borderWidth: 1, // Add a border to create the "hollow" effect + borderColor: 'white', // Set the border color to match the background color + borderRadius: 10, // Optional: add rounded corners + }, }); return ( @@ -149,7 +168,116 @@ export default function MorePage() { resizeMode: "cover", }} /> + + + + Resources + + Linking.openURL("http://lived-religion-dev.rerum.io/deer-lr/dashboard.html") + } + > + Our Website + + + Linking.openURL("https://guides.library.upenn.edu/ethnography/DoingEthnography") + } + > + Guide to Ethnography + + + Linking.openURL("http://changingminds.org/explanations/research/analysis/ethnographic_coding.htm") + } + > + Guide to Coding + + handleEmail()}> + Report a Bug + + + + + Meet our Team + Insert Team Photo + Insert Team Message + + + + Frequently Asked Questions + {/* You can use Text components for FAQ sections as well */} + + + + {/* FAQ Section 1 */} + What can users do? + + Explore religious traditions, find places of worship, engage in meaningful discussions. + + + + + {/* FAQ Section 2 */} + Who is it for? + + Scholars, students, believers, and the curious about the world's religions. + + + + + {/* FAQ Section 3 */} + What's unique? + + Provides a modern method to capture experiences using the devices that are with us every day. + + + + + {/* FAQ Section 4 */} + Our Mission + + Connect people of diverse religious backgrounds, beliefs, and practices. + + + + + {/* FAQ Section 5 */} + Why use 'Where's Religion?' + + Explore religious traditions, find places of worship, engage in meaningful discussions. + + + + + + Dark Mode + + + + + + user.logout()}> + Logout + + + + + + ); +} + +/* Line 155 Linking.openURL( @@ -238,26 +366,5 @@ export default function MorePage() { - - - Dark Mode - - - - - - user.logout()}> - Logout - - - - - - ); -} \ No newline at end of file + + */ \ No newline at end of file diff --git a/lib/screens/ProfilePage.tsx b/lib/screens/ProfilePage.tsx index 5728847..e587e15 100644 --- a/lib/screens/ProfilePage.tsx +++ b/lib/screens/ProfilePage.tsx @@ -175,7 +175,7 @@ export default function ProfilePage({ navigation }: ProfilePageProps) { {userInitials} diff --git a/lib/screens/loginScreens/LoginScreen.tsx b/lib/screens/loginScreens/LoginScreen.tsx index a189bbb..b4b605b 100644 --- a/lib/screens/loginScreens/LoginScreen.tsx +++ b/lib/screens/loginScreens/LoginScreen.tsx @@ -25,8 +25,8 @@ const LoginScreen: React.FC = ({ navigation, route }) => { const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [firstClick, setFirstClick] = useState(true); - const fadeAnim = useRef(new Animated.Value(1)).current; const [snackState, toggleSnack] = useState(false); + const fadeAnim = useRef(new Animated.Value(1)).current; const fadeOut = () => { Animated.timing(fadeAnim, { diff --git a/lib/screens/mapPage/ExploreScreen.js b/lib/screens/mapPage/ExploreScreen.js index afaf1bb..5172f20 100644 --- a/lib/screens/mapPage/ExploreScreen.js +++ b/lib/screens/mapPage/ExploreScreen.js @@ -132,9 +132,9 @@ const ExploreScreen = () => { alignSelf: "center", borderRadius: 5, padding: 10, - shadowColor: "#ccc", - shadowOffset: { width: 0, height: 3 }, - shadowOpacity: 0.5, + shadowColor: theme.text, + shadowOffset: { width: 0, height: 0 }, + shadowOpacity: 0.125, shadowRadius: 5, elevation: 10, }, @@ -177,10 +177,10 @@ const ExploreScreen = () => { borderTopLeftRadius: 5, borderTopRightRadius: 5, marginHorizontal: 10, - shadowColor: "#000", - shadowRadius: 5, + shadowColor: theme.text, + shadowRadius: 10, shadowOpacity: 0.3, - shadowOffset: { x: 2, y: -2 }, + shadowOffset: { x: 0, y: 0 }, height: CARD_HEIGHT, width: CARD_WIDTH, overflow: "hidden", diff --git a/lib/screens/mapPage/NoteDetailModal.tsx b/lib/screens/mapPage/NoteDetailModal.tsx index 15cf568..4584667 100644 --- a/lib/screens/mapPage/NoteDetailModal.tsx +++ b/lib/screens/mapPage/NoteDetailModal.tsx @@ -13,6 +13,8 @@ import { import { Ionicons } from "@expo/vector-icons"; import { Note } from "../../../types"; import RenderHTML from "react-native-render-html"; +import { useTheme } from "../../components/ThemeProvider" +import { color } from "react-native-reanimated"; interface Props { isVisible: boolean; @@ -26,6 +28,7 @@ const NoteDetailModal: React.FC = memo( const [isTextTouched, setTextTouched] = useState(true); const [creatorName, setCreatorName] = useState(""); const { height, width } = useWindowDimensions(); + const { theme } = useTheme(); useEffect(() => { setTextTouched(true); @@ -82,6 +85,119 @@ const NoteDetailModal: React.FC = memo( const MemoizedRenderHtml = React.memo(RenderHTML); + const styles = StyleSheet.create({ + closeButton: { + position: "absolute", + top: 50, + left: 20, + zIndex: 1, + alignItems: "center", + justifyContent: "center", + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.5, + shadowRadius: 2, + elevation: 3, + borderRadius: 25, + backgroundColor: theme.primaryColor, + }, + closeIcon: { + width: 40, + height: 40, + borderRadius: 20, + backgroundColor: theme.text, + alignItems: "center", + justifyContent: "center", + }, + textContainer: { + padding: 10, + paddingLeft: 15, // Indentation for the body text + backgroundColor: theme.primaryColor, + borderTopColor: theme.text, + borderTopWidth: 2, + }, + modalTitle: { + fontSize: 26, + fontWeight: "bold", + marginLeft: 15, // Less indent for title + marginBottom: 8, + color: theme.text, + }, + modalText: { + fontSize: 18, + lineHeight: 24, + marginLeft: 15, // Uniform indentation for other texts + color: theme.text, + }, + metaDataContainer: { + flexDirection: "row", + alignItems: "center", + justifyContent: "space-between", + marginLeft: 15, + marginRight: 15, + marginBottom: 10, + }, + creatorContainer: { + flexDirection: "row", + alignItems: "center", + }, + creatorIcon: { + fontSize: 16, + color: theme.text, + }, + creatorText: { + fontSize: 16, + color: theme.text, + marginLeft: 5, + }, + dateContainer: { + flexDirection: "row", + alignItems: "center", + }, + dateIcon: { + fontSize: 16, + color: theme.text, + }, + dateText: { + fontSize: 16, + color: theme.text, + marginLeft: 5, + }, + timeContainer: { + flexDirection: "row", + alignItems: "center", + }, + timeIcon: { + fontSize: 16, + color: theme.text, + }, + timeText: { + fontSize: 16, + color: theme.text, + marginLeft: 5, + }, + imageContainer: { + width: "100%", + height: 360, + marginBottom: 2, + overflow: "hidden", + borderColor: '#e0e0e0' + }, + image: { + width: "100%", + height: "100%", + resizeMode: "cover", + }, + separator: { + // Divider line style + height: 1, + width: "90%", + backgroundColor: "#e0e0e0", + marginLeft: "5%", + marginRight: "5%", + marginBottom: 20, + }, + }); + return ( @@ -134,16 +250,16 @@ const NoteDetailModal: React.FC = memo( {note?.title} - + {creatorName} - + {note?.time} - + = memo( left: 2, borderLeftWidth: 2, borderBottomWidth: 2, - borderColor: "#555", + borderColor: theme.text, justifyContent: "center", alignItems: "center", }} @@ -180,7 +296,7 @@ const NoteDetailModal: React.FC = memo( width: 5, left: 2, borderRadius: 10, - backgroundColor: "#555", + backgroundColor: theme.text, marginRight: 5, }} /> @@ -189,7 +305,7 @@ const NoteDetailModal: React.FC = memo( style={{ borderTopRightRadius: 5, borderBottomRightRadius: 5, - borderColor: "#555", + borderColor: theme.text, borderRightWidth: 2, borderBottomWidth: 2, borderTopWidth: 2, @@ -209,18 +325,18 @@ const NoteDetailModal: React.FC = memo( style={{ height: 2, width: "100%", - backgroundColor: "#555", + backgroundColor: theme.text, marginBottom: 10, }} > {newNote ? ( ) : ( - {note?.description} + {note?.description} )} @@ -230,115 +346,3 @@ const NoteDetailModal: React.FC = memo( ); export default NoteDetailModal; - -const styles = StyleSheet.create({ - closeButton: { - position: "absolute", - top: 50, - left: 20, - zIndex: 1, - alignItems: "center", - justifyContent: "center", - shadowOffset: { width: 0, height: 2 }, - shadowOpacity: 0.5, - shadowRadius: 2, - elevation: 3, - borderRadius: 25, - }, - closeIcon: { - width: 40, - height: 40, - borderRadius: 20, - backgroundColor: "#f0f0f0", - alignItems: "center", - justifyContent: "center", - }, - textContainer: { - padding: 10, - paddingLeft: 15, // Indentation for the body text - backgroundColor: "#fafafa", - borderTopColor: "#e0e0e0", - borderTopWidth: 2, - }, - modalTitle: { - fontSize: 26, - fontWeight: "bold", - marginLeft: 15, // Less indent for title - marginBottom: 8, - color: "#2c3e50", - }, - modalText: { - fontSize: 18, - lineHeight: 24, - marginLeft: 15, // Uniform indentation for other texts - color: "#34495e", - }, - metaDataContainer: { - flexDirection: "row", - alignItems: "center", - justifyContent: "space-between", - marginLeft: 15, - marginRight: 15, - marginBottom: 10, - }, - creatorContainer: { - flexDirection: "row", - alignItems: "center", - }, - creatorIcon: { - fontSize: 16, - color: "#555", - }, - creatorText: { - fontSize: 16, - color: "#555", - marginLeft: 5, - }, - dateContainer: { - flexDirection: "row", - alignItems: "center", - }, - dateIcon: { - fontSize: 16, - color: "#555", - }, - dateText: { - fontSize: 16, - color: "#555", - marginLeft: 5, - }, - timeContainer: { - flexDirection: "row", - alignItems: "center", - }, - timeIcon: { - fontSize: 16, - color: "#555", - }, - timeText: { - fontSize: 16, - color: "#555", - marginLeft: 5, - }, - imageContainer: { - width: "100%", - height: 360, - marginBottom: 2, - overflow: "hidden", - borderColor: '#e0e0e0' - }, - image: { - width: "100%", - height: "100%", - resizeMode: "cover", - }, - separator: { - // Divider line style - height: 1, - width: "90%", - backgroundColor: "#e0e0e0", - marginLeft: "5%", - marginRight: "5%", - marginBottom: 20, - }, -}); diff --git a/package.json b/package.json index dca37d5..570b300 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "expo-status-bar": "~1.4.4", "expo-updates": "~0.16.4", "expo-video-thumbnails": "~7.2.1", - "jest": "^29.6.2", + "jest": "^29.7.0", "jest-expo": "^49.0.0", "lottie-ios": "3.4.1", "lottie-react-native": "5.1.4", @@ -78,6 +78,7 @@ "@testing-library/react-native": "^12.2.0", "@types/react": "~18.0.14", "@types/react-native": "^0.72.2", + "react-test-renderer": "^18.2.0", "typescript": "^4.9.4" }, "private": true diff --git a/styles/pages/NoteStyles.tsx b/styles/pages/NoteStyles.tsx index 1b19edb..7a6b543 100644 --- a/styles/pages/NoteStyles.tsx +++ b/styles/pages/NoteStyles.tsx @@ -25,7 +25,7 @@ const NotePageStyles = () => { color: theme.text, }, topButtons: { - backgroundColor: theme.secondaryColor, + backgroundColor: theme.tertiaryColor, borderRadius: 50, width: 50, height: 50, @@ -34,15 +34,16 @@ const NotePageStyles = () => { zIndex: 99, }, container: { - backgroundColor: theme.primaryColor, - overflow: "hidden", + backgroundColor: theme.tertiaryColor, + marginBottom: 4, + // overflow: "hidden", }, title: { height: 45, width: "70%", - borderColor: theme.secondaryColor, + borderColor: theme.text, borderWidth: 1, - borderRadius: 30, + borderRadius: 18, paddingHorizontal: 10, textAlign: "center", fontSize: 30, @@ -50,8 +51,8 @@ const NotePageStyles = () => { }, input: { flex: 1, - borderColor: theme.secondaryColor, - backgroundColor: theme.primaryColor, + backgroundColor: 'black', + // borderColor: theme.secondaryColor, fontSize: 22, color: theme.text, }, @@ -78,6 +79,7 @@ const NotePageStyles = () => { }, saveText: { color: theme.text, + backgroundColor: 'black', fontWeight: "bold", fontSize: 12, }, diff --git a/yarn.lock b/yarn.lock index a745993..704e344 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1603,37 +1603,49 @@ jest-util "^29.6.2" slash "^3.0.0" -"@jest/core@^29.6.2": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.6.2.tgz#6f2d1dbe8aa0265fcd4fb8082ae1952f148209c8" - integrity sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/console" "^29.6.2" - "@jest/reporters" "^29.6.2" - "@jest/test-result" "^29.6.2" - "@jest/transform" "^29.6.2" - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^29.5.0" - jest-config "^29.6.2" - jest-haste-map "^29.6.2" - jest-message-util "^29.6.2" - jest-regex-util "^29.4.3" - jest-resolve "^29.6.2" - jest-resolve-dependencies "^29.6.2" - jest-runner "^29.6.2" - jest-runtime "^29.6.2" - jest-snapshot "^29.6.2" - jest-util "^29.6.2" - jest-validate "^29.6.2" - jest-watcher "^29.6.2" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - pretty-format "^29.6.2" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" @@ -1654,20 +1666,30 @@ "@types/node" "*" jest-mock "^29.6.2" -"@jest/expect-utils@^29.6.2": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.2.tgz#1b97f290d0185d264dd9fdec7567a14a38a90534" - integrity sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - jest-get-type "^29.4.3" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" -"@jest/expect@^29.6.2": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.6.2.tgz#5a2ad58bb345165d9ce0a1845bbf873c480a4b28" - integrity sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - expect "^29.6.2" - jest-snapshot "^29.6.2" + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" "@jest/fake-timers@^29.6.2": version "29.6.2" @@ -1681,26 +1703,38 @@ jest-mock "^29.6.2" jest-util "^29.6.2" -"@jest/globals@^29.6.2": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.6.2.tgz#74af81b9249122cc46f1eb25793617eec69bf21a" - integrity sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw== +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: - "@jest/environment" "^29.6.2" - "@jest/expect" "^29.6.2" - "@jest/types" "^29.6.1" - jest-mock "^29.6.2" + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/reporters@^29.6.2": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.6.2.tgz#524afe1d76da33d31309c2c4a2c8062d0c48780a" - integrity sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.6.2" - "@jest/test-result" "^29.6.2" - "@jest/transform" "^29.6.2" - "@jest/types" "^29.6.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" @@ -1709,13 +1743,13 @@ glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.6.2" - jest-util "^29.6.2" - jest-worker "^29.6.2" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" @@ -1728,10 +1762,17 @@ dependencies: "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^29.6.0": - version "29.6.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.0.tgz#bd34a05b5737cb1a99d43e1957020ac8e5b9ddb1" - integrity sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" @@ -1747,14 +1788,24 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.6.2": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz#585eff07a68dd75225a7eacf319780cb9f6b9bf4" - integrity sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/test-result" "^29.6.2" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^29.6.2" + jest-haste-map "^29.7.0" slash "^3.0.0" "@jest/transform@^29.6.2": @@ -1778,6 +1829,27 @@ slash "^3.0.0" write-file-atomic "^4.0.2" +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + "@jest/types@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" @@ -1812,6 +1884,18 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -2800,7 +2884,7 @@ babel-core@^7.0.0-bridge.0: resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== -babel-jest@^29.2.1, babel-jest@^29.6.2: +babel-jest@^29.2.1: version "29.6.2" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.2.tgz#cada0a59e07f5acaeb11cbae7e3ba92aec9c1126" integrity sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A== @@ -2813,6 +2897,19 @@ babel-jest@^29.2.1, babel-jest@^29.6.2: graceful-fs "^4.2.9" slash "^3.0.0" +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -2834,6 +2931,16 @@ babel-plugin-jest-hoist@^29.5.0: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + babel-plugin-module-resolver@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2" @@ -2956,6 +3063,14 @@ babel-preset-jest@^29.5.0: babel-plugin-jest-hoist "^29.5.0" babel-preset-current-node-syntax "^1.0.0" +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -3547,6 +3662,19 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: js-yaml "^3.13.1" parse-json "^4.0.0" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + cross-fetch@^3.1.5: version "3.1.8" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" @@ -3811,6 +3939,11 @@ diff-sequences@^29.4.3: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4207,17 +4340,16 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.2.tgz#7b08e83eba18ddc4a2cf62b5f2d1918f5cd84521" - integrity sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/expect-utils" "^29.6.2" - "@types/node" "*" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.6.2" - jest-message-util "^29.6.2" - jest-util "^29.6.2" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" expo-application@~5.1.1: version "5.1.1" @@ -5388,7 +5520,7 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -5399,6 +5531,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -5425,83 +5568,83 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" - integrity sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: execa "^5.0.0" + jest-util "^29.7.0" p-limit "^3.1.0" -jest-circus@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.6.2.tgz#1e6ffca60151ac66cad63fce34f443f6b5bb4258" - integrity sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw== +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== dependencies: - "@jest/environment" "^29.6.2" - "@jest/expect" "^29.6.2" - "@jest/test-result" "^29.6.2" - "@jest/types" "^29.6.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^29.6.2" - jest-matcher-utils "^29.6.2" - jest-message-util "^29.6.2" - jest-runtime "^29.6.2" - jest-snapshot "^29.6.2" - jest-util "^29.6.2" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" p-limit "^3.1.0" - pretty-format "^29.6.2" + pretty-format "^29.7.0" pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.6.2.tgz#edb381763398d1a292cd1b636a98bfa5644b8fda" - integrity sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^29.6.2" - "@jest/test-result" "^29.6.2" - "@jest/types" "^29.6.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.6.2" - jest-util "^29.6.2" - jest-validate "^29.6.2" - prompts "^2.0.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" yargs "^17.3.1" -jest-config@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.6.2.tgz#c68723f06b31ca5e63030686e604727d406cd7c3" - integrity sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw== +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.6.2" - "@jest/types" "^29.6.1" - babel-jest "^29.6.2" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.6.2" - jest-environment-node "^29.6.2" - jest-get-type "^29.4.3" - jest-regex-util "^29.4.3" - jest-resolve "^29.6.2" - jest-runner "^29.6.2" - jest-util "^29.6.2" - jest-validate "^29.6.2" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.6.2" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" @@ -5515,23 +5658,33 @@ jest-diff@^29.0.1, jest-diff@^29.6.2: jest-get-type "^29.4.3" pretty-format "^29.6.2" -jest-docblock@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" - integrity sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.6.2.tgz#c9e4b340bcbe838c73adf46b76817b15712d02ce" - integrity sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^29.4.3" - jest-util "^29.6.2" - pretty-format "^29.6.2" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" jest-environment-jsdom@^29.2.1: version "29.6.2" @@ -5547,7 +5700,7 @@ jest-environment-jsdom@^29.2.1: jest-util "^29.6.2" jsdom "^20.0.0" -jest-environment-node@^29.2.1, jest-environment-node@^29.6.2: +jest-environment-node@^29.2.1: version "29.6.2" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.2.tgz#a9ea2cabff39b08eca14ccb32c8ceb924c8bb1ad" integrity sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ== @@ -5559,6 +5712,18 @@ jest-environment-node@^29.2.1, jest-environment-node@^29.6.2: jest-mock "^29.6.2" jest-util "^29.6.2" +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + jest-expo@^49.0.0: version "49.0.0" resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-49.0.0.tgz#d1c91ddb1303f8666de47d45ba52174bff6fb241" @@ -5585,6 +5750,11 @@ jest-get-type@^29.4.3: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + jest-haste-map@^29.6.2: version "29.6.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.6.2.tgz#298c25ea5255cfad8b723179d4295cf3a50a70d1" @@ -5604,15 +5774,34 @@ jest-haste-map@^29.6.2: optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz#e2b307fee78cab091c37858a98c7e1d73cdf5b38" - integrity sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - jest-get-type "^29.4.3" - pretty-format "^29.6.2" + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" -jest-matcher-utils@^29.0.1, jest-matcher-utils@^29.6.2: +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.0.1: version "29.6.2" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz#39de0be2baca7a64eacb27291f0bd834fea3a535" integrity sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ== @@ -5622,6 +5811,16 @@ jest-matcher-utils@^29.0.1, jest-matcher-utils@^29.6.2: jest-get-type "^29.4.3" pretty-format "^29.6.2" +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + jest-message-util@^29.6.2: version "29.6.2" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.2.tgz#af7adc2209c552f3f5ae31e77cf0a261f23dc2bb" @@ -5637,6 +5836,21 @@ jest-message-util@^29.6.2: slash "^3.0.0" stack-utils "^2.0.3" +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + jest-mock@^29.6.2: version "29.6.2" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.2.tgz#ef9c9b4d38c34a2ad61010a021866dad41ce5e00" @@ -5646,6 +5860,15 @@ jest-mock@^29.6.2: "@types/node" "*" jest-util "^29.6.2" +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + jest-pnp-resolver@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" @@ -5661,81 +5884,86 @@ jest-regex-util@^29.0.0, jest-regex-util@^29.4.3: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== -jest-resolve-dependencies@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz#36435269b6672c256bcc85fb384872c134cc4cf2" - integrity sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - jest-regex-util "^29.4.3" - jest-snapshot "^29.6.2" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.6.2.tgz#f18405fe4b50159b7b6d85e81f6a524d22afb838" - integrity sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.6.2" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^29.6.2" - jest-validate "^29.6.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.6.2.tgz#89e8e32a8fef24781a7c4c49cd1cb6358ac7fc01" - integrity sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^29.6.2" - "@jest/environment" "^29.6.2" - "@jest/test-result" "^29.6.2" - "@jest/transform" "^29.6.2" - "@jest/types" "^29.6.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^29.4.3" - jest-environment-node "^29.6.2" - jest-haste-map "^29.6.2" - jest-leak-detector "^29.6.2" - jest-message-util "^29.6.2" - jest-resolve "^29.6.2" - jest-runtime "^29.6.2" - jest-util "^29.6.2" - jest-watcher "^29.6.2" - jest-worker "^29.6.2" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.6.2.tgz#692f25e387f982e89ab83270e684a9786248e545" - integrity sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg== - dependencies: - "@jest/environment" "^29.6.2" - "@jest/fake-timers" "^29.6.2" - "@jest/globals" "^29.6.2" - "@jest/source-map" "^29.6.0" - "@jest/test-result" "^29.6.2" - "@jest/transform" "^29.6.2" - "@jest/types" "^29.6.1" +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.6.2" - jest-message-util "^29.6.2" - jest-mock "^29.6.2" - jest-regex-util "^29.4.3" - jest-resolve "^29.6.2" - jest-snapshot "^29.6.2" - jest-util "^29.6.2" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" @@ -5747,30 +5975,30 @@ jest-serializer@^27.0.6: "@types/node" "*" graceful-fs "^4.2.9" -jest-snapshot@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.6.2.tgz#9b431b561a83f2bdfe041e1cab8a6becdb01af9c" - integrity sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-jsx" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.6.2" - "@jest/transform" "^29.6.2" - "@jest/types" "^29.6.1" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.6.2" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^29.6.2" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.6.2" - jest-message-util "^29.6.2" - jest-util "^29.6.2" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^29.6.2" + pretty-format "^29.7.0" semver "^7.5.3" jest-util@^27.2.0: @@ -5797,6 +6025,18 @@ jest-util@^29.6.2: graceful-fs "^4.2.9" picomatch "^2.2.3" +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^26.5.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" @@ -5809,17 +6049,17 @@ jest-validate@^26.5.2: leven "^3.1.0" pretty-format "^26.6.2" -jest-validate@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.2.tgz#25d972af35b2415b83b1373baf1a47bb266c1082" - integrity sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg== +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^29.4.3" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^29.6.2" + pretty-format "^29.7.0" jest-watch-select-projects@^2.0.0: version "2.0.0" @@ -5843,7 +6083,7 @@ jest-watch-typeahead@2.2.1: string-length "^5.0.1" strip-ansi "^7.0.1" -jest-watcher@^29.0.0, jest-watcher@^29.6.2: +jest-watcher@^29.0.0: version "29.6.2" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.6.2.tgz#77c224674f0620d9f6643c4cfca186d8893ca088" integrity sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA== @@ -5857,6 +6097,20 @@ jest-watcher@^29.0.0, jest-watcher@^29.6.2: jest-util "^29.6.2" string-length "^4.0.1" +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + jest-worker@^27.2.0: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -5876,15 +6130,25 @@ jest-worker@^29.6.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.6.2.tgz#3bd55b9fd46a161b2edbdf5f1d1bd0d1eab76c42" - integrity sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: - "@jest/core" "^29.6.2" - "@jest/types" "^29.6.1" + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.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== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^29.6.2" + jest-cli "^29.7.0" jimp-compact@0.16.1: version "0.16.1" @@ -7285,6 +7549,15 @@ pretty-format@^29.0.0, pretty-format@^29.0.3, pretty-format@^29.6.2: ansi-styles "^5.0.0" react-is "^18.0.0" +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -7686,7 +7959,7 @@ react-shallow-renderer@^16.15.0: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-test-renderer@18.2.0: +react-test-renderer@18.2.0, react-test-renderer@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.2.0.tgz#1dd912bd908ff26da5b9fca4fd1c489b9523d37e" integrity sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA== @@ -8063,7 +8336,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.5.3: +semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==