From 3235f352aa2cd2e4d8a8266b970462140603fa0e Mon Sep 17 00:00:00 2001 From: bwees Date: Wed, 28 Feb 2024 17:36:04 -0600 Subject: [PATCH 01/25] first layouts --- app/components/map/MapView.tsx | 54 +++--- .../sheets/route_planning/InputRoute.tsx | 159 ++++++++++++++++++ app/components/ui/SuggestionInput.tsx | 0 app/data/app_state.ts | 4 +- app/index.tsx | 6 + 5 files changed, 199 insertions(+), 24 deletions(-) create mode 100644 app/components/sheets/route_planning/InputRoute.tsx create mode 100644 app/components/ui/SuggestionInput.tsx diff --git a/app/components/map/MapView.tsx b/app/components/map/MapView.tsx index 3841615..f13480b 100644 --- a/app/components/map/MapView.tsx +++ b/app/components/map/MapView.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useRef, useState } from "react"; -import { Dimensions, TouchableOpacity } from "react-native"; +import { Dimensions, TouchableOpacity, View } from "react-native"; import MapView, { LatLng, Polyline, Region } from 'react-native-maps'; import * as Location from 'expo-location'; import MaterialIcons from '@expo/vector-icons/MaterialIcons'; @@ -8,6 +8,7 @@ import useAppStore from "../../data/app_state"; import BusMarker from "./markers/BusMarker"; import StopMarker from "./markers/StopMarker"; import { useVehicles } from "../../data/api_query"; +import { FontAwesome6 } from "@expo/vector-icons"; const Map: React.FC = () => { const mapViewRef = useRef(null); @@ -223,27 +224,36 @@ const Map: React.FC = () => { })} - recenterView()} - > - {isViewCenteredOnUser ? - - : - - } - + {/* map buttons */} + + + recenterView()}> + {isViewCenteredOnUser ? + + : + + } + + + {/* Divider */} + + + presentSheet("inputRoute")}> + + + + ) } diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx new file mode 100644 index 0000000..28670e5 --- /dev/null +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -0,0 +1,159 @@ +import React, { memo, useEffect, useState } from "react"; +import { View, Text, TouchableOpacity } from "react-native"; +import { BottomSheetModal, BottomSheetView, BottomSheetFlatList } from "@gorhom/bottom-sheet"; +import Ionicons from '@expo/vector-icons/Ionicons'; +import useAppStore from "../../../data/app_state"; +import SheetHeader from "../../ui/SheetHeader"; +import { IMapServiceInterruption } from "utils/interfaces"; +import { useServiceInterruptions } from "app/data/api_query"; +import { TextInput } from "react-native-gesture-handler"; +import { MaterialCommunityIcons } from "@expo/vector-icons"; + +interface SheetProps { + sheetRef: React.RefObject +} + +// AlertList (for all routes and current route) +const InputRoute: React.FC = ({ sheetRef }) => { + + const snapPoints = ['25%', '45%', '85%']; + + const theme = useAppStore((state) => state.theme); + const selectedRoute = useAppStore((state) => state.selectedRoute); + const presentSheet = useAppStore((state) => state.presentSheet); + const setSelectedAlert = useAppStore((state) => state.setSelectedAlert); + const [shownAlerts, setShownAlerts] = useState([]); + + const { data: alerts, isError } = useServiceInterruptions() + + // If no route is selected, we're looking at all routes, therefore show all alerts + // If a route is selected, only show the alerts for that route + useEffect(() => { + if (!alerts) { + setShownAlerts([]); + return + } + + if (!selectedRoute) { + setShownAlerts(alerts); + return; + } + + const alertKeys = selectedRoute.directionList.flatMap(direction => direction.serviceInterruptionKeys); + const filteredAlerts = alerts.filter(alert => alertKeys.includes(Number(alert.key))); + + setShownAlerts(filteredAlerts); + }, [selectedRoute, alerts]); + + const displayDetailAlert = (alert: IMapServiceInterruption) => { + setSelectedAlert(alert); + presentSheet("alertsDetail"); + } + return ( + + + {/* header */} + sheetRef.current?.dismiss()}> + + + } + /> + + + + {/* Route Details Input */} + + + {/* Endpoint Input */} + + {/* Icons */} + + + + + {/* 3 dots */} + + + + + + + + + + + {/* Text Inputs */} + + + + + + + + + + + + + + + + + + + ) +} + +export default memo(InputRoute); \ No newline at end of file diff --git a/app/components/ui/SuggestionInput.tsx b/app/components/ui/SuggestionInput.tsx new file mode 100644 index 0000000..e69de29 diff --git a/app/data/app_state.ts b/app/data/app_state.ts index 0fa2023..abceb3c 100644 --- a/app/data/app_state.ts +++ b/app/data/app_state.ts @@ -23,8 +23,8 @@ interface AppState { setSelectedStop: (selectedStop: IStop | null) => void, // TODO: Switch to Provider Functions - presentSheet: (sheet: "routeDetails" | "alerts" | "stopTimetable" | "settings" | "alertsDetail") => void - setPresentSheet: (presentSheet: (sheet: "routeDetails" | "alerts" | "stopTimetable" | "settings" | "alertsDetail") => void) => void + presentSheet: (sheet: "routeDetails" | "alerts" | "stopTimetable" | "settings" | "alertsDetail" | "inputRoute") => void + setPresentSheet: (presentSheet: (sheet: "routeDetails" | "alerts" | "stopTimetable" | "settings" | "alertsDetail" | "inputRoute") => void) => void selectedAlert: IMapServiceInterruption | null, setSelectedAlert: (selectedAlert: IMapServiceInterruption | null) => void diff --git a/app/index.tsx b/app/index.tsx index ec9dfd2..33ea373 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -13,6 +13,7 @@ import { darkMode, lightMode } from './theme'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { getColorScheme } from './utils'; +import InputRoute from './components/sheets/route_planning/InputRoute'; const Home = () => { const setPresentSheet = useAppStore((state) => state.setPresentSheet); @@ -24,6 +25,7 @@ const Home = () => { const routeDetailSheetRef = useRef(null); const stopTimetableSheetRef = useRef(null); const settingsSheetRef = useRef(null); + const inputRouteSheetRef = useRef(null); setPresentSheet((sheet) => { switch (sheet) { @@ -42,6 +44,9 @@ const Home = () => { case "alertsDetail": alertDetailSheetRef.current?.present(); break; + case "inputRoute": + inputRouteSheetRef.current?.present(); + break; default: break; } @@ -75,6 +80,7 @@ const Home = () => { + From 90230ea98a909b8d120998749417c7afbf4b32be Mon Sep 17 00:00:00 2001 From: bwees Date: Thu, 29 Feb 2024 16:32:38 -0600 Subject: [PATCH 02/25] add inital endpoint selection code --- .../sheets/route_planning/InputRoute.tsx | 231 ++++++++++-------- app/components/ui/SuggestionInput.tsx | 94 +++++++ app/data/app_state.ts | 18 +- app/theme.ts | 6 + utils/interfaces.ts | 17 +- 5 files changed, 266 insertions(+), 100 deletions(-) diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx index 28670e5..36ab626 100644 --- a/app/components/sheets/route_planning/InputRoute.tsx +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -1,13 +1,13 @@ -import React, { memo, useEffect, useState } from "react"; +import React, { memo, useEffect, useRef, useState } from "react"; import { View, Text, TouchableOpacity } from "react-native"; import { BottomSheetModal, BottomSheetView, BottomSheetFlatList } from "@gorhom/bottom-sheet"; import Ionicons from '@expo/vector-icons/Ionicons'; import useAppStore from "../../../data/app_state"; import SheetHeader from "../../ui/SheetHeader"; -import { IMapServiceInterruption } from "utils/interfaces"; -import { useServiceInterruptions } from "app/data/api_query"; -import { TextInput } from "react-native-gesture-handler"; +import { MyLocationSuggestion, SearchSuggestion } from "utils/interfaces"; import { MaterialCommunityIcons } from "@expo/vector-icons"; +import SuggestionInput from "app/components/ui/SuggestionInput"; +import SegmentedControl from "@react-native-segmented-control/segmented-control"; interface SheetProps { sheetRef: React.RefObject @@ -19,36 +19,29 @@ const InputRoute: React.FC = ({ sheetRef }) => { const snapPoints = ['25%', '45%', '85%']; const theme = useAppStore((state) => state.theme); - const selectedRoute = useAppStore((state) => state.selectedRoute); - const presentSheet = useAppStore((state) => state.presentSheet); - const setSelectedAlert = useAppStore((state) => state.setSelectedAlert); - const [shownAlerts, setShownAlerts] = useState([]); - const { data: alerts, isError } = useServiceInterruptions() + const [startLocation, setStartLocation] = useState(null); + const [endLocation, setEndLocation] = useState(null); - // If no route is selected, we're looking at all routes, therefore show all alerts - // If a route is selected, only show the alerts for that route - useEffect(() => { - if (!alerts) { - setShownAlerts([]); - return - } + const searchSuggestions = useAppStore((state) => state.suggestions); + const suggestionOutput = useAppStore((state) => state.suggestionOutput); + const setSuggestions = useAppStore((state) => state.setSuggestions); + const [rotueInfoError, setRouteInfoError] = useState(""); - if (!selectedRoute) { - setShownAlerts(alerts); - return; - } + const [routeLeaveArriveBy, setRouteLeaveArriveBy] = useState<"leave" | "arrive">("arrive"); - const alertKeys = selectedRoute.directionList.flatMap(direction => direction.serviceInterruptionKeys); - const filteredAlerts = alerts.filter(alert => alertKeys.includes(Number(alert.key))); + useEffect(() => { + + if (startLocation && endLocation) { + if (startLocation.id == endLocation.id) { + setRouteInfoError("Start and End locations cannot be the same"); + return + } + } - setShownAlerts(filteredAlerts); - }, [selectedRoute, alerts]); + setRouteInfoError(""); + }, [startLocation, endLocation]) - const displayDetailAlert = (alert: IMapServiceInterruption) => { - setSelectedAlert(alert); - presentSheet("alertsDetail"); - } return ( = ({ sheetRef }) => { index={1} backgroundStyle={{backgroundColor: theme.background}} handleIndicatorStyle={{backgroundColor: theme.divider}} + onAnimate={(from, _) => { + if (from == -1) { + setStartLocation(MyLocationSuggestion) + setEndLocation(null) + } + }} > {/* header */} @@ -68,89 +67,127 @@ const InputRoute: React.FC = ({ sheetRef }) => { } /> - - {/* Route Details Input */} - - + {/* Endpoint Input */} - - {/* Icons */} - - + + {/* Start */} + { + sheetRef.current?.snapToIndex(2) + setStartLocation(null) }} - > - - - {/* 3 dots */} - - - - - - + : + } + /> + + {/* 2 dots in between rows */} + + + + + {/* End */} + { + sheetRef.current?.snapToIndex(2) + setEndLocation(null) }} - > - - + icon={(endLocation == MyLocationSuggestion) + ? + : + } + /> - {/* Text Inputs */} - - - - - - - + {/* Swap Endpoints */} + { + setStartLocation(endLocation) + setEndLocation(startLocation) + }}> + + {/* Leave by/Arrive By */} + + { + setRouteLeaveArriveBy(event.nativeEvent.selectedSegmentIndex == 0 ? "arrive" : "leave") + }} + style={{width: "70%"}} + /> + + + {/* Divider */} + + + {/* Error */} + { rotueInfoError != "" && ( + + {/* Warning Icon */} + + + {/* Error Text */} + {rotueInfoError} + + )} + + {/* Search Button */} + {/* Search Suggestions */} + item.id} + ItemSeparatorComponent={() => } + renderItem={({item: suggestion}) => ( + { + if (suggestionOutput == "start") setStartLocation(suggestion) + if (suggestionOutput == "end") setEndLocation(suggestion) + setSuggestions([]) + }} + > + + { suggestion.type == "my-location" + ? + : + } + + + + {/* Title */} + {suggestion.title} - + {/* Subtitle */} + {suggestion.subtitle} + + )} + /> ) diff --git a/app/components/ui/SuggestionInput.tsx b/app/components/ui/SuggestionInput.tsx index e69de29..df2bae2 100644 --- a/app/components/ui/SuggestionInput.tsx +++ b/app/components/ui/SuggestionInput.tsx @@ -0,0 +1,94 @@ +import useAppStore from "app/data/app_state" +import { memo, useEffect, useRef, useState } from "react" +import { View, TextInput, Keyboard } from "react-native" +import { MyLocationSuggestion, SearchSuggestion } from "utils/interfaces" + +interface Props { + location: SearchSuggestion | null + icon: React.JSX.Element + onFocus: () => void, + outputName: "start" | "end" | null +} + +const SuggestionInput: React.FC = ({ location, icon, onFocus, outputName }) => { + const theme = useAppStore((state) => state.theme); + const setSuggestions = useAppStore((state) => state.setSuggestions); + const setSuggestionsOutput = useAppStore((state) => state.setSuggestionOutput); + const [searchTerm, setSearchTerm] = useState(""); + + + useEffect(() => { + if (location) { + setSearchTerm(location.title); + Keyboard.dismiss(); + } else { + setSearchTerm(""); + } + }, [location]) + + return ( + + + { icon } + + + { + setSearchTerm(text); + setSuggestionsOutput(outputName); + if (text.trim() == "") { + setSuggestions([MyLocationSuggestion]); + return + } + setSuggestions([]); + }} + onFocus={() => { + // clear search so user can start typing immediately + if (location == MyLocationSuggestion) { + setSearchTerm(""); + } + + setSuggestions([MyLocationSuggestion]); + setSuggestionsOutput(outputName); + onFocus() + }} + + onBlur={() => { + setSuggestions([]); + setSuggestionsOutput(null); + }} + placeholder="Enter a location" + /> + + ) +} + +export default memo(SuggestionInput); \ No newline at end of file diff --git a/app/data/app_state.ts b/app/data/app_state.ts index abceb3c..4791af5 100644 --- a/app/data/app_state.ts +++ b/app/data/app_state.ts @@ -1,5 +1,5 @@ import { create } from "zustand"; -import { IMapRoute, IMapServiceInterruption, IStop } from "../../utils/interfaces"; +import { IMapRoute, IMapServiceInterruption, IStop, SearchSuggestion } from "../../utils/interfaces"; import { Theme, lightMode } from "../theme"; interface AppState { @@ -38,6 +38,13 @@ interface AppState { poppedUpStopCallout: IStop | null, setPoppedUpStopCallout: (poppedUpStopCallout: IStop | null) => void + + // route planning + suggestions: SearchSuggestion[] + setSuggestions: (suggestions: SearchSuggestion[]) => void + + suggestionOutput: "start" | "end" | null + setSuggestionOutput: (suggestionOutput: "start" | "end" | null) => void } const useAppStore = create()((set) => ({ @@ -74,7 +81,14 @@ const useAppStore = create()((set) => ({ setZoomToStopLatLng: (zoomToStopLatLng) => set(() => ({ zoomToStopLatLng })), poppedUpStopCallout: null, - setPoppedUpStopCallout: (poppedUpStopCallout) => set(() => ({ poppedUpStopCallout })) + setPoppedUpStopCallout: (poppedUpStopCallout) => set(() => ({ poppedUpStopCallout })), + + // route planning + suggestions: [], + setSuggestions: (suggestions) => set(() => ({ suggestions })), + + suggestionOutput: null, + setSuggestionOutput: (suggestionOutput) => set(() => ({ suggestionOutput })) })); export default useAppStore; \ No newline at end of file diff --git a/app/theme.ts b/app/theme.ts index 9cb6c7f..7c40a50 100644 --- a/app/theme.ts +++ b/app/theme.ts @@ -7,11 +7,13 @@ export interface Theme { exitButton: string, nextStopBubble: string, secondaryBackground: string, + tertiaryBackground: string, alertSymbol: string, starColor: string, timetableRowA: string, timetableRowB: string, pillBorder: string, + myLocation: string, busTints: {[key: string] : string} } @@ -24,11 +26,13 @@ export const lightMode: Theme = { exitButton: 'gray', nextStopBubble: 'lightgrey', secondaryBackground: '#f3f1f6', + tertiaryBackground: '#f3f1f6', alertSymbol: '#FFC700', starColor: '#ffcc00', timetableRowA: 'white', timetableRowB: '#efefef', pillBorder: 'lightgrey', + myLocation: "#007aff", busTints: { "47": "#2e8545", } @@ -43,11 +47,13 @@ export const darkMode: Theme = { exitButton: 'gray', nextStopBubble: '#48484a', secondaryBackground: '#48484a', + tertiaryBackground: '#2c2c2e', alertSymbol: '#ffce0a', starColor: '#ffd60a', timetableRowA: '#1c1c1e', timetableRowB: '#2c2c2e', pillBorder: '#686867', + myLocation: "#007aff", busTints: { "01-04": "#fe453a", "03": "#03a8e4", diff --git a/utils/interfaces.ts b/utils/interfaces.ts index a4bfa82..5a99b6e 100644 --- a/utils/interfaces.ts +++ b/utils/interfaces.ts @@ -255,4 +255,19 @@ export type IGetStopEstimatesResponse = z.infer Date: Fri, 1 Mar 2024 11:36:35 -0600 Subject: [PATCH 03/25] new library stuff --- package-lock.json | 12 ++-- package.json | 4 +- utils/interfaces.ts | 135 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 143 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1bf8933..a15dbe0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "ReveilleRides", + "name": "Reveille Rides", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "ReveilleRides", + "name": "Reveille Rides", "version": "1.0.0", "hasInstallScript": true, "dependencies": { @@ -14,7 +14,7 @@ "@react-native-async-storage/async-storage": "^1.19.3", "@react-native-segmented-control/segmented-control": "2.4.1", "@tanstack/react-query": "^5.22.2", - "aggie-spirit-api": "^1.0.2", + "aggie-spirit-api": "github:Reveille-Rides/aggie-spirit-api#route-planning-api", "expo": "^50.0.7", "expo-constants": "~15.4.5", "expo-linking": "~6.2.2", @@ -8552,9 +8552,9 @@ } }, "node_modules/aggie-spirit-api": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/aggie-spirit-api/-/aggie-spirit-api-1.0.2.tgz", - "integrity": "sha512-WWHHW59LpWWL2U9khKk+w1/qFkmPXUBJmByal9QT/6/lU6r1cQulKVklT4MrCNM7LF+DO934zB7aR/0Pt8yuRA==", + "version": "1.1.0", + "resolved": "git+ssh://git@github.com/Reveille-Rides/aggie-spirit-api.git#fd903fd00ebf43f760a1120d6f4971952f2d9aec", + "license": "Apache-2.0", "dependencies": { "moment": "^2.29.4" } diff --git a/package.json b/package.json index ede945e..4916f46 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "ReveilleRides", + "name": "Reveille Rides", "version": "1.0.0", "main": "Main.tsx", "scripts": { @@ -20,7 +20,7 @@ "@react-native-async-storage/async-storage": "^1.19.3", "@react-native-segmented-control/segmented-control": "2.4.1", "@tanstack/react-query": "^5.22.2", - "aggie-spirit-api": "^1.0.2", + "aggie-spirit-api": "github:Reveille-Rides/aggie-spirit-api#route-planning-api", "expo": "^50.0.7", "expo-constants": "~15.4.5", "expo-linking": "~6.2.2", diff --git a/utils/interfaces.ts b/utils/interfaces.ts index 5a99b6e..b8ea948 100644 --- a/utils/interfaces.ts +++ b/utils/interfaces.ts @@ -258,6 +258,141 @@ export interface ICachedStopEstimate { }; // route planning + +export const FoundStopSchema = z.object({ + stopCode: z.string(), + stopName: z.string(), + longitude: z.number(), + latitude: z.number() +}); +export type IFoundStop = z.infer + +export const MatchedSubstringSchema = z.object({ + length: z.number(), + offset: z.number() +}); +export type IMatchedSubstring = z.infer + +export const LocationTermsSchema = z.object({ + offset: z.number(), + value: z.string() +}); +export type ILocationTerms = z.infer + +export const FoundLocationSchema = z.object({ + description: z.string(), + matchedSubstrings: z.array(MatchedSubstringSchema), + place_id: z.string(), + reference: z.string(), + structured_formatting: z.object({ + main_text: z.string(), + main_text_matched_substrings: z.array(MatchedSubstringSchema), + secondary_text: z.string() + }), + terms: z.array(LocationTermsSchema), + types: z.array(z.string()) +}); +export type IFoundLocation = z.infer + +export const EndpointSchema = z.object({ + title: z.string(), + subtitle: z.string(), + lat: z.number().optional(), + long: z.number().optional(), + stopCode: z.string().optional(), + placeId: z.string().optional() +}); +export type IEndpoint = z.infer + +export const PlanBlockSchema = z.object({ + className: z.string(), + iconString: z.string(), + leftPosition: z.number(), + routeShortName: z.string(), + stepType: z.number(), + topPosition: z.number(), + width: z.number() +}); +export type IPlanBlock = z.infer + +export const ChartLinePositionSchema = z.object({ + leftPosition: z.number(), + timeLabel: z.string() +}); +export type IChartLinePosition = z.infer + +export const OptionBlockSchema = z.object({ + leavingIn: z.string(), + leftPosition: z.number(), + topPosition: z.number(), + totalMinute: z.string(), + width: z.number() +}); +export type IOptionBlock = z.infer + +export const InstructionStepSchema = z.object({ + className: z.string(), + duration: z.string(), + iconClassName: z.string().nullable(), + instructions: z.string(), + latitude: z.number(), + longitude: z.number(), + polyline: z.string(), + routeShortName: z.string().nullable(), + startTime: z.string(), + stepType: z.number(), + walkingInstructions: z.array(z.object({ + index: z.number(), + instruction: z.string(), + polyline: z.string() + })) +}); +export type IInstructionStep = z.infer + +export const OptionDetailSchema = z.object({ + agencies: z.array(z.object({ + agencyName: z.string(), + agencyUrl: z.string() + })), + copyrights: z.string(), + endTime: z.number(), + endTimeText: z.string(), + instructions: z.array(InstructionStepSchema), + mapBounds: z.object({ + neLatitude: z.number(), + neLongitude: z.number(), + swLatitude: z.number(), + swLongitude: z.number() + }), + optionIndex: z.number(), + startTime: z.number(), + startTimeText: z.string(), + totalTime: z.string(), + totalWalkingDistance: z.string(), + totalWalkingTime: z.string(), + warning: z.array(z.string()) +}); +export type IOptionDetail = z.infer + +export const FindBusStopsResponseSchema = z.array(FoundStopSchema); +export type IFindBusStopsResponse = z.infer + +export const FindLocationsResponseSchema = z.array(FoundLocationSchema); +export type IFindLocationsResponse = z.infer + +export const GetTripPlanResponseSchema = z.object({ + blocks: z.array(PlanBlockSchema), + chartHeight: z.number(), + chartLinePositions: z.array(ChartLinePositionSchema), + headerHeight: z.number(), + optionBlocks: z.array(OptionBlockSchema), + optionDetails: z.array(OptionDetailSchema), + optionHeight: z.number(), + optionPositions: z.number() +}); +export type ITripPlanResponse = z.infer + + export interface SearchSuggestion { title: string subtitle: string From d57d46f67228a26b3cf9bc99200e99f3b1638bca Mon Sep 17 00:00:00 2001 From: bwees Date: Fri, 1 Mar 2024 13:01:18 -0600 Subject: [PATCH 04/25] search suggestions and endpoints working --- app/components/map/MapView.tsx | 3 +- .../sheets/route_planning/InputRoute.tsx | 68 +++++++++++++------ app/components/ui/SuggestionInput.tsx | 33 ++++++--- app/data/api_query.ts | 49 ++++++++++++- app/theme.ts | 4 +- package-lock.json | 2 +- utils/interfaces.ts | 6 +- 7 files changed, 127 insertions(+), 38 deletions(-) diff --git a/app/components/map/MapView.tsx b/app/components/map/MapView.tsx index f13480b..afc3c87 100644 --- a/app/components/map/MapView.tsx +++ b/app/components/map/MapView.tsx @@ -235,7 +235,8 @@ const Map: React.FC = () => { overflow: 'hidden', borderRadius: 8, backgroundColor: theme.background, - padding: 12 + padding: 12, + zIndex: 1000, }} > recenterView()}> diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx index 36ab626..f29664e 100644 --- a/app/components/sheets/route_planning/InputRoute.tsx +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -1,5 +1,5 @@ import React, { memo, useEffect, useRef, useState } from "react"; -import { View, Text, TouchableOpacity } from "react-native"; +import { View, Text, TouchableOpacity, Keyboard } from "react-native"; import { BottomSheetModal, BottomSheetView, BottomSheetFlatList } from "@gorhom/bottom-sheet"; import Ionicons from '@expo/vector-icons/Ionicons'; import useAppStore from "../../../data/app_state"; @@ -16,7 +16,7 @@ interface SheetProps { // AlertList (for all routes and current route) const InputRoute: React.FC = ({ sheetRef }) => { - const snapPoints = ['25%', '45%', '85%']; + const snapPoints = ['45%', '90%']; const theme = useAppStore((state) => state.theme); @@ -26,14 +26,17 @@ const InputRoute: React.FC = ({ sheetRef }) => { const searchSuggestions = useAppStore((state) => state.suggestions); const suggestionOutput = useAppStore((state) => state.suggestionOutput); const setSuggestions = useAppStore((state) => state.setSuggestions); + const setSuggesionOutput = useAppStore((state) => state.setSuggestionOutput); const [rotueInfoError, setRouteInfoError] = useState(""); + const [snapIndex, setSnapIndex] = useState(1); + const [routeLeaveArriveBy, setRouteLeaveArriveBy] = useState<"leave" | "arrive">("arrive"); useEffect(() => { if (startLocation && endLocation) { - if (startLocation.id == endLocation.id) { + if (startLocation.title == endLocation.title) { setRouteInfoError("Start and End locations cannot be the same"); return } @@ -46,14 +49,17 @@ const InputRoute: React.FC = ({ sheetRef }) => { { + onAnimate={(from, to) => { if (from == -1) { setStartLocation(MyLocationSuggestion) setEndLocation(null) + setSuggesionOutput(null) + sheetRef.current?.snapToIndex(0) } + if (to != -1) setSnapIndex(to) }} > @@ -77,10 +83,11 @@ const InputRoute: React.FC = ({ sheetRef }) => { outputName={"start"} location={startLocation} onFocus={() => { - sheetRef.current?.snapToIndex(2) - setStartLocation(null) + if (startLocation?.type == "my-location") setStartLocation(null) + sheetRef.current?.snapToIndex(1) + setSnapIndex(1) }} - icon={(startLocation == MyLocationSuggestion) + icon={(startLocation?.type == "my-location") ? : } @@ -96,10 +103,11 @@ const InputRoute: React.FC = ({ sheetRef }) => { outputName={"end"} location={endLocation} onFocus={() => { - sheetRef.current?.snapToIndex(2) - setEndLocation(null) + if (endLocation?.type == "my-location") setEndLocation(null) + sheetRef.current?.snapToIndex(1) + setSnapIndex(1) }} - icon={(endLocation == MyLocationSuggestion) + icon={(endLocation?.type == "my-location") ? : } @@ -110,8 +118,9 @@ const InputRoute: React.FC = ({ sheetRef }) => { { + const temp = startLocation setStartLocation(endLocation) - setEndLocation(startLocation) + setEndLocation(temp) }}> @@ -151,8 +160,21 @@ const InputRoute: React.FC = ({ sheetRef }) => { {/* Search Suggestions */} item.id} + keyExtractor={(_, index) => index.toString()} + keyboardShouldPersistTaps={"handled"} ItemSeparatorComponent={() => } + ListHeaderComponent={() => { + if (searchSuggestions.length == 0 && suggestionOutput) { + return ( + + No results found + + ) + } + + return null + }} + onScrollBeginDrag={() => Keyboard.dismiss()} renderItem={({item: suggestion}) => ( = ({ sheetRef }) => { if (suggestionOutput == "start") setStartLocation(suggestion) if (suggestionOutput == "end") setEndLocation(suggestion) setSuggestions([]) + setSuggesionOutput(null) + Keyboard.dismiss() }} > = ({ sheetRef }) => { paddingVertical: 2, }} > - { suggestion.type == "my-location" - ? - : - } + { suggestion.type == "my-location" && } + { suggestion.type == "stop" && } + { suggestion.type == "map" && } + + {/* Title */} + {suggestion.title} - {/* Title */} - {suggestion.title} - - {/* Subtitle */} - {suggestion.subtitle} + {/* Subtitle */} + { suggestion.subtitle && {suggestion.subtitle} } + )} /> diff --git a/app/components/ui/SuggestionInput.tsx b/app/components/ui/SuggestionInput.tsx index df2bae2..fccc44d 100644 --- a/app/components/ui/SuggestionInput.tsx +++ b/app/components/ui/SuggestionInput.tsx @@ -1,3 +1,4 @@ +import { useSearchSuggestion } from "app/data/api_query" import useAppStore from "app/data/app_state" import { memo, useEffect, useRef, useState } from "react" import { View, TextInput, Keyboard } from "react-native" @@ -13,18 +14,33 @@ interface Props { const SuggestionInput: React.FC = ({ location, icon, onFocus, outputName }) => { const theme = useAppStore((state) => state.theme); const setSuggestions = useAppStore((state) => state.setSuggestions); + const suggestionsOutput = useAppStore((state) => state.suggestionOutput); const setSuggestionsOutput = useAppStore((state) => state.setSuggestionOutput); + const [searchTerm, setSearchTerm] = useState(""); + + const { data: suggestions } = useSearchSuggestion(searchTerm); useEffect(() => { + console.log(location) if (location) { setSearchTerm(location.title); + setSuggestions([]); Keyboard.dismiss(); } else { setSearchTerm(""); } }, [location]) + + + useEffect(() => { + if (searchTerm.trim() == "" && suggestionsOutput) { + setSuggestions([MyLocationSuggestion]); + return + } + suggestionsOutput && setSuggestions(suggestions ?? []); + }, [suggestions]) return ( = ({ location, icon, onFocus, outputName = ({ location, icon, onFocus, outputName }} onFocus={() => { // clear search so user can start typing immediately - if (location == MyLocationSuggestion) { + if (location?.type == "my-location") { setSearchTerm(""); + + console.log("clearing search") + } + if (searchTerm.trim() == "") { + setSuggestions([MyLocationSuggestion]); + } else { + setSuggestions(suggestions ?? [MyLocationSuggestion]) } - setSuggestions([MyLocationSuggestion]); setSuggestionsOutput(outputName); onFocus() }} - - onBlur={() => { - setSuggestions([]); - setSuggestionsOutput(null); - }} placeholder="Enter a location" /> diff --git a/app/data/api_query.ts b/app/data/api_query.ts index ae79d7d..12cf2f0 100644 --- a/app/data/api_query.ts +++ b/app/data/api_query.ts @@ -1,9 +1,9 @@ import { useQuery, useQueryClient } from "@tanstack/react-query"; -import { getAuthentication, getBaseData, getNextDepartureTimes, getPatternPaths, getStopEstimates, getStopSchedules, getVehicles } from "aggie-spirit-api"; +import { findBusStops, findLocations, getAuthentication, getBaseData, getNextDepartureTimes, getPatternPaths, getStopEstimates, getStopSchedules, getVehicles } from "aggie-spirit-api"; import { darkMode, lightMode } from "app/theme"; import { getColorScheme } from "app/utils"; import moment from "moment"; -import { GetBaseDataResponseSchema, GetNextDepartTimesResponseSchema, GetPatternPathsResponseSchema, GetStopEstimatesResponseSchema, GetStopSchedulesResponseSchema, GetVehiclesResponseSchema, IGetBaseDataResponse, IGetNextDepartTimesResponse, IGetPatternPathsResponse, IGetStopEstimatesResponse, IGetStopSchedulesResponse, IGetVehiclesResponse, IMapRoute, IMapServiceInterruption, IVehicle } from "utils/interfaces"; +import { GetBaseDataResponseSchema, GetNextDepartTimesResponseSchema, GetPatternPathsResponseSchema, GetStopEstimatesResponseSchema, GetStopSchedulesResponseSchema, GetVehiclesResponseSchema, IFoundLocation, IFoundStop, IGetBaseDataResponse, IGetNextDepartTimesResponse, IGetPatternPathsResponse, IGetStopEstimatesResponse, IGetStopSchedulesResponse, IGetVehiclesResponse, IMapRoute, IMapServiceInterruption, IVehicle, SearchSuggestion } from "utils/interfaces"; export const useAuthToken = () => { @@ -219,4 +219,49 @@ export const useVehicles = (routeKey: string) => { staleTime: 10000, refetchInterval: 10000 }) +} + +// Route Planning +export const useSearchSuggestion = (query: string) => { + const client = useQueryClient(); + + return useQuery({ + queryKey: ["searchSuggestion", query], + queryFn: async () => { + const dataSources: Promise[] = [ + findBusStops(query, client.getQueryData(["authToken"])!), + findLocations(query, "AIzaSyA89ax74We8sxQcmzDgPTgEUoXMBsc3lG0") + ] + + const responses = await Promise.all(dataSources); + + + // handle bus stops + const busStops: [SearchSuggestion] = responses[0].map((stop: IFoundStop) => { + return { + type: "stop", + title: stop.stopName, + subtitle: "ID: " + stop.stopCode, + code: stop.stopCode, + lat: stop.latitude, + lng: stop.longitude + } + }); + + // handle locations + const locations: [SearchSuggestion] = responses[1].map((location: IFoundLocation) => { + return { + type: "map", + title: location.structured_formatting.main_text, + subtitle: location.structured_formatting.secondary_text, + placeId: location.place_id, + } + }); + + return [...busStops, ...locations]; + }, + enabled: useAuthToken().isSuccess && query !== "", + throwOnError: true, + staleTime: Infinity + }); } \ No newline at end of file diff --git a/app/theme.ts b/app/theme.ts index 7c40a50..32436df 100644 --- a/app/theme.ts +++ b/app/theme.ts @@ -32,7 +32,7 @@ export const lightMode: Theme = { timetableRowA: 'white', timetableRowB: '#efefef', pillBorder: 'lightgrey', - myLocation: "#007aff", + myLocation: "#007afe", busTints: { "47": "#2e8545", } @@ -53,7 +53,7 @@ export const darkMode: Theme = { timetableRowA: '#1c1c1e', timetableRowB: '#2c2c2e', pillBorder: '#686867', - myLocation: "#007aff", + myLocation: "#0a84ff", busTints: { "01-04": "#fe453a", "03": "#03a8e4", diff --git a/package-lock.json b/package-lock.json index a15dbe0..a3b5d84 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8553,7 +8553,7 @@ }, "node_modules/aggie-spirit-api": { "version": "1.1.0", - "resolved": "git+ssh://git@github.com/Reveille-Rides/aggie-spirit-api.git#fd903fd00ebf43f760a1120d6f4971952f2d9aec", + "resolved": "git+ssh://git@github.com/Reveille-Rides/aggie-spirit-api.git#d7b61d7f0b878b0e22477c4a95d85cc120d09359", "license": "Apache-2.0", "dependencies": { "moment": "^2.29.4" diff --git a/utils/interfaces.ts b/utils/interfaces.ts index b8ea948..bd09097 100644 --- a/utils/interfaces.ts +++ b/utils/interfaces.ts @@ -396,13 +396,15 @@ export type ITripPlanResponse = z.infer export interface SearchSuggestion { title: string subtitle: string - id: string + lat?: number + lng?: number + stopCode?: string + placeId?: string type: "stop" | "map" | "my-location" } export const MyLocationSuggestion: SearchSuggestion = { title: "My Location", subtitle: "", - id: "my-location", type: "my-location" } \ No newline at end of file From 1b2b35646ed088d33a181556a2b9c961c5b97be0 Mon Sep 17 00:00:00 2001 From: bwees Date: Sat, 2 Mar 2024 20:25:22 -0600 Subject: [PATCH 05/25] add loading handling and time input --- .../sheets/route_planning/InputRoute.tsx | 140 ++++++++++-------- app/components/ui/SuggestionInput.tsx | 19 ++- app/components/ui/TimeInput.tsx | 139 +++++++++++++++++ 3 files changed, 232 insertions(+), 66 deletions(-) create mode 100644 app/components/ui/TimeInput.tsx diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx index f29664e..c14a7e0 100644 --- a/app/components/sheets/route_planning/InputRoute.tsx +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -1,4 +1,4 @@ -import React, { memo, useEffect, useRef, useState } from "react"; +import React, { memo, useEffect, useState } from "react"; import { View, Text, TouchableOpacity, Keyboard } from "react-native"; import { BottomSheetModal, BottomSheetView, BottomSheetFlatList } from "@gorhom/bottom-sheet"; import Ionicons from '@expo/vector-icons/Ionicons'; @@ -8,6 +8,7 @@ import { MyLocationSuggestion, SearchSuggestion } from "utils/interfaces"; import { MaterialCommunityIcons } from "@expo/vector-icons"; import SuggestionInput from "app/components/ui/SuggestionInput"; import SegmentedControl from "@react-native-segmented-control/segmented-control"; +import TimeInput from "app/components/ui/TimeInput"; interface SheetProps { sheetRef: React.RefObject @@ -31,6 +32,8 @@ const InputRoute: React.FC = ({ sheetRef }) => { const [snapIndex, setSnapIndex] = useState(1); + const [searchSuggestionsLoading, setSearchSuggestionsLoading] = useState(false) + const [routeLeaveArriveBy, setRouteLeaveArriveBy] = useState<"leave" | "arrive">("arrive"); useEffect(() => { @@ -52,14 +55,13 @@ const InputRoute: React.FC = ({ sheetRef }) => { index={snapIndex} backgroundStyle={{backgroundColor: theme.background}} handleIndicatorStyle={{backgroundColor: theme.divider}} - onAnimate={(from, to) => { + onAnimate={(from, _) => { if (from == -1) { setStartLocation(MyLocationSuggestion) setEndLocation(null) setSuggesionOutput(null) sheetRef.current?.snapToIndex(0) } - if (to != -1) setSnapIndex(to) }} > @@ -91,6 +93,7 @@ const InputRoute: React.FC = ({ sheetRef }) => { ? : } + setSuggestionLoading={setSearchSuggestionsLoading} /> {/* 2 dots in between rows */} @@ -111,6 +114,7 @@ const InputRoute: React.FC = ({ sheetRef }) => { ? : } + setSuggestionLoading={setSearchSuggestionsLoading} /> @@ -127,19 +131,24 @@ const InputRoute: React.FC = ({ sheetRef }) => { {/* Leave by/Arrive By */} - + { setRouteLeaveArriveBy(event.nativeEvent.selectedSegmentIndex == 0 ? "arrive" : "leave") }} - style={{width: "70%"}} + style={{flex: 1, marginRight: 8}} + /> + + console.log(time)} /> + {/* Divider */} - + {/* Error */} { rotueInfoError != "" && ( @@ -156,62 +165,73 @@ const InputRoute: React.FC = ({ sheetRef }) => { - - {/* Search Suggestions */} - index.toString()} - keyboardShouldPersistTaps={"handled"} - ItemSeparatorComponent={() => } - ListHeaderComponent={() => { - if (searchSuggestions.length == 0 && suggestionOutput) { - return ( - - No results found - - ) - } - - return null - }} - onScrollBeginDrag={() => Keyboard.dismiss()} - renderItem={({item: suggestion}) => ( - { - if (suggestionOutput == "start") setStartLocation(suggestion) - if (suggestionOutput == "end") setEndLocation(suggestion) - setSuggestions([]) - setSuggesionOutput(null) - Keyboard.dismiss() + + {/* Flat lists when no error */} + {rotueInfoError == "" && ( + suggestionOutput ? ( + /* Search Suggestions */ + index.toString()} + keyboardShouldPersistTaps={"handled"} + ItemSeparatorComponent={() => } + ListHeaderComponent={() => { + if (searchSuggestions.length == 0 && suggestionOutput && !searchSuggestionsLoading) { + return ( + + No results found + + ) + } + return null }} - > - - { suggestion.type == "my-location" && } - { suggestion.type == "stop" && } - { suggestion.type == "map" && } - - - - {/* Title */} - {suggestion.title} - - {/* Subtitle */} - { suggestion.subtitle && {suggestion.subtitle} } + onScrollBeginDrag={() => Keyboard.dismiss()} + renderItem={({item: suggestion}) => ( + { + if (suggestionOutput == "start") setStartLocation(suggestion) + if (suggestionOutput == "end") setEndLocation(suggestion) + setSuggestions([]) + setSuggesionOutput(null) + Keyboard.dismiss() + }} + > + + { suggestion.type == "my-location" && } + { suggestion.type == "stop" && } + { suggestion.type == "map" && } + + + + {/* Title */} + {suggestion.title} + + {/* Subtitle */} + { suggestion.subtitle && {suggestion.subtitle} } + + + )} + /> + ) : ( + // Show the Route Options + + + show me the options - - )} - /> + + ) + )} ) diff --git a/app/components/ui/SuggestionInput.tsx b/app/components/ui/SuggestionInput.tsx index fccc44d..4f10263 100644 --- a/app/components/ui/SuggestionInput.tsx +++ b/app/components/ui/SuggestionInput.tsx @@ -9,9 +9,10 @@ interface Props { icon: React.JSX.Element onFocus: () => void, outputName: "start" | "end" | null + setSuggestionLoading: (loading: boolean) => void } -const SuggestionInput: React.FC = ({ location, icon, onFocus, outputName }) => { +const SuggestionInput: React.FC = ({ location, icon, onFocus, outputName, setSuggestionLoading }) => { const theme = useAppStore((state) => state.theme); const setSuggestions = useAppStore((state) => state.setSuggestions); const suggestionsOutput = useAppStore((state) => state.suggestionOutput); @@ -19,7 +20,11 @@ const SuggestionInput: React.FC = ({ location, icon, onFocus, outputName const [searchTerm, setSearchTerm] = useState(""); - const { data: suggestions } = useSearchSuggestion(searchTerm); + const { data: suggestions, isLoading } = useSearchSuggestion(searchTerm); + + useEffect(() => { + setSuggestionLoading(isLoading); + }, [isLoading]) useEffect(() => { @@ -89,19 +94,21 @@ const SuggestionInput: React.FC = ({ location, icon, onFocus, outputName onFocus={() => { // clear search so user can start typing immediately if (location?.type == "my-location") { - setSearchTerm(""); - - console.log("clearing search") + setSearchTerm(""); } if (searchTerm.trim() == "") { setSuggestions([MyLocationSuggestion]); } else { - setSuggestions(suggestions ?? [MyLocationSuggestion]) + setSuggestions(suggestions ?? []) } setSuggestionsOutput(outputName); onFocus() }} + onBlur={() => { + setSuggestions([]); + setSuggestionsOutput(null); + }} placeholder="Enter a location" /> diff --git a/app/components/ui/TimeInput.tsx b/app/components/ui/TimeInput.tsx new file mode 100644 index 0000000..82fe15e --- /dev/null +++ b/app/components/ui/TimeInput.tsx @@ -0,0 +1,139 @@ +import useAppStore from 'app/data/app_state'; +import React, { useEffect, useState } from 'react'; +import { Text, TextInput, View } from 'react-native'; +import { TouchableOpacity } from 'react-native-gesture-handler'; + +interface Props { + onTimeChange: (time: Date) => void; +} + +const TimeInput: React.FC = ({ onTimeChange }) => { + const [time, setTime] = useState('') + const [meridiem, setMeridiem] = useState('AM') + const [isFocused, setIsFocused] = useState(false) + + const textInputRef = React.createRef(); + + const theme = useAppStore((state) => state.theme); + + const formatTime = (value: string) => { + // replace non-numeric characters + value = value.replace(/:|[a-zA-Z]/g, ''); + + let totalCharactersInValue = value.length; + + if (totalCharactersInValue === 3) { + setTime(value.slice(0, 1) + ':' + value.slice(1)) + return + } + + if (totalCharactersInValue >= 4) { + setTime(value.slice(0, 2) + ':' + value.slice(2, 4)) + return + } + + // Update the state with the formatted time + setTime(value); + }; + + useEffect(() => { + // validate time + let regex = new RegExp('^(0?[1-9]|1[012]):[0-5][0-9]$'); + + if (!regex.test(time)) { + return; + } + + // make time to a date object with the date as today and time from time and meridiem + let date = new Date(); + + let hours = parseInt(time.split(':')[0] ?? "0"); + let minutes = parseInt(time.split(':')[1] ?? "0"); + if (meridiem === 'PM') hours += 12; + date.setHours(hours, minutes); + + // call the onTimeChange prop with the date object + onTimeChange(date); + }, [time, meridiem]) + + // set initial time to current time +15 minutes + useEffect(() => { + let date = new Date(); + date.setMinutes(date.getMinutes() + 15); + let hours = date.getHours(); + let minutes = date.getMinutes(); + let meridiem = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours ? hours : 12; + let minutesString = minutes < 10 ? '0' + minutes : minutes; + let timeString = hours + ':' + minutesString; + setTime(timeString); + setMeridiem(meridiem); + }, []) + + return ( + + setIsFocused(true)} + onBlur={() => setIsFocused(false)} + selection={{ start: time.length, end: time.length }} + style={{ + color: theme.text, + fontWeight: 'bold', + fontSize: 16, + textAlign: 'center', + marginHorizontal: 2, + marginLeft: 2, + width: 50 + }} + onChangeText={formatTime} + maxLength={5} + selectTextOnFocus={true} + keyboardType="numeric" + placeholder="--:--" + /> + {/* Divider */} + + + + setMeridiem(meridiem === 'AM' ? 'PM' : 'AM')} + > + + {meridiem} + + + + ); +}; + +export default TimeInput; \ No newline at end of file From a0bd1d9c516e5bb3aa8416ccf13eb526c903510f Mon Sep 17 00:00:00 2001 From: bwees Date: Sat, 2 Mar 2024 21:53:10 -0600 Subject: [PATCH 06/25] got successful trip plan retrieval --- .../sheets/route_planning/InputRoute.tsx | 13 +++-- app/components/ui/SuggestionInput.tsx | 1 - app/data/api_query.ts | 56 +++++++++++++++++-- package-lock.json | 2 +- utils/interfaces.ts | 21 ++++--- 5 files changed, 74 insertions(+), 19 deletions(-) diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx index c14a7e0..3a95e1c 100644 --- a/app/components/sheets/route_planning/InputRoute.tsx +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -9,6 +9,7 @@ import { MaterialCommunityIcons } from "@expo/vector-icons"; import SuggestionInput from "app/components/ui/SuggestionInput"; import SegmentedControl from "@react-native-segmented-control/segmented-control"; import TimeInput from "app/components/ui/TimeInput"; +import { useTripPlan } from "app/data/api_query"; interface SheetProps { sheetRef: React.RefObject @@ -21,8 +22,13 @@ const InputRoute: React.FC = ({ sheetRef }) => { const theme = useAppStore((state) => state.theme); + // Planning Inputs const [startLocation, setStartLocation] = useState(null); const [endLocation, setEndLocation] = useState(null); + const [deadline, setDeadline] = useState<"leave" | "arrive">("arrive"); + const [time, setTime] = useState(new Date()); + + const { data: tripPlan, isError, isLoading: tripPlanLoading } = useTripPlan(startLocation, endLocation, time, deadline); const searchSuggestions = useAppStore((state) => state.suggestions); const suggestionOutput = useAppStore((state) => state.suggestionOutput); @@ -31,11 +37,8 @@ const InputRoute: React.FC = ({ sheetRef }) => { const [rotueInfoError, setRouteInfoError] = useState(""); const [snapIndex, setSnapIndex] = useState(1); - const [searchSuggestionsLoading, setSearchSuggestionsLoading] = useState(false) - const [routeLeaveArriveBy, setRouteLeaveArriveBy] = useState<"leave" | "arrive">("arrive"); - useEffect(() => { if (startLocation && endLocation) { @@ -136,13 +139,13 @@ const InputRoute: React.FC = ({ sheetRef }) => { values={['Arrive by', 'Leave by']} selectedIndex={0} onChange={(event) => { - setRouteLeaveArriveBy(event.nativeEvent.selectedSegmentIndex == 0 ? "arrive" : "leave") + setDeadline(event.nativeEvent.selectedSegmentIndex == 0 ? "arrive" : "leave") }} style={{flex: 1, marginRight: 8}} /> console.log(time)} + onTimeChange={(time) => setTime(time)} /> diff --git a/app/components/ui/SuggestionInput.tsx b/app/components/ui/SuggestionInput.tsx index 4f10263..a0e173f 100644 --- a/app/components/ui/SuggestionInput.tsx +++ b/app/components/ui/SuggestionInput.tsx @@ -28,7 +28,6 @@ const SuggestionInput: React.FC = ({ location, icon, onFocus, outputName, useEffect(() => { - console.log(location) if (location) { setSearchTerm(location.title); setSuggestions([]); diff --git a/app/data/api_query.ts b/app/data/api_query.ts index 12cf2f0..a350f1c 100644 --- a/app/data/api_query.ts +++ b/app/data/api_query.ts @@ -1,9 +1,9 @@ import { useQuery, useQueryClient } from "@tanstack/react-query"; -import { findBusStops, findLocations, getAuthentication, getBaseData, getNextDepartureTimes, getPatternPaths, getStopEstimates, getStopSchedules, getVehicles } from "aggie-spirit-api"; +import { TripPlan, findBusStops, findLocations, getAuthentication, getBaseData, getNextDepartureTimes, getPatternPaths, getStopEstimates, getStopSchedules, getTripPlan, getVehicles } from "aggie-spirit-api"; import { darkMode, lightMode } from "app/theme"; import { getColorScheme } from "app/utils"; import moment from "moment"; -import { GetBaseDataResponseSchema, GetNextDepartTimesResponseSchema, GetPatternPathsResponseSchema, GetStopEstimatesResponseSchema, GetStopSchedulesResponseSchema, GetVehiclesResponseSchema, IFoundLocation, IFoundStop, IGetBaseDataResponse, IGetNextDepartTimesResponse, IGetPatternPathsResponse, IGetStopEstimatesResponse, IGetStopSchedulesResponse, IGetVehiclesResponse, IMapRoute, IMapServiceInterruption, IVehicle, SearchSuggestion } from "utils/interfaces"; +import { GetBaseDataResponseSchema, GetNextDepartTimesResponseSchema, GetPatternPathsResponseSchema, GetStopEstimatesResponseSchema, GetStopSchedulesResponseSchema, GetTripPlanResponseSchema, GetVehiclesResponseSchema, IFoundLocation, IFoundStop, IGetBaseDataResponse, IGetNextDepartTimesResponse, IGetPatternPathsResponse, IGetStopEstimatesResponse, IGetStopSchedulesResponse, IGetVehiclesResponse, IMapRoute, IMapServiceInterruption, IPatternPoint, IVehicle, SearchSuggestion } from "utils/interfaces"; export const useAuthToken = () => { @@ -235,16 +235,35 @@ export const useSearchSuggestion = (query: string) => { const responses = await Promise.all(dataSources); + const baseData = client.getQueryData(["baseData"]) as IGetBaseDataResponse; // handle bus stops const busStops: [SearchSuggestion] = responses[0].map((stop: IFoundStop) => { + // find the stop location (lat/long) in baseData patternPaths + // TODO: convert this processing to be on the BaseData loading + let foundLocation: IPatternPoint | undefined = undefined; + for (let route of baseData.routes) { + for (let path of route.patternPaths) { + const stops = path.patternPoints.filter(point => point.stop != null) + for (let point of stops) { + if (point.stop?.stopCode === stop.stopCode) { + foundLocation = point; + break; + } + } + if (foundLocation) break; + } + + if (foundLocation) break; + } + return { type: "stop", title: stop.stopName, subtitle: "ID: " + stop.stopCode, code: stop.stopCode, - lat: stop.latitude, - lng: stop.longitude + lat: foundLocation?.latitude, + long: foundLocation?.longitude } }); @@ -260,8 +279,35 @@ export const useSearchSuggestion = (query: string) => { return [...busStops, ...locations]; }, - enabled: useAuthToken().isSuccess && query !== "", + enabled: useAuthToken().isSuccess && useBaseData().isSuccess && query !== "" , throwOnError: true, staleTime: Infinity }); +} + +export const useTripPlan = (origin: SearchSuggestion | null, destination: SearchSuggestion | null, date: Date, deadline: "leave" | "arrive") => { + const client = useQueryClient(); + + return useQuery({ + queryKey: ["routePlanning", origin, destination, date, deadline], + queryFn: async () => { + const authToken: string = client.getQueryData(["authToken"])!; + const response = await getTripPlan( + origin!, + destination!, + deadline == "arrive" ? date : undefined, + deadline == "leave" ? date : undefined, + authToken + ); + + GetTripPlanResponseSchema.parse(response) + + console.log(response.resultCount) + + return response; + }, + enabled: useAuthToken().isSuccess && origin !== null && destination !== null && date !== null && deadline !== null, + staleTime: 120000, // 2 minutes + throwOnError: true + }); } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a3b5d84..47a2468 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8553,7 +8553,7 @@ }, "node_modules/aggie-spirit-api": { "version": "1.1.0", - "resolved": "git+ssh://git@github.com/Reveille-Rides/aggie-spirit-api.git#d7b61d7f0b878b0e22477c4a95d85cc120d09359", + "resolved": "git+ssh://git@github.com/Reveille-Rides/aggie-spirit-api.git#7ca4bfff3dc838afac7e1f34f1701a717dc21913", "license": "Apache-2.0", "dependencies": { "moment": "^2.29.4" diff --git a/utils/interfaces.ts b/utils/interfaces.ts index bd09097..6f23ad8 100644 --- a/utils/interfaces.ts +++ b/utils/interfaces.ts @@ -332,12 +332,12 @@ export type IOptionBlock = z.infer export const InstructionStepSchema = z.object({ className: z.string(), - duration: z.string(), + duration: z.string().nullable(), iconClassName: z.string().nullable(), - instructions: z.string(), + instructions: z.string().optional(), latitude: z.number(), longitude: z.number(), - polyline: z.string(), + polyline: z.string().nullable(), routeShortName: z.string().nullable(), startTime: z.string(), stepType: z.number(), @@ -370,10 +370,16 @@ export const OptionDetailSchema = z.object({ totalTime: z.string(), totalWalkingDistance: z.string(), totalWalkingTime: z.string(), - warning: z.array(z.string()) + warnings: z.array(z.string()) }); export type IOptionDetail = z.infer +export const OptionPositionSchema = z.object({ + optionIndex: z.number(), + topPosition: z.number(), + optionSummary: z.string() +}); + export const FindBusStopsResponseSchema = z.array(FoundStopSchema); export type IFindBusStopsResponse = z.infer @@ -383,12 +389,13 @@ export type IFindLocationsResponse = z.infer export const GetTripPlanResponseSchema = z.object({ blocks: z.array(PlanBlockSchema), chartHeight: z.number(), - chartLinePositions: z.array(ChartLinePositionSchema), + chartLinePositions: z.array(ChartLinePositionSchema).nullable(), headerHeight: z.number(), optionBlocks: z.array(OptionBlockSchema), optionDetails: z.array(OptionDetailSchema), optionHeight: z.number(), - optionPositions: z.number() + optionPositions: z.array(OptionPositionSchema), + resultCount: z.number() }); export type ITripPlanResponse = z.infer @@ -397,7 +404,7 @@ export interface SearchSuggestion { title: string subtitle: string lat?: number - lng?: number + long?: number stopCode?: string placeId?: string type: "stop" | "map" | "my-location" From 4e80df83d2a23642e366497753310f0f66129392 Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 3 Mar 2024 11:53:00 -0600 Subject: [PATCH 07/25] typing updates --- utils/interfaces.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/interfaces.ts b/utils/interfaces.ts index 6f23ad8..af23286 100644 --- a/utils/interfaces.ts +++ b/utils/interfaces.ts @@ -352,7 +352,7 @@ export type IInstructionStep = z.infer export const OptionDetailSchema = z.object({ agencies: z.array(z.object({ agencyName: z.string(), - agencyUrl: z.string() + agencyUrl: z.string().optional() })), copyrights: z.string(), endTime: z.number(), From 8a981416e38368826eabe7499b96c9ec47383d42 Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 3 Mar 2024 11:53:15 -0600 Subject: [PATCH 08/25] display trip plans --- .../sheets/route_planning/InputRoute.tsx | 74 ++++++++++++++++--- app/data/api_query.ts | 4 +- 2 files changed, 66 insertions(+), 12 deletions(-) diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx index 3a95e1c..05f6837 100644 --- a/app/components/sheets/route_planning/InputRoute.tsx +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -1,5 +1,5 @@ import React, { memo, useEffect, useState } from "react"; -import { View, Text, TouchableOpacity, Keyboard } from "react-native"; +import { View, Text, TouchableOpacity, Keyboard, ActivityIndicator } from "react-native"; import { BottomSheetModal, BottomSheetView, BottomSheetFlatList } from "@gorhom/bottom-sheet"; import Ionicons from '@expo/vector-icons/Ionicons'; import useAppStore from "../../../data/app_state"; @@ -10,6 +10,7 @@ import SuggestionInput from "app/components/ui/SuggestionInput"; import SegmentedControl from "@react-native-segmented-control/segmented-control"; import TimeInput from "app/components/ui/TimeInput"; import { useTripPlan } from "app/data/api_query"; +import { useQueryClient } from "@tanstack/react-query"; interface SheetProps { sheetRef: React.RefObject @@ -39,6 +40,8 @@ const InputRoute: React.FC = ({ sheetRef }) => { const [snapIndex, setSnapIndex] = useState(1); const [searchSuggestionsLoading, setSearchSuggestionsLoading] = useState(false) + const client = useQueryClient() + useEffect(() => { if (startLocation && endLocation) { @@ -226,17 +229,70 @@ const InputRoute: React.FC = ({ sheetRef }) => { )} /> - ) : ( - // Show the Route Options - - - show me the options - - + ) : ( tripPlanLoading ? ( + // Show the Route Options + + + + + + ) : ( + index.toString()} + onRefresh={() => { + client.invalidateQueries({ + queryKey: ["tripPlan", startLocation, endLocation, time, deadline] + }) + }} + refreshing={tripPlanLoading} + keyboardShouldPersistTaps={"handled"} + ItemSeparatorComponent={() => } + ListHeaderComponent={() => { + if (tripPlan?.resultCount == 0 && !tripPlanLoading) { + return ( + + No results found + + ) + } + return null + }} + onScrollBeginDrag={() => Keyboard.dismiss()} + renderItem={({item: plan}) => ( + { + console.log(plan.optionIndex) + }} + > + + + + + {/* Title */} + {plan.startTimeText} + + {/* Subtitle */} + {plan.endTimeText} + + + )} + /> + ) ) )} - ) } diff --git a/app/data/api_query.ts b/app/data/api_query.ts index a350f1c..bfcfa0f 100644 --- a/app/data/api_query.ts +++ b/app/data/api_query.ts @@ -289,7 +289,7 @@ export const useTripPlan = (origin: SearchSuggestion | null, destination: Search const client = useQueryClient(); return useQuery({ - queryKey: ["routePlanning", origin, destination, date, deadline], + queryKey: ["tripPlan", origin, destination, date, deadline], queryFn: async () => { const authToken: string = client.getQueryData(["authToken"])!; const response = await getTripPlan( @@ -302,8 +302,6 @@ export const useTripPlan = (origin: SearchSuggestion | null, destination: Search GetTripPlanResponseSchema.parse(response) - console.log(response.resultCount) - return response; }, enabled: useAuthToken().isSuccess && origin !== null && destination !== null && date !== null && deadline !== null, From 58dce13ae0eabaefa7ee35d0d7c247a12bf44674 Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 3 Mar 2024 12:01:24 -0600 Subject: [PATCH 09/25] fix error staying up when rout names are the same --- app/components/sheets/route_planning/InputRoute.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx index 05f6837..9b998d9 100644 --- a/app/components/sheets/route_planning/InputRoute.tsx +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -44,6 +44,11 @@ const InputRoute: React.FC = ({ sheetRef }) => { useEffect(() => { + if (suggestionOutput) { + setRouteInfoError(""); + return + } + if (startLocation && endLocation) { if (startLocation.title == endLocation.title) { setRouteInfoError("Start and End locations cannot be the same"); @@ -52,7 +57,7 @@ const InputRoute: React.FC = ({ sheetRef }) => { } setRouteInfoError(""); - }, [startLocation, endLocation]) + }, [startLocation, endLocation, suggestionOutput]) return ( Date: Sun, 3 Mar 2024 17:27:13 -0600 Subject: [PATCH 10/25] trip plan detail --- .../sheets/route_planning/InputRoute.tsx | 56 ++++++++----------- .../sheets/route_planning/TripPlanDetail.tsx | 48 ++++++++++++++++ app/components/ui/TripPlanCell.tsx | 46 +++++++++++++++ app/data/app_state.ts | 14 +++-- app/index.tsx | 10 ++++ package-lock.json | 2 +- utils/interfaces.ts | 11 ++-- 7 files changed, 144 insertions(+), 43 deletions(-) create mode 100644 app/components/sheets/route_planning/TripPlanDetail.tsx create mode 100644 app/components/ui/TripPlanCell.tsx diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx index 9b998d9..580fd35 100644 --- a/app/components/sheets/route_planning/InputRoute.tsx +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -11,6 +11,7 @@ import SegmentedControl from "@react-native-segmented-control/segmented-control" import TimeInput from "app/components/ui/TimeInput"; import { useTripPlan } from "app/data/api_query"; import { useQueryClient } from "@tanstack/react-query"; +import TripPlanCell from "app/components/ui/TripPlanCell"; interface SheetProps { sheetRef: React.RefObject @@ -234,16 +235,25 @@ const InputRoute: React.FC = ({ sheetRef }) => { )} /> - ) : ( tripPlanLoading ? ( + ) : ( tripPlanLoading || isError ? ( // Show the Route Options - - - + {(tripPlanLoading && !isError) && ( + + + + )} + + {isError && ( + + Unable to load routes. Please try again later. + + )} ) : ( p.endTime > Math.floor(Date.now() / 1000))} keyExtractor={(_, index) => index.toString()} onRefresh={() => { client.invalidateQueries({ @@ -264,35 +274,13 @@ const InputRoute: React.FC = ({ sheetRef }) => { return null }} onScrollBeginDrag={() => Keyboard.dismiss()} - renderItem={({item: plan}) => ( - { - console.log(plan.optionIndex) - }} - > - - - - - {/* Title */} - {plan.startTimeText} - - {/* Subtitle */} - {plan.endTimeText} - - - )} + renderItem={({item: plan}) => { + return ( + + ) + }} /> ) ) diff --git a/app/components/sheets/route_planning/TripPlanDetail.tsx b/app/components/sheets/route_planning/TripPlanDetail.tsx new file mode 100644 index 0000000..56ddacd --- /dev/null +++ b/app/components/sheets/route_planning/TripPlanDetail.tsx @@ -0,0 +1,48 @@ +import React, { memo } from "react"; +import { View, TouchableOpacity } from "react-native"; +import { BottomSheetModal, BottomSheetView } from "@gorhom/bottom-sheet"; +import Ionicons from '@expo/vector-icons/Ionicons'; + +import useAppStore from "../../../data/app_state"; +import SheetHeader from "../../ui/SheetHeader"; + + +interface SheetProps { + sheetRef: React.RefObject +} + +// TripPlanDetail (for all routes and current route) +const TripPlanDetail: React.FC = ({ sheetRef }) => { + + const snapPoints = ['25%', '45%', '85%']; + + const theme = useAppStore((state) => state.theme); + const selectedRoutePlan = useAppStore((state) => state.selectedRoutePlan); + + return ( + + + {/* header */} + sheetRef.current?.dismiss()}> + + + } + /> + + + + + ) +} + +export default memo(TripPlanDetail); \ No newline at end of file diff --git a/app/components/ui/TripPlanCell.tsx b/app/components/ui/TripPlanCell.tsx new file mode 100644 index 0000000..fa637ab --- /dev/null +++ b/app/components/ui/TripPlanCell.tsx @@ -0,0 +1,46 @@ +import { Ionicons } from '@expo/vector-icons'; +import useAppStore from 'app/data/app_state'; +import moment from 'moment'; +import React from 'react'; +import { View, Text, TouchableOpacity } from 'react-native'; +import { IOptionDetail } from 'utils/interfaces'; + +interface TripPlanCellProps { + plan: IOptionDetail; +} + +const TripPlanCell: React.FC = ({ plan }) => { + const theme = useAppStore((state) => state.theme); + const setSelectedRoutePlan = useAppStore((state) => state.setSelectedRoutePlan); + const presentSheet = useAppStore((state) => state.presentSheet); + + const relativeTime = (time: number) => { + const now = moment() + const then = moment(time*1000) + const diff = then.diff(now, 'minutes') + return diff + } + + return ( + { + setSelectedRoutePlan(plan); + presentSheet("tripPlanDetail") + }} + > + + {/* Title */} + {relativeTime(plan.endTime)} min + + {/* Subtitle */} + arrive at {plan.endTimeText} + + + {/* caret */} + + + ); +}; + +export default TripPlanCell; \ No newline at end of file diff --git a/app/data/app_state.ts b/app/data/app_state.ts index 4791af5..82cb130 100644 --- a/app/data/app_state.ts +++ b/app/data/app_state.ts @@ -1,5 +1,5 @@ import { create } from "zustand"; -import { IMapRoute, IMapServiceInterruption, IStop, SearchSuggestion } from "../../utils/interfaces"; +import { IMapRoute, IMapServiceInterruption, IOptionDetail, IStop, SearchSuggestion } from "../../utils/interfaces"; import { Theme, lightMode } from "../theme"; interface AppState { @@ -23,8 +23,8 @@ interface AppState { setSelectedStop: (selectedStop: IStop | null) => void, // TODO: Switch to Provider Functions - presentSheet: (sheet: "routeDetails" | "alerts" | "stopTimetable" | "settings" | "alertsDetail" | "inputRoute") => void - setPresentSheet: (presentSheet: (sheet: "routeDetails" | "alerts" | "stopTimetable" | "settings" | "alertsDetail" | "inputRoute") => void) => void + presentSheet: (sheet: "routeDetails" | "alerts" | "stopTimetable" | "settings" | "alertsDetail" | "inputRoute" | "tripPlanDetail") => void + setPresentSheet: (presentSheet: (sheet: "routeDetails" | "alerts" | "stopTimetable" | "settings" | "alertsDetail" | "inputRoute" | "tripPlanDetail") => void) => void selectedAlert: IMapServiceInterruption | null, setSelectedAlert: (selectedAlert: IMapServiceInterruption | null) => void @@ -45,6 +45,9 @@ interface AppState { suggestionOutput: "start" | "end" | null setSuggestionOutput: (suggestionOutput: "start" | "end" | null) => void + + selectedRoutePlan: IOptionDetail | null, + setSelectedRoutePlan: (selectedRoutePlan: IOptionDetail | null) => void } const useAppStore = create()((set) => ({ @@ -88,7 +91,10 @@ const useAppStore = create()((set) => ({ setSuggestions: (suggestions) => set(() => ({ suggestions })), suggestionOutput: null, - setSuggestionOutput: (suggestionOutput) => set(() => ({ suggestionOutput })) + setSuggestionOutput: (suggestionOutput) => set(() => ({ suggestionOutput })), + + selectedRoutePlan: null, + setSelectedRoutePlan: (selectedRoutePlan) => set(() => ({ selectedRoutePlan })), })); export default useAppStore; \ No newline at end of file diff --git a/app/index.tsx b/app/index.tsx index 33ea373..9f8151a 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -14,6 +14,7 @@ import { GestureHandlerRootView } from 'react-native-gesture-handler'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { getColorScheme } from './utils'; import InputRoute from './components/sheets/route_planning/InputRoute'; +import TripPlanDetail from './components/sheets/route_planning/TripPlanDetail'; const Home = () => { const setPresentSheet = useAppStore((state) => state.setPresentSheet); @@ -25,7 +26,10 @@ const Home = () => { const routeDetailSheetRef = useRef(null); const stopTimetableSheetRef = useRef(null); const settingsSheetRef = useRef(null); + + // Route Planning const inputRouteSheetRef = useRef(null); + const tripPlanDetailSheetRef = useRef(null); setPresentSheet((sheet) => { switch (sheet) { @@ -47,6 +51,9 @@ const Home = () => { case "inputRoute": inputRouteSheetRef.current?.present(); break; + case "tripPlanDetail": + tripPlanDetailSheetRef.current?.present(); + break; default: break; } @@ -80,7 +87,10 @@ const Home = () => { + + {/* Route Planning */} + diff --git a/package-lock.json b/package-lock.json index 47a2468..3a94edc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8553,7 +8553,7 @@ }, "node_modules/aggie-spirit-api": { "version": "1.1.0", - "resolved": "git+ssh://git@github.com/Reveille-Rides/aggie-spirit-api.git#7ca4bfff3dc838afac7e1f34f1701a717dc21913", + "resolved": "git+ssh://git@github.com/Reveille-Rides/aggie-spirit-api.git#4bbb9cff3cd8a09f64b3e901debc988d845ec738", "license": "Apache-2.0", "dependencies": { "moment": "^2.29.4" diff --git a/utils/interfaces.ts b/utils/interfaces.ts index af23286..ede7327 100644 --- a/utils/interfaces.ts +++ b/utils/interfaces.ts @@ -349,11 +349,14 @@ export const InstructionStepSchema = z.object({ }); export type IInstructionStep = z.infer +export const Agency = z.object({ + agencyName: z.string(), + agencyUrl: z.string().optional() +}); +export type IAgency = z.infer + export const OptionDetailSchema = z.object({ - agencies: z.array(z.object({ - agencyName: z.string(), - agencyUrl: z.string().optional() - })), + agencies: z.array(Agency), copyrights: z.string(), endTime: z.number(), endTimeText: z.string(), From d05b814dafc12dbb5312c5cdb97aa2d05d8c04be Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 3 Mar 2024 22:21:47 -0600 Subject: [PATCH 11/25] add trip plan timeline --- .../sheets/route_planning/InputRoute.tsx | 27 +++- .../sheets/route_planning/TripPlanDetail.tsx | 144 +++++++++++++++++- app/components/ui/TripPlanCell.tsx | 10 +- app/data/api_query.ts | 5 +- package-lock.json | 9 ++ package.json | 1 + utils/interfaces.ts | 16 +- 7 files changed, 194 insertions(+), 18 deletions(-) diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx index 580fd35..d7ac93c 100644 --- a/app/components/sheets/route_planning/InputRoute.tsx +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -12,6 +12,7 @@ import TimeInput from "app/components/ui/TimeInput"; import { useTripPlan } from "app/data/api_query"; import { useQueryClient } from "@tanstack/react-query"; import TripPlanCell from "app/components/ui/TripPlanCell"; +import * as Location from 'expo-location'; interface SheetProps { sheetRef: React.RefObject @@ -57,6 +58,28 @@ const InputRoute: React.FC = ({ sheetRef }) => { } } + if (startLocation?.type == "my-location" || endLocation?.type == "my-location") { + // Request location permissions + Location.requestForegroundPermissionsAsync().then(async (status) => { + // Check if permission is granted + if (!status.granted) { + setRouteInfoError("Cannot get current location. Please enable location services in your settings.") + return + } + + // Get current location + const locationCoords = await Location.getCurrentPositionAsync({ accuracy: Location.Accuracy.Balanced, timeInterval: 2 }); + + // Set the location coordinates + let location = MyLocationSuggestion + location.lat = locationCoords.coords.latitude + location.long = locationCoords.coords.longitude + + if (startLocation?.type == "my-location") setStartLocation(location) + if (endLocation?.type == "my-location") setEndLocation(location) + }) + } + setRouteInfoError(""); }, [startLocation, endLocation, suggestionOutput]) @@ -253,7 +276,7 @@ const InputRoute: React.FC = ({ sheetRef }) => { ) : ( p.endTime > Math.floor(Date.now() / 1000))} + data={tripPlan?.optionDetails} keyExtractor={(_, index) => index.toString()} onRefresh={() => { client.invalidateQueries({ @@ -264,7 +287,7 @@ const InputRoute: React.FC = ({ sheetRef }) => { keyboardShouldPersistTaps={"handled"} ItemSeparatorComponent={() => } ListHeaderComponent={() => { - if (tripPlan?.resultCount == 0 && !tripPlanLoading) { + if (tripPlan?.optionDetails.length == 0 && !tripPlanLoading) { return ( No results found diff --git a/app/components/sheets/route_planning/TripPlanDetail.tsx b/app/components/sheets/route_planning/TripPlanDetail.tsx index 56ddacd..c7b81b9 100644 --- a/app/components/sheets/route_planning/TripPlanDetail.tsx +++ b/app/components/sheets/route_planning/TripPlanDetail.tsx @@ -1,16 +1,20 @@ -import React, { memo } from "react"; -import { View, TouchableOpacity } from "react-native"; -import { BottomSheetModal, BottomSheetView } from "@gorhom/bottom-sheet"; +import React, { memo, useState } from "react"; +import { View, TouchableOpacity, Text, Dimensions, useWindowDimensions, Button } from "react-native"; +import { BottomSheetFlatList, BottomSheetModal, BottomSheetScrollView, BottomSheetView } from "@gorhom/bottom-sheet"; import Ionicons from '@expo/vector-icons/Ionicons'; - +import { LogBox } from 'react-native'; import useAppStore from "../../../data/app_state"; import SheetHeader from "../../ui/SheetHeader"; +import Timeline from "react-native-timeline-flatlist"; +import { IInstructionStep, IOptionDetail, IWalkingInstruction } from "utils/interfaces"; +import RenderHTML from "react-native-render-html"; interface SheetProps { sheetRef: React.RefObject } + // TripPlanDetail (for all routes and current route) const TripPlanDetail: React.FC = ({ sheetRef }) => { @@ -19,6 +23,42 @@ const TripPlanDetail: React.FC = ({ sheetRef }) => { const theme = useAppStore((state) => state.theme); const selectedRoutePlan = useAppStore((state) => state.selectedRoutePlan); + const htmlStyles = { + titleBase: { + color: theme.text, + fontSize: 16, + }, + titleClassStyle: { + "location_label": { fontSize: 16, fontWeight: "bold" }, + "stop-code": { fontSize: 16, color: theme.subtitle }, + }, + titleTagStyles: { + div: {fontSize: 16} + }, + descriptionBase: { + color: theme.text, + fontSize: 14, + }, + descriptionTagStyles: { + p: { marginTop: 0} + } + + } + + function processRoutePlan(plan: IOptionDetail) { + if (!plan) return [] + + return plan.instructions?.map((instruction) => { + return { + time: instruction.startTime, + title: instruction.instruction?.replace("(ID:", " (ID:"), + description: instruction.walkingInstructions.map((step: IWalkingInstruction) => { + return `

${step.index}. ${step.instruction}

` + }).join('') + } + }) + } + return ( = ({ sheetRef }) => { {/* header */} sheetRef.current?.dismiss()}> @@ -41,8 +81,100 @@ const TripPlanDetail: React.FC = ({ sheetRef }) => { + + ()} + data={processRoutePlan(selectedRoutePlan!)} + /> + ) } +interface StepDetailProps { + step: { + title: string, + description: string + time: string + } + + styles: any +} + + + +const StepDetail: React.FC = ({ step, styles:htmlStyles }) => { + const theme = useAppStore((state) => state.theme); + const [showInstructions, setShowInstructions] = useState(false) + console.log(step.description) + + return ( + + + { step.description && ( + <> + setShowInstructions(!showInstructions)} + + > + {showInstructions ? "Hide" : "View"} Instructions + + { showInstructions && + + + + } + + )} + + ) +} + + + export default memo(TripPlanDetail); \ No newline at end of file diff --git a/app/components/ui/TripPlanCell.tsx b/app/components/ui/TripPlanCell.tsx index fa637ab..7b4ad9d 100644 --- a/app/components/ui/TripPlanCell.tsx +++ b/app/components/ui/TripPlanCell.tsx @@ -17,8 +17,12 @@ const TripPlanCell: React.FC = ({ plan }) => { const relativeTime = (time: number) => { const now = moment() const then = moment(time*1000) - const diff = then.diff(now, 'minutes') - return diff + const diffMin = then.diff(now, 'minutes') + const diffHrs = then.diff(now, 'hours') + + if (diffHrs < 1) return `${diffMin} minutes` + + return `${diffHrs}h ${diffMin - (diffHrs * 60)}m` } return ( @@ -31,7 +35,7 @@ const TripPlanCell: React.FC = ({ plan }) => { > {/* Title */} - {relativeTime(plan.endTime)} min + {relativeTime(plan.endTime)} {/* Subtitle */} arrive at {plan.endTimeText} diff --git a/app/data/api_query.ts b/app/data/api_query.ts index bfcfa0f..b476d5d 100644 --- a/app/data/api_query.ts +++ b/app/data/api_query.ts @@ -292,7 +292,7 @@ export const useTripPlan = (origin: SearchSuggestion | null, destination: Search queryKey: ["tripPlan", origin, destination, date, deadline], queryFn: async () => { const authToken: string = client.getQueryData(["authToken"])!; - const response = await getTripPlan( + let response = await getTripPlan( origin!, destination!, deadline == "arrive" ? date : undefined, @@ -302,6 +302,9 @@ export const useTripPlan = (origin: SearchSuggestion | null, destination: Search GetTripPlanResponseSchema.parse(response) + // filter out expired options + // response.optionDetails = (response?.optionDetails ?? []).filter((p) => p.endTime > Math.floor(Date.now() / 1000)) + return response; }, enabled: useAuthToken().isSuccess && origin !== null && destination !== null && date !== null && deadline !== null, diff --git a/package-lock.json b/package-lock.json index 3a94edc..e8a23db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,7 @@ "react-native-render-html": "^6.3.4", "react-native-safe-area-context": "4.8.2", "react-native-screens": "~3.29.0", + "react-native-timeline-flatlist": "^0.8.0", "react-native-web": "~0.19.6", "zod": "^3.22.4", "zustand": "^4.4.6" @@ -18727,6 +18728,14 @@ "react-native": "*" } }, + "node_modules/react-native-timeline-flatlist": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/react-native-timeline-flatlist/-/react-native-timeline-flatlist-0.8.0.tgz", + "integrity": "sha512-IVfCOxYx7Js84CaUJmtuxq2eyLvoQ1nRO5GG0mri14NH2NbMUwL9VhX19/yI8LpU2bnarlo7kjR6GLUP3DM/iQ==", + "peerDependencies": { + "react-native": ">= 0.58.2" + } + }, "node_modules/react-native-web": { "version": "0.19.10", "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.19.10.tgz", diff --git a/package.json b/package.json index 4916f46..29e2447 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "react-native-render-html": "^6.3.4", "react-native-safe-area-context": "4.8.2", "react-native-screens": "~3.29.0", + "react-native-timeline-flatlist": "^0.8.0", "react-native-web": "~0.19.6", "zod": "^3.22.4", "zustand": "^4.4.6" diff --git a/utils/interfaces.ts b/utils/interfaces.ts index ede7327..c61f8e7 100644 --- a/utils/interfaces.ts +++ b/utils/interfaces.ts @@ -330,22 +330,26 @@ export const OptionBlockSchema = z.object({ }); export type IOptionBlock = z.infer +export const WalkingInstructionSchema = z.object({ + index: z.number(), + instruction: z.string(), + polyline: z.string() +}); +export type IWalkingInstruction = z.infer + + export const InstructionStepSchema = z.object({ className: z.string(), duration: z.string().nullable(), iconClassName: z.string().nullable(), - instructions: z.string().optional(), + instruction: z.string().optional(), latitude: z.number(), longitude: z.number(), polyline: z.string().nullable(), routeShortName: z.string().nullable(), startTime: z.string(), stepType: z.number(), - walkingInstructions: z.array(z.object({ - index: z.number(), - instruction: z.string(), - polyline: z.string() - })) + walkingInstructions: z.array(WalkingInstructionSchema) }); export type IInstructionStep = z.infer From febc253826507359c95ba2b8df3a003ca301ae04 Mon Sep 17 00:00:00 2001 From: bwees Date: Sat, 9 Mar 2024 21:05:13 -0600 Subject: [PATCH 12/25] type fixes --- utils/interfaces.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/interfaces.ts b/utils/interfaces.ts index c61f8e7..90dc5ff 100644 --- a/utils/interfaces.ts +++ b/utils/interfaces.ts @@ -308,7 +308,7 @@ export const PlanBlockSchema = z.object({ className: z.string(), iconString: z.string(), leftPosition: z.number(), - routeShortName: z.string(), + routeShortName: z.string().nullable(), stepType: z.number(), topPosition: z.number(), width: z.number() From 587ea533a21c12cb93e8d1b80b3530e4a82f93b5 Mon Sep 17 00:00:00 2001 From: bwees Date: Sat, 9 Mar 2024 21:05:23 -0600 Subject: [PATCH 13/25] changes to timeline --- .../sheets/route_planning/TripPlanDetail.tsx | 43 +++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/app/components/sheets/route_planning/TripPlanDetail.tsx b/app/components/sheets/route_planning/TripPlanDetail.tsx index c7b81b9..a73486a 100644 --- a/app/components/sheets/route_planning/TripPlanDetail.tsx +++ b/app/components/sheets/route_planning/TripPlanDetail.tsx @@ -1,12 +1,11 @@ import React, { memo, useState } from "react"; -import { View, TouchableOpacity, Text, Dimensions, useWindowDimensions, Button } from "react-native"; -import { BottomSheetFlatList, BottomSheetModal, BottomSheetScrollView, BottomSheetView } from "@gorhom/bottom-sheet"; +import { View, TouchableOpacity, Text, useWindowDimensions } from "react-native"; +import { BottomSheetModal, BottomSheetScrollView, BottomSheetView } from "@gorhom/bottom-sheet"; import Ionicons from '@expo/vector-icons/Ionicons'; -import { LogBox } from 'react-native'; import useAppStore from "../../../data/app_state"; import SheetHeader from "../../ui/SheetHeader"; import Timeline from "react-native-timeline-flatlist"; -import { IInstructionStep, IOptionDetail, IWalkingInstruction } from "utils/interfaces"; +import { IOptionDetail, IWalkingInstruction } from "utils/interfaces"; import RenderHTML from "react-native-render-html"; @@ -23,6 +22,8 @@ const TripPlanDetail: React.FC = ({ sheetRef }) => { const theme = useAppStore((state) => state.theme); const selectedRoutePlan = useAppStore((state) => state.selectedRoutePlan); + const dimensions = useWindowDimensions() + const htmlStyles = { titleBase: { color: theme.text, @@ -54,7 +55,8 @@ const TripPlanDetail: React.FC = ({ sheetRef }) => { title: instruction.instruction?.replace("(ID:", " (ID:"), description: instruction.walkingInstructions.map((step: IWalkingInstruction) => { return `

${step.index}. ${step.instruction}

` - }).join('') + }).join(''), + icon: } }) } @@ -84,18 +86,18 @@ const TripPlanDetail: React.FC = ({ sheetRef }) => { = ({ sheetRef }) => { }} innerCircle={'dot'} renderDetail={(data) => ()} + renderCircle={(rowData, sectionID, rowID) => { + return ( + + {rowData.icon} + + ) + }} data={processRoutePlan(selectedRoutePlan!)} /> @@ -125,13 +146,11 @@ interface StepDetailProps { const StepDetail: React.FC = ({ step, styles:htmlStyles }) => { const theme = useAppStore((state) => state.theme); const [showInstructions, setShowInstructions] = useState(false) - console.log(step.description) return ( - + Date: Sat, 16 Mar 2024 16:40:58 -0400 Subject: [PATCH 14/25] formatting --- app/components/map/MapView.tsx | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/components/map/MapView.tsx b/app/components/map/MapView.tsx index afc3c87..d6fd87c 100644 --- a/app/components/map/MapView.tsx +++ b/app/components/map/MapView.tsx @@ -226,19 +226,19 @@ const Map: React.FC = () => { {/* map buttons */} - + style={{ + top: 60, + alignContent: 'center', + justifyContent: 'center', + position: 'absolute', + right: 8, + overflow: 'hidden', + borderRadius: 8, + backgroundColor: theme.background, + padding: 12, + zIndex: 1000, + }} + > recenterView()}> {isViewCenteredOnUser ? From eaa81b2eb2c68b44cafbd2ff7f75c00313201d3f Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 17 Mar 2024 21:52:04 -0500 Subject: [PATCH 15/25] bubble changes and persisting reoute selection --- .../sheets/route_planning/InputRoute.tsx | 18 +++++++++++++----- .../sheets/route_planning/TripPlanDetail.tsx | 8 ++++---- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx index d7ac93c..3f7d9ff 100644 --- a/app/components/sheets/route_planning/InputRoute.tsx +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -26,7 +26,7 @@ const InputRoute: React.FC = ({ sheetRef }) => { const theme = useAppStore((state) => state.theme); // Planning Inputs - const [startLocation, setStartLocation] = useState(null); + const [startLocation, setStartLocation] = useState(MyLocationSuggestion); const [endLocation, setEndLocation] = useState(null); const [deadline, setDeadline] = useState<"leave" | "arrive">("arrive"); const [time, setTime] = useState(new Date()); @@ -92,9 +92,6 @@ const InputRoute: React.FC = ({ sheetRef }) => { handleIndicatorStyle={{backgroundColor: theme.divider}} onAnimate={(from, _) => { if (from == -1) { - setStartLocation(MyLocationSuggestion) - setEndLocation(null) - setSuggesionOutput(null) sheetRef.current?.snapToIndex(0) } }} @@ -104,7 +101,18 @@ const InputRoute: React.FC = ({ sheetRef }) => { sheetRef.current?.dismiss()}> + { + sheetRef.current?.dismiss() + + setTimeout(() => { + setStartLocation(MyLocationSuggestion) + setEndLocation(null) + setSuggesionOutput(null) + }, 500) + }} + > } diff --git a/app/components/sheets/route_planning/TripPlanDetail.tsx b/app/components/sheets/route_planning/TripPlanDetail.tsx index a73486a..47215e8 100644 --- a/app/components/sheets/route_planning/TripPlanDetail.tsx +++ b/app/components/sheets/route_planning/TripPlanDetail.tsx @@ -56,7 +56,7 @@ const TripPlanDetail: React.FC = ({ sheetRef }) => { description: instruction.walkingInstructions.map((step: IWalkingInstruction) => { return `

${step.index}. ${step.instruction}

` }).join(''), - icon: + icon: } }) } @@ -103,21 +103,21 @@ const TripPlanDetail: React.FC = ({ sheetRef }) => { borderRadius:13, fontWeight: 'bold' }} - innerCircle={'dot'} + // innerCircle={'dot'} renderDetail={(data) => ()} renderCircle={(rowData, sectionID, rowID) => { return ( {rowData.icon} From 3be83ea53fe16fd37ab3af357834fd427dfa2668 Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 28 Jul 2024 18:51:28 -0400 Subject: [PATCH 16/25] finished up route planning UI --- app/components/map/MapView.tsx | 210 +- .../map/markers/RoutePlanMarker.tsx | 49 + app/components/map/markers/StopMarker.tsx | 7 +- .../sheets/route_planning/InputRoute.tsx | 39 +- .../sheets/route_planning/TripPlanDetail.tsx | 92 +- app/components/ui/SheetHeader.tsx | 15 +- app/components/ui/SuggestionInput.tsx | 4 - app/components/ui/TripPlanCell.tsx | 47 +- app/data/api_query.ts | 3 +- app/data/app_state.ts | 10 +- package-lock.json | 3662 ++++++++--------- package.json | 41 +- utils/interfaces.ts | 13 + 13 files changed, 2180 insertions(+), 2012 deletions(-) create mode 100644 app/components/map/markers/RoutePlanMarker.tsx diff --git a/app/components/map/MapView.tsx b/app/components/map/MapView.tsx index d3b3eec..dedf22b 100644 --- a/app/components/map/MapView.tsx +++ b/app/components/map/MapView.tsx @@ -3,12 +3,14 @@ import { Dimensions, TouchableOpacity, View } from "react-native"; import MapView, { LatLng, Polyline, Region } from 'react-native-maps'; import * as Location from 'expo-location'; import MaterialIcons from '@expo/vector-icons/MaterialIcons'; -import { IMapRoute } from "../../../utils/interfaces"; +import { IMapRoute, RoutePlanMapMarker, RoutePlanPolylinePoint } from "../../../utils/interfaces"; import useAppStore from "../../data/app_state"; import BusMarker from "./markers/BusMarker"; import StopMarker from "./markers/StopMarker"; import { useVehicles } from "../../data/api_query"; -import { FontAwesome6 } from "@expo/vector-icons"; +import { FontAwesome6, Ionicons, MaterialCommunityIcons } from "@expo/vector-icons"; +import { decode } from "@googlemaps/polyline-codec"; +import RoutePlanMarker from "./markers/RoutePlanMarker"; const Map: React.FC = () => { const mapViewRef = useRef(null); @@ -20,11 +22,18 @@ const Map: React.FC = () => { const drawnRoutes = useAppStore((state) => state.drawnRoutes); const setZoomToStopLatLng = useAppStore((state) => state.setZoomToStopLatLng); const selectedRouteDirection = useAppStore(state => state.selectedRouteDirection); + const selectedRoutePlan = useAppStore(state => state.selectedRoutePlan); + const selectedRoutePlanPathPart = useAppStore(state => state.selectedRoutePlanPathPart); const theme = useAppStore((state) => state.theme); const poppedUpStopCallout = useAppStore((state) => state.poppedUpStopCallout); const [isViewCenteredOnUser, setIsViewCenteredOnUser] = useState(false); + const [selectedRoutePlanPath, setSelectedRoutePlanPath] = useState([]); + const [highlightedRoutePlanPath, setHighlightedRoutePlanPath] = useState([]); + const [fadedRoutePlanPath, setFadedRoutePlanPath] = useState([]); + const [routePlanMapMarkers, setRoutePlanMapMarkers] = useState([]); + const { data: buses } = useVehicles(selectedRoute?.key ?? ""); const defaultMapRegion: Region = { @@ -33,8 +42,6 @@ const Map: React.FC = () => { latitudeDelta: 0.10, longitudeDelta: 0.01 }; - - function selectRoute(route: IMapRoute, directionKey: string) { @@ -51,7 +58,158 @@ const Map: React.FC = () => { // center the view on the drawn routes useEffect(() => { centerViewOnRoutes(); - }, [drawnRoutes]); + }, [drawnRoutes, selectedRoutePlanPath]); + + // Generate the path points for the selected route plan + useEffect(() => { + if (!selectedRoutePlan) { + setHighlightedRoutePlanPath([]); + setFadedRoutePlanPath([]); + setRoutePlanMapMarkers([]); + } + + var polyline: RoutePlanPolylinePoint[] = []; + selectedRoutePlan?.instructions.forEach((instruction, index) => { + if (instruction.polyline) { + decode(instruction.polyline).forEach((point) => { + polyline.push({ + latitude: point[0], + longitude: point[1], + stepIndex: index, + pathIndex: polyline.length + }); + }); + } + }) + + setSelectedRoutePlanPath(polyline); + + // clear the highlighted path if no route plan is selected + + setHighlightedRoutePlanPath(polyline); + setFadedRoutePlanPath([]); + + if (polyline.length === 0) { + setRoutePlanMapMarkers([]); + return; + } + + setRoutePlanMapMarkers([ + { + icon: , + latitude: polyline[polyline.length-1]!.latitude, + longitude: polyline[polyline.length-1]!.longitude + }, + { + icon: , + latitude: polyline[0]!.latitude, + longitude: polyline[0]!.longitude + } + ]); + }, [selectedRoutePlan]) + + // Adjust the zoom and the path to show the selected part of the route plan + useEffect(() => { + // filter the selected route plan path to only show the selected part + var highlighted: RoutePlanPolylinePoint[] = []; + if (selectedRoutePlanPathPart === -1) { + highlighted = selectedRoutePlanPath; + setHighlightedRoutePlanPath(selectedRoutePlanPath); + setFadedRoutePlanPath([]); + centerViewOnRoutes(); + } + + // filter the selected route plan path to only show the selected part + if (selectedRoutePlanPathPart >= 0) { + highlighted = selectedRoutePlanPath.filter((point) => point.stepIndex === selectedRoutePlanPathPart); + setHighlightedRoutePlanPath(highlighted); + + // break the path into two parts, before and after the selected part + var faded: RoutePlanPolylinePoint[][] = [[], []]; + selectedRoutePlanPath.forEach((point) => { + if (point.stepIndex < selectedRoutePlanPathPart) { + faded[0]!.push(point); + } else if (point.stepIndex > selectedRoutePlanPathPart) { + faded[1]!.push(point); + } + }); + + setFadedRoutePlanPath(faded); + } + + if (highlighted.length === 0) { + // get the last point of the path index - 1 and zoom to that point + // do this by finding the last point that has a stepIndex of selectedRoutePlanPathPart - 1 + const lastPoint = [...selectedRoutePlanPath].reverse().find((point) => point.stepIndex === selectedRoutePlanPathPart - 1); + + if (lastPoint) { + // if its the last location, show the finish flag + if (lastPoint.pathIndex == selectedRoutePlanPath.length - 1) { + setRoutePlanMapMarkers([ + { + icon: , + latitude: lastPoint.latitude, + longitude: lastPoint.longitude + } + ]); + } else { + setRoutePlanMapMarkers([ + { + icon: , + latitude: lastPoint.latitude, + longitude: lastPoint.longitude + } + ]); + } + + mapViewRef.current?.animateToRegion({ + latitude: lastPoint.latitude - .002, + longitude: lastPoint.longitude, + latitudeDelta: 0.005, + longitudeDelta: 0.005 + }); + } + + return; + } else { + var icon = ; + if (selectedRoutePlanPathPart != -1) { + if (selectedRoutePlan?.instructions[selectedRoutePlanPathPart]!.className === "bus") { + icon = + } + if (selectedRoutePlan?.instructions[selectedRoutePlanPathPart]!.className === "walking") { + icon = + } + if (selectedRoutePlan?.instructions[selectedRoutePlanPathPart]!.className === "waiting") { + icon = + } + } + + setRoutePlanMapMarkers([ + { + icon: , + latitude: highlighted[highlighted.length-1]!.latitude, + longitude: highlighted[highlighted.length-1]!.longitude + }, + { + icon: icon, + latitude: highlighted[0]!.latitude, + longitude: highlighted[0]!.longitude + } + ]); + } + + // animate to the selected part of the route plan + mapViewRef.current?.fitToCoordinates(highlighted, { + edgePadding: { + top: Dimensions.get("window").height * 0.05, + right: 60, + bottom: Dimensions.get("window").height * 0.45 + 8, + left: 60 + }, + animated: true + }); + }, [selectedRoutePlanPathPart]) // handle weird edge case where map does not pick up on the initial region useEffect(() => { @@ -98,13 +256,21 @@ const Map: React.FC = () => { }) }); + // add the selected route plan path to coords + selectedRoutePlanPath.forEach((point) => { + coords.push({ + latitude: point.latitude, + longitude: point.longitude + }); + }) + if (coords.length > 0) { mapViewRef.current?.fitToCoordinates(coords, { edgePadding: { top: Dimensions.get("window").height * 0.05, - right: 20, + right: 60, bottom: Dimensions.get("window").height * 0.45 + 8, - left: 20 + left: 60 }, animated: true }); @@ -207,6 +373,36 @@ const Map: React.FC = () => { }) ))} + {/* Route Plan Highlighted */} + {selectedRoutePlanPath && + + } + + {/* Route Plan Highlighted */} + {selectedRoutePlanPath && fadedRoutePlanPath.map((path, index) => { + return + })} + + {/* Route Plan Markers */} + {routePlanMapMarkers.map((marker, index) => { + return ( + + ) + })} + {/* Buses */} {selectedRoute && buses?.map((bus) => { const color = selectedRoute.directionList[0]?.lineColor ?? "#500000" diff --git a/app/components/map/markers/RoutePlanMarker.tsx b/app/components/map/markers/RoutePlanMarker.tsx new file mode 100644 index 0000000..38b7be5 --- /dev/null +++ b/app/components/map/markers/RoutePlanMarker.tsx @@ -0,0 +1,49 @@ +import React, { memo } from 'react'; +import { MapMarker, Marker } from 'react-native-maps'; +import { RoutePlanMapMarker } from 'utils/interfaces'; +import { View } from 'react-native'; +import { getLighterColor } from 'app/utils'; +import useAppStore from 'app/data/app_state'; + +interface Props { + marker: RoutePlanMapMarker +} + +// Stop marker with callout +const RoutePlanMarker: React.FC = ({ marker }) => { + const markerRef = React.useRef(null); + const theme = useAppStore(state => state.theme); + + return ( + + + {marker.icon} + + + ); +}; + +export default memo(RoutePlanMarker); diff --git a/app/components/map/markers/StopMarker.tsx b/app/components/map/markers/StopMarker.tsx index 5c7ce9b..6319b82 100644 --- a/app/components/map/markers/StopMarker.tsx +++ b/app/components/map/markers/StopMarker.tsx @@ -29,10 +29,9 @@ const StopMarker: React.FC = ({ point, tintColor, route, direction, isCal }, [isCalloutShown]) const defaultDirection = () => { - if (active == false) - { - setSelectedDirection(direction.key); - } + if (active == false) { + setSelectedDirection(direction.key); + } } return ( diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx index 3f7d9ff..f68219b 100644 --- a/app/components/sheets/route_planning/InputRoute.tsx +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -5,7 +5,7 @@ import Ionicons from '@expo/vector-icons/Ionicons'; import useAppStore from "../../../data/app_state"; import SheetHeader from "../../ui/SheetHeader"; import { MyLocationSuggestion, SearchSuggestion } from "utils/interfaces"; -import { MaterialCommunityIcons } from "@expo/vector-icons"; +import { FontAwesome6, MaterialCommunityIcons } from "@expo/vector-icons"; import SuggestionInput from "app/components/ui/SuggestionInput"; import SegmentedControl from "@react-native-segmented-control/segmented-control"; import TimeInput from "app/components/ui/TimeInput"; @@ -21,7 +21,7 @@ interface SheetProps { // AlertList (for all routes and current route) const InputRoute: React.FC = ({ sheetRef }) => { - const snapPoints = ['45%', '90%']; + const snapPoints = ['90%']; const theme = useAppStore((state) => state.theme); @@ -37,13 +37,17 @@ const InputRoute: React.FC = ({ sheetRef }) => { const suggestionOutput = useAppStore((state) => state.suggestionOutput); const setSuggestions = useAppStore((state) => state.setSuggestions); const setSuggesionOutput = useAppStore((state) => state.setSuggestionOutput); - const [rotueInfoError, setRouteInfoError] = useState(""); + const [routeInfoError, setRouteInfoError] = useState(""); + const setDrawnRoutes = useAppStore((state) => state.setDrawnRoutes); - const [snapIndex, setSnapIndex] = useState(1); const [searchSuggestionsLoading, setSearchSuggestionsLoading] = useState(false) const client = useQueryClient() + useEffect(() => { + setDrawnRoutes([]) + }, []) + useEffect(() => { if (suggestionOutput) { @@ -87,14 +91,8 @@ const InputRoute: React.FC = ({ sheetRef }) => { { - if (from == -1) { - sheetRef.current?.snapToIndex(0) - } - }} > {/* header */} @@ -129,8 +127,6 @@ const InputRoute: React.FC = ({ sheetRef }) => { location={startLocation} onFocus={() => { if (startLocation?.type == "my-location") setStartLocation(null) - sheetRef.current?.snapToIndex(1) - setSnapIndex(1) }} icon={(startLocation?.type == "my-location") ? @@ -150,12 +146,10 @@ const InputRoute: React.FC = ({ sheetRef }) => { location={endLocation} onFocus={() => { if (endLocation?.type == "my-location") setEndLocation(null) - sheetRef.current?.snapToIndex(1) - setSnapIndex(1) }} icon={(endLocation?.type == "my-location") ? - : + : } setSuggestionLoading={setSearchSuggestionsLoading} /> @@ -194,13 +188,11 @@ const InputRoute: React.FC = ({ sheetRef }) => { {/* Error */} - { rotueInfoError != "" && ( + { routeInfoError != "" && ( - {/* Warning Icon */} - - + {/* Error Text */} - {rotueInfoError} + {routeInfoError} )} @@ -210,7 +202,7 @@ const InputRoute: React.FC = ({ sheetRef }) => { {/* Flat lists when no error */} - {rotueInfoError == "" && ( + {routeInfoError == "" && ( suggestionOutput ? ( /* Search Suggestions */ = ({ sheetRef }) => { if (searchSuggestions.length == 0 && suggestionOutput && !searchSuggestionsLoading) { return ( - No results found + No locations found ) } @@ -290,6 +282,7 @@ const InputRoute: React.FC = ({ sheetRef }) => { client.invalidateQueries({ queryKey: ["tripPlan", startLocation, endLocation, time, deadline] }) + setSuggestions([]) }} refreshing={tripPlanLoading} keyboardShouldPersistTaps={"handled"} @@ -298,7 +291,7 @@ const InputRoute: React.FC = ({ sheetRef }) => { if (tripPlan?.optionDetails.length == 0 && !tripPlanLoading) { return ( - No results found + No routes found ) } diff --git a/app/components/sheets/route_planning/TripPlanDetail.tsx b/app/components/sheets/route_planning/TripPlanDetail.tsx index 47215e8..d96bc6d 100644 --- a/app/components/sheets/route_planning/TripPlanDetail.tsx +++ b/app/components/sheets/route_planning/TripPlanDetail.tsx @@ -1,4 +1,4 @@ -import React, { memo, useState } from "react"; +import React, { memo, useEffect, useState } from "react"; import { View, TouchableOpacity, Text, useWindowDimensions } from "react-native"; import { BottomSheetModal, BottomSheetScrollView, BottomSheetView } from "@gorhom/bottom-sheet"; import Ionicons from '@expo/vector-icons/Ionicons'; @@ -7,6 +7,7 @@ import SheetHeader from "../../ui/SheetHeader"; import Timeline from "react-native-timeline-flatlist"; import { IOptionDetail, IWalkingInstruction } from "utils/interfaces"; import RenderHTML from "react-native-render-html"; +import { FontAwesome6 } from "@expo/vector-icons"; interface SheetProps { @@ -21,6 +22,9 @@ const TripPlanDetail: React.FC = ({ sheetRef }) => { const theme = useAppStore((state) => state.theme); const selectedRoutePlan = useAppStore((state) => state.selectedRoutePlan); + const setSelectedRoutePlan = useAppStore((state) => state.setSelectedRoutePlan); + const setSelectedRoutePlanPathPart = useAppStore((state) => state.setSelectedRoutePlanPathPart); + const selectedRoutePlanPathPart = useAppStore((state) => state.selectedRoutePlanPathPart); const dimensions = useWindowDimensions() @@ -28,6 +32,8 @@ const TripPlanDetail: React.FC = ({ sheetRef }) => { titleBase: { color: theme.text, fontSize: 16, + paddingLeft: 6, + paddingTop: 2 }, titleClassStyle: { "location_label": { fontSize: 16, fontWeight: "bold" }, @@ -46,21 +52,49 @@ const TripPlanDetail: React.FC = ({ sheetRef }) => { } + useEffect(() => { + setSelectedRoutePlanPathPart(-1) + }, []) + function processRoutePlan(plan: IOptionDetail) { if (!plan) return [] - return plan.instructions?.map((instruction) => { + return plan.instructions?.map((instruction, index) => { + var icon; + switch (instruction.className) { + case "bus": + icon = + break; + case "walking": + icon = + break; + case "end": + icon = + break; + case "waiting": + icon = + break; + default: + icon = + } + return { time: instruction.startTime, title: instruction.instruction?.replace("(ID:", " (ID:"), description: instruction.walkingInstructions.map((step: IWalkingInstruction) => { return `

${step.index}. ${step.instruction}

` }).join(''), - icon: + icon: icon, + index: index } }) } + useEffect(() => { + if (selectedRoutePlanPathPart === -1) return; + sheetRef.current?.snapToIndex(1) + }, [selectedRoutePlanPathPart]) + return ( = ({ sheetRef }) => { index={1} backgroundStyle={{backgroundColor: theme.background}} handleIndicatorStyle={{backgroundColor: theme.divider}} + enablePanDownToClose={false} > {/* header */} setSelectedRoutePlanPathPart(-1)} icon={ - sheetRef.current?.dismiss()}> + { + setSelectedRoutePlanPathPart(-1) + setSelectedRoutePlan(null) + + + sheetRef.current?.dismiss() + }}> } @@ -87,25 +129,33 @@ const TripPlanDetail: React.FC = ({ sheetRef }) => { style={{ flex: 1, paddingLeft: 16, - paddingTop: 24, }} > ()} - renderCircle={(rowData, sectionID, rowID) => { + onEventPress={(e) => { + // @ts-ignore: e is not actually an Event, + if (e.index === selectedRoutePlanPathPart) { + setSelectedRoutePlanPathPart(-1) + } else { + // @ts-ignore: e is not actually an Event, + setSelectedRoutePlanPathPart(e.index) + } + }} + renderDetail={(data) => ()} + renderCircle={(rowData, _sectionID, _rowID) => { return ( = ({ sheetRef }) => { }} data={processRoutePlan(selectedRoutePlan!)} /> + Route Directions Provided by Google ) @@ -136,14 +196,12 @@ interface StepDetailProps { title: string, description: string time: string + index: number } - styles: any } - - -const StepDetail: React.FC = ({ step, styles:htmlStyles }) => { +const StepDetail: React.FC = ({ step, styles: htmlStyles }) => { const theme = useAppStore((state) => state.theme); const [showInstructions, setShowInstructions] = useState(false) @@ -160,11 +218,10 @@ const StepDetail: React.FC = ({ step, styles:htmlStyles }) => { <> setShowInstructions(!showInstructions)} - > = ({ step, styles:htmlStyles }) => { baseStyle={htmlStyles.descriptionBase} source={{html: step.description}} tagsStyles={htmlStyles.descriptionTagStyles} - // classesStyles={{}} contentWidth={500} />
diff --git a/app/components/ui/SheetHeader.tsx b/app/components/ui/SheetHeader.tsx index 9d54cd3..3f5aa9c 100644 --- a/app/components/ui/SheetHeader.tsx +++ b/app/components/ui/SheetHeader.tsx @@ -1,22 +1,29 @@ import useAppStore from '../../data/app_state'; import React, { memo } from 'react' import { View, Text } from 'react-native' +import { TouchableOpacity } from 'react-native-gesture-handler'; interface Props { title: string, subtitle?: string, - icon: any + icon: any, + onTitlePress?: () => void } -const SheetHeader: React.FC = ({ title, subtitle, icon }) => { +const SheetHeader: React.FC = ({ title, subtitle, icon, onTitlePress }) => { const theme = useAppStore((state) => state.theme); return ( - {title} - + + + {title} + + + + {icon} { subtitle && {subtitle}} diff --git a/app/components/ui/SuggestionInput.tsx b/app/components/ui/SuggestionInput.tsx index a0e173f..0522de1 100644 --- a/app/components/ui/SuggestionInput.tsx +++ b/app/components/ui/SuggestionInput.tsx @@ -104,10 +104,6 @@ const SuggestionInput: React.FC = ({ location, icon, onFocus, outputName, setSuggestionsOutput(outputName); onFocus() }} - onBlur={() => { - setSuggestions([]); - setSuggestionsOutput(null); - }} placeholder="Enter a location" /> diff --git a/app/components/ui/TripPlanCell.tsx b/app/components/ui/TripPlanCell.tsx index 7b4ad9d..28e5d55 100644 --- a/app/components/ui/TripPlanCell.tsx +++ b/app/components/ui/TripPlanCell.tsx @@ -1,6 +1,5 @@ import { Ionicons } from '@expo/vector-icons'; import useAppStore from 'app/data/app_state'; -import moment from 'moment'; import React from 'react'; import { View, Text, TouchableOpacity } from 'react-native'; import { IOptionDetail } from 'utils/interfaces'; @@ -13,32 +12,64 @@ const TripPlanCell: React.FC = ({ plan }) => { const theme = useAppStore((state) => state.theme); const setSelectedRoutePlan = useAppStore((state) => state.setSelectedRoutePlan); const presentSheet = useAppStore((state) => state.presentSheet); + const setDrawnRoutes = useAppStore((state) => state.setDrawnRoutes); const relativeTime = (time: number) => { - const now = moment() - const then = moment(time*1000) - const diffMin = then.diff(now, 'minutes') - const diffHrs = then.diff(now, 'hours') + const diffMin = Math.floor(time / 60) + const diffHrs = Math.floor(diffMin / 60) if (diffHrs < 1) return `${diffMin} minutes` return `${diffHrs}h ${diffMin - (diffHrs * 60)}m` } + const transportationFormat = () => { + for (const instruction of plan.instructions) { + if (instruction.className.includes("bus")) { + return "bus" + } + } + return "walking" + } + return ( { setSelectedRoutePlan(plan); + setDrawnRoutes([]); presentSheet("tripPlanDetail") }} > + + { + transportationFormat() === "bus" ? ( + + ) : ( + + ) + } + + {/* Title */} - {relativeTime(plan.endTime)} + {relativeTime(plan.endTime - plan.startTime)} {/* Subtitle */} - arrive at {plan.endTimeText} + Arrive at {plan.endTimeText} {/* caret */} diff --git a/app/data/api_query.ts b/app/data/api_query.ts index b476d5d..1cd007e 100644 --- a/app/data/api_query.ts +++ b/app/data/api_query.ts @@ -292,6 +292,7 @@ export const useTripPlan = (origin: SearchSuggestion | null, destination: Search queryKey: ["tripPlan", origin, destination, date, deadline], queryFn: async () => { const authToken: string = client.getQueryData(["authToken"])!; + let response = await getTripPlan( origin!, destination!, @@ -308,7 +309,7 @@ export const useTripPlan = (origin: SearchSuggestion | null, destination: Search return response; }, enabled: useAuthToken().isSuccess && origin !== null && destination !== null && date !== null && deadline !== null, - staleTime: 120000, // 2 minutes + staleTime: 60000, // 2 minutes throwOnError: true }); } \ No newline at end of file diff --git a/app/data/app_state.ts b/app/data/app_state.ts index b9684a5..d78f4a1 100644 --- a/app/data/app_state.ts +++ b/app/data/app_state.ts @@ -49,8 +49,11 @@ interface AppState { suggestionOutput: "start" | "end" | null setSuggestionOutput: (suggestionOutput: "start" | "end" | null) => void - selectedRoutePlan: IOptionDetail | null, + selectedRoutePlan: IOptionDetail | null setSelectedRoutePlan: (selectedRoutePlan: IOptionDetail | null) => void + + selectedRoutePlanPathPart: number + setSelectedRoutePlanPathPart: (selectedRoutePlanPathPart: number) => void } const useAppStore = create()((set) => ({ @@ -101,6 +104,11 @@ const useAppStore = create()((set) => ({ selectedRoutePlan: null, setSelectedRoutePlan: (selectedRoutePlan) => set(() => ({ selectedRoutePlan })), + + // the index of what part of polyline to show + // -1 means show all parts + selectedRoutePlanPathPart: -1, + setSelectedRoutePlanPathPart: (selectedRoutePlanPathPart) => set(() => ({ selectedRoutePlanPathPart })) })); export default useAppStore; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e8a23db..b0253b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,47 +9,48 @@ "version": "1.0.0", "hasInstallScript": true, "dependencies": { - "@expo/vector-icons": "^14.0.0", + "@expo/vector-icons": "^14.0.2", + "@googlemaps/polyline-codec": "^1.0.28", "@gorhom/bottom-sheet": "^4.5.1", - "@react-native-async-storage/async-storage": "^1.19.3", - "@react-native-segmented-control/segmented-control": "2.4.1", + "@react-native-async-storage/async-storage": "1.23.1", + "@react-native-segmented-control/segmented-control": "2.5.2", "@tanstack/react-query": "^5.22.2", "aggie-spirit-api": "github:Reveille-Rides/aggie-spirit-api#route-planning-api", - "expo": "^50.0.7", - "expo-constants": "~15.4.5", - "expo-linking": "~6.2.2", - "expo-location": "~16.5.3", - "expo-router": "~3.4.7", - "expo-splash-screen": "~0.26.4", - "expo-status-bar": "~1.11.1", + "expo": "^51.0.22", + "expo-constants": "~16.0.2", + "expo-linking": "~6.3.1", + "expo-location": "~17.0.1", + "expo-router": "~3.5.18", + "expo-splash-screen": "~0.27.5", + "expo-status-bar": "~1.12.1", "moment": "^2.30.1", "moment-strftime": "^0.5.0", "patch-package": "^8.0.0", "react": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.73.4", - "react-native-gesture-handler": "~2.14.0", - "react-native-maps": "1.10.0", - "react-native-reanimated": "~3.6.2", + "react-native": "0.74.3", + "react-native-gesture-handler": "~2.16.1", + "react-native-maps": "1.14.0", + "react-native-reanimated": "~3.10.1", "react-native-render-html": "^6.3.4", - "react-native-safe-area-context": "4.8.2", - "react-native-screens": "~3.29.0", + "react-native-safe-area-context": "4.10.5", + "react-native-screens": "3.31.1", "react-native-timeline-flatlist": "^0.8.0", "react-native-web": "~0.19.6", "zod": "^3.22.4", "zustand": "^4.4.6" }, "devDependencies": { - "@babel/core": "^7.22.9", - "@config-plugins/detox": "^7.0.0", + "@babel/core": "^7.24.0", + "@config-plugins/detox": "^8.0.0", "@testing-library/jest-native": "^5.4.2", "@testing-library/react-native": "^12.1.3", - "@types/react": "~18.2.14", + "@types/react": "~18.2.79", "@types/react-native": "^0.72.2", "@typescript-eslint/eslint-plugin": "^6.2.0", "@typescript-eslint/parser": "^6.2.0", "babel-plugin-module-resolver": "^5.0.0", - "babel-preset-expo": "^10.0.1", + "babel-preset-expo": "~11.0.0", "eas-cli": "^3.17.1", "eslint": "^8.46.0", "eslint-config-airbnb": "^19.0.4", @@ -103,40 +104,40 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.0.tgz", + "integrity": "sha512-P4fwKI2mjEb3ZU5cnMJzvRsRKGBUcs8jvxIoRmr6ufAY9Xk2Bz7JubRTTivkw55c7WQJfTECeqYVa+HZ0FzREg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", - "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -152,13 +153,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -180,6 +181,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "peer": true, "dependencies": { "@babel/types": "^7.22.15" }, @@ -188,13 +190,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -279,6 +281,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "peer": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -298,26 +301,26 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.0.tgz", + "integrity": "sha512-bIkOa2ZJYn7FHnepzr5iX9Kmz8FjIz4UKzJ9zhX3dnYuVW0xul9RuR3skBfoLu+FPTQw90EHW9rJsSZhyLQ3fQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -378,11 +381,12 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -411,25 +415,25 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "engines": { "node": ">=6.9.0" } @@ -448,35 +452,35 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz", - "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", + "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -488,6 +492,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -502,6 +507,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -518,6 +524,7 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5" @@ -594,6 +601,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", @@ -682,6 +705,7 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "peer": true, "engines": { "node": ">=6.9.0" }, @@ -704,6 +728,7 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -715,6 +740,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -793,6 +819,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -807,6 +834,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -821,6 +849,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -832,6 +861,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -937,6 +967,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -965,6 +996,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -994,6 +1026,7 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz", "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==", + "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", @@ -1027,6 +1060,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1055,6 +1089,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "peer": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -1070,6 +1105,7 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "peer": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", @@ -1137,6 +1173,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -1152,6 +1189,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1166,6 +1204,7 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -1181,6 +1220,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "peer": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -1226,6 +1266,7 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -1257,6 +1298,7 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -1286,6 +1328,7 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -1301,6 +1344,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1315,6 +1359,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "peer": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" @@ -1346,6 +1391,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "peer": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", @@ -1363,6 +1409,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "peer": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" @@ -1393,6 +1440,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1422,6 +1470,7 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -1433,20 +1482,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-assign": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.23.3.tgz", - "integrity": "sha512-TPJ6O7gVC2rlQH2hvQGRH273G1xdoloCj9Pc07Q7JbIZYDi+Sv5gaE2fu+r5E7qK4zyt6vj0FbZaZTRU5C3OMA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-object-rest-spread": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", @@ -1469,6 +1504,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20" @@ -1484,6 +1520,7 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -1561,6 +1598,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1664,6 +1702,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "regenerator-transform": "^0.15.2" @@ -1679,6 +1718,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1769,6 +1809,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1800,6 +1841,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1814,6 +1856,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -1844,6 +1887,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -1859,6 +1903,7 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.7.tgz", "integrity": "sha512-SY27X/GtTz/L4UryMNJ6p4fH4nsgWbz84y9FE0bQeWJP6O5BhgVCt53CotQKHCOeXJel8VyhlhujhlltKms/CA==", + "peer": true, "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-compilation-targets": "^7.23.6", @@ -1968,6 +2013,7 @@ "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -2049,31 +2095,28 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.1.tgz", + "integrity": "sha512-LrHHoWq08ZpmmFqBAzN+hUdWwy5zt7FGa/hVwMcOqW6OVtwqaoD5utfuGYU87JYxdZgLUvktAsn37j/sYR9siA==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2082,12 +2125,12 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.0.tgz", + "integrity": "sha512-LcnxQSsd9aXOIgmmSpvZ/1yo46ra2ESYyqLcryaBZOghxy5qqOBjvCWP5JfkI8yl9rlxRgdLTTMCQQRcN2hdCg==", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2095,15 +2138,15 @@ } }, "node_modules/@config-plugins/detox": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@config-plugins/detox/-/detox-7.0.0.tgz", - "integrity": "sha512-uI7GU0g6JkzlKwjD61NP3EcMrjuIPbTEeByiSiWR3aJ7U+uf1xiQlTlHQSNQtcf3/MWfZj4ref/zyBma9c1muw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@config-plugins/detox/-/detox-8.0.0.tgz", + "integrity": "sha512-t6J1W2RH6UKc8vt87NHQf6JG3B/Lu6rvVF24n5cqw+jWy9TmcqWrgxkDttKrR3dW/a0cfo3xpwBWvakpPQXGjw==", "dev": true, "dependencies": { - "expo-build-properties": "~0.11.0" + "expo-build-properties": "~0.12.1" }, "peerDependencies": { - "expo": "^50" + "expo": "^51" } }, "node_modules/@egjs/hammerjs": { @@ -2295,39 +2338,41 @@ } }, "node_modules/@expo/cli": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.17.5.tgz", - "integrity": "sha512-9cMquL/5bBfV73CbZcWipk3KZSo8mBqdgvkoWCtEtnnlm/879ayxzMWjVIgT5yV4w+X7+N6KkBSUIIj4t9Xqew==", + "version": "0.18.25", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.18.25.tgz", + "integrity": "sha512-Kh0uZGCxwu58Pu7Jto9T/ABlBR7nkx8QC0Wv8pI3YtISyQZIKtbtNNeTPWYbVK1ddswKwtBUj+MNhKoDL49TLg==", "dependencies": { "@babel/runtime": "^7.20.0", "@expo/code-signing-certificates": "0.0.5", - "@expo/config": "~8.5.0", - "@expo/config-plugins": "~7.8.0", + "@expo/config": "~9.0.0-beta.0", + "@expo/config-plugins": "~8.0.8", "@expo/devcert": "^1.0.0", - "@expo/env": "~0.2.0", - "@expo/image-utils": "^0.4.0", - "@expo/json-file": "^8.2.37", - "@expo/metro-config": "~0.17.0", + "@expo/env": "~0.3.0", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@expo/metro-config": "~0.18.6", "@expo/osascript": "^2.0.31", - "@expo/package-manager": "^1.1.1", + "@expo/package-manager": "^1.5.0", "@expo/plist": "^0.1.0", - "@expo/prebuild-config": "6.7.4", + "@expo/prebuild-config": "7.0.8", "@expo/rudder-sdk-node": "1.1.1", - "@expo/spawn-async": "1.5.0", + "@expo/spawn-async": "^1.7.2", "@expo/xcpretty": "^4.3.0", - "@react-native/dev-middleware": "^0.73.6", + "@react-native/dev-middleware": "0.74.85", "@urql/core": "2.3.6", "@urql/exchange-retry": "0.3.0", "accepts": "^1.3.8", "arg": "5.0.2", "better-opn": "~3.0.2", + "bplist-creator": "0.0.7", "bplist-parser": "^0.3.1", - "cacache": "^15.3.0", + "cacache": "^18.0.2", "chalk": "^4.0.0", "ci-info": "^3.3.0", "connect": "^3.7.0", "debug": "^4.3.4", "env-editor": "^0.4.1", + "fast-glob": "^3.3.2", "find-yarn-workspace-root": "~2.0.0", "form-data": "^3.0.1", "freeport-async": "2.0.0", @@ -2345,7 +2390,6 @@ "lodash.debounce": "^4.0.8", "md5hex": "^1.0.0", "minimatch": "^3.0.4", - "minipass": "3.3.6", "node-fetch": "^2.6.7", "node-forge": "^1.3.1", "npm-package-arg": "^7.0.0", @@ -2361,7 +2405,7 @@ "resolve": "^1.22.2", "resolve-from": "^5.0.0", "resolve.exports": "^2.0.2", - "semver": "^7.5.3", + "semver": "^7.6.0", "send": "^0.18.0", "slugify": "^1.3.4", "source-map-support": "~0.5.21", @@ -2389,41 +2433,39 @@ } }, "node_modules/@expo/cli/node_modules/@expo/config": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.5.4.tgz", - "integrity": "sha512-ggOLJPHGzJSJHVBC1LzwXwR6qUn8Mw7hkc5zEKRIdhFRuIQ6s2FE4eOvP87LrNfDF7eZGa6tJQYsiHSmZKG+8Q==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.3.tgz", + "integrity": "sha512-eOTNM8eOC8gZNHgenySRlc/lwmYY1NOgvjwA8LHuvPT7/eUwD93zrxu3lPD1Cc/P6C/2BcVdfH4hf0tLmDxnsg==", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~7.8.2", - "@expo/config-types": "^50.0.0", - "@expo/json-file": "^8.2.37", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/json-file": "^8.3.0", "getenv": "^1.0.0", "glob": "7.1.6", "require-from-string": "^2.0.2", "resolve-from": "^5.0.0", - "semver": "7.5.3", + "semver": "^7.6.0", "slugify": "^1.3.4", "sucrase": "3.34.0" } }, "node_modules/@expo/cli/node_modules/@expo/config-plugins": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.8.4.tgz", - "integrity": "sha512-hv03HYxb/5kX8Gxv/BTI8TLc9L06WzqAfHRRXdbar4zkLcP2oTzvsLEF4/L/TIpD3rsnYa0KU42d0gWRxzPCJg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.8.tgz", + "integrity": "sha512-Fvu6IO13EUw0R9WeqxUO37FkM62YJBNcZb9DyJAOgMz7Ez/vaKQGEjKt9cwT+Q6uirtCATMgaq6VWAW7YW8xXw==", "dependencies": { - "@expo/config-types": "^50.0.0-alpha.1", - "@expo/fingerprint": "^0.6.0", + "@expo/config-types": "^51.0.0-unreleased", "@expo/json-file": "~8.3.0", "@expo/plist": "^0.1.0", "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", "chalk": "^4.1.2", "debug": "^4.3.1", "find-up": "~5.0.0", "getenv": "^1.0.0", "glob": "7.1.6", "resolve-from": "^5.0.0", - "semver": "^7.5.3", + "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", @@ -2434,6 +2476,7 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2450,14 +2493,15 @@ } }, "node_modules/@expo/cli/node_modules/@expo/config-types": { - "version": "50.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-50.0.0.tgz", - "integrity": "sha512-0kkhIwXRT6EdFDwn+zTg9R2MZIAEYGn1MVkyRohAd+C9cXOb5RA8WLQi7vuxKF9m1SMtNAUrf0pO+ENK0+/KSw==" + "version": "51.0.2", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.2.tgz", + "integrity": "sha512-IglkIoiDwJMY01lYkF/ZSBoe/5cR+O3+Gx6fpLFjLfgZGBTdyPkKa1g8NWoWQCk+D3cKL2MDbszT2DyRRB0YqQ==" }, "node_modules/@expo/cli/node_modules/@expo/config/node_modules/glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2473,26 +2517,12 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@expo/cli/node_modules/@expo/config/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@expo/cli/node_modules/@expo/image-utils": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.4.1.tgz", - "integrity": "sha512-EZb+VHSmw+a5s2hS9qksTcWylY0FDaIAVufcxoaRS9tHIXLjW5zcKW7Rhj9dSEbZbRVy9yXXdHKa3GQdUQIOFw==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.5.1.tgz", + "integrity": "sha512-U/GsFfFox88lXULmFJ9Shfl2aQGcwoKPF7fawSCLixIKtMCpsI+1r0h+5i0nQnmt9tHuzXZDL8+Dg1z6OhkI9A==", "dependencies": { - "@expo/spawn-async": "1.5.0", + "@expo/spawn-async": "^1.7.2", "chalk": "^4.0.0", "fs-extra": "9.0.0", "getenv": "^1.0.0", @@ -2500,7 +2530,7 @@ "node-fetch": "^2.6.0", "parse-png": "^2.1.0", "resolve-from": "^5.0.0", - "semver": "7.3.2", + "semver": "^7.6.0", "tempy": "0.3.0" } }, @@ -2518,17 +2548,6 @@ "node": ">=10" } }, - "node_modules/@expo/cli/node_modules/@expo/image-utils/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@expo/cli/node_modules/@expo/image-utils/node_modules/temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", @@ -2567,9 +2586,9 @@ } }, "node_modules/@expo/cli/node_modules/@expo/json-file": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.0.tgz", - "integrity": "sha512-yROUeXJXR5goagB8c3muFLCzLmdGOvoPpR5yDNaXrnTp4euNykr9yW0wWhJx4YVRTNOPtGBnEbbJBW+a9q+S6g==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.2", @@ -2577,12 +2596,12 @@ } }, "node_modules/@expo/cli/node_modules/@expo/package-manager": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.4.2.tgz", - "integrity": "sha512-LKdo/6y4W7llZ6ghsg1kdx2CeH/qR/c6QI/JI8oPUvppsZoeIYjSkdflce978fAMfR8IXoi0wt0jA2w0kWpwbg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.5.2.tgz", + "integrity": "sha512-IuA9XtGBilce0q8cyxtWINqbzMB1Fia0Yrug/O53HNuRSwQguV/iqjV68bsa4z8mYerePhcFgtvISWLAlNEbUA==", "dependencies": { - "@expo/json-file": "^8.2.37", - "@expo/spawn-async": "^1.5.0", + "@expo/json-file": "^8.3.0", + "@expo/spawn-async": "^1.7.2", "ansi-regex": "^5.0.0", "chalk": "^4.0.0", "find-up": "^5.0.0", @@ -2596,9 +2615,9 @@ } }, "node_modules/@expo/cli/node_modules/@expo/plist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.0.tgz", - "integrity": "sha512-xWD+8vIFif0wKyuqe3fmnmnSouXYucciZXFzS0ZD5OV9eSAS1RGQI5FaGGJ6zxJ4mpdy/4QzbLdBjnYE5vxA0g==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", "dependencies": { "@xmldom/xmldom": "~0.7.7", "base64-js": "^1.2.3", @@ -2606,19 +2625,20 @@ } }, "node_modules/@expo/cli/node_modules/@expo/prebuild-config": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.7.4.tgz", - "integrity": "sha512-x8EUdCa8DTMZ/dtEXjHAdlP+ljf6oSeSKNzhycXiHhpMSMG9jEhV28ocCwc6cKsjK5GziweEiHwvrj6+vsBlhA==", - "dependencies": { - "@expo/config": "~8.5.0", - "@expo/config-plugins": "~7.8.0", - "@expo/config-types": "^50.0.0-alpha.1", - "@expo/image-utils": "^0.4.0", - "@expo/json-file": "^8.2.37", + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-7.0.8.tgz", + "integrity": "sha512-wH9NVg6HiwF5y9x0TxiMEeBF+ITPGDXy5/i6OUheSrKpPgb0lF1Mwzl/f2fLPXBEpl+ZXOQ8LlLW32b7K9lrNg==", + "dependencies": { + "@expo/config": "~9.0.0-beta.0", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@react-native/normalize-colors": "0.74.85", "debug": "^4.3.1", "fs-extra": "^9.0.0", "resolve-from": "^5.0.0", - "semver": "7.5.3", + "semver": "^7.6.0", "xml2js": "0.6.0" }, "peerDependencies": { @@ -2639,29 +2659,15 @@ "node": ">=10" } }, - "node_modules/@expo/cli/node_modules/@expo/prebuild-config/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@expo/cli/node_modules/@expo/spawn-async": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", - "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", + "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", "dependencies": { - "cross-spawn": "^6.0.5" + "cross-spawn": "^7.0.3" }, "engines": { - "node": ">=4" + "node": ">=12" } }, "node_modules/@expo/cli/node_modules/@urql/core": { @@ -2702,6 +2708,14 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@expo/cli/node_modules/bplist-creator": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", + "integrity": "sha512-xp/tcaV3T5PCiaY04mXga7o/TE+t95gqeLmADeBI1CvZtdWTbgBt3uLpvh4UWtenKeBhCV6oVxGk38yZr2uYEA==", + "dependencies": { + "stream-buffers": "~2.2.0" + } + }, "node_modules/@expo/cli/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2761,29 +2775,6 @@ "node": ">= 6" } }, - "node_modules/@expo/cli/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/@expo/cli/node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/@expo/cli/node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -2792,6 +2783,21 @@ "node": ">=8" } }, + "node_modules/@expo/cli/node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/@expo/cli/node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -2838,6 +2844,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2853,6 +2860,17 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@expo/cli/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@expo/cli/node_modules/graphql": { "version": "15.8.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", @@ -2936,17 +2954,6 @@ "node": ">=4" } }, - "node_modules/@expo/cli/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@expo/cli/node_modules/mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", @@ -3049,14 +3056,6 @@ "node": ">=4" } }, - "node_modules/@expo/cli/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" - } - }, "node_modules/@expo/cli/node_modules/picomatch": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", @@ -3089,12 +3088,9 @@ } }, "node_modules/@expo/cli/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -3102,34 +3098,15 @@ "node": ">=10" } }, - "node_modules/@expo/cli/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "node_modules/@expo/cli/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { - "shebang-regex": "^1.0.0" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@expo/cli/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@expo/cli/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "node": ">=6" } }, "node_modules/@expo/cli/node_modules/strip-ansi/node_modules/ansi-regex": { @@ -3165,6 +3142,7 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3231,27 +3209,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/cli/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, "node_modules/@expo/cli/node_modules/wonka": { "version": "4.0.15", "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==" }, - "node_modules/@expo/cli/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@expo/code-signing-certificates": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", @@ -3455,9 +3417,9 @@ "dev": true }, "node_modules/@expo/devcert": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.0.tgz", - "integrity": "sha512-ghUVhNJQOCTdQckSGTHctNp/0jzvVoMMkVh+6SHn+TZj8sU15U/npXIDt8NtQp0HedlPaCgkVdMu8Sacne0aEA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.2.tgz", + "integrity": "sha512-FyWghLu7rUaZEZSTLt/XNRukm0c9GFfwP0iFaswoDWpV6alvVg+zRAfCLdIVQEz1SVcQ3zo1hMZFDrnKGvkCuQ==", "dependencies": { "application-config-path": "^0.1.0", "command-exists": "^1.2.4", @@ -3465,7 +3427,7 @@ "eol": "^0.9.1", "get-port": "^3.2.0", "glob": "^7.1.2", - "lodash": "^4.17.4", + "lodash": "^4.17.21", "mkdirp": "^0.5.1", "password-prompt": "^1.0.4", "rimraf": "^2.6.2", @@ -3486,6 +3448,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -3692,14 +3655,14 @@ "dev": true }, "node_modules/@expo/env": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.2.1.tgz", - "integrity": "sha512-deZmRS7Dvp18VM8s559dq/ZjPlV1D9vtLoLXwHmCK/JYOvtNptdKsfxcWjI7ewmo6ln2PqgNI9HRI74q6Wk2eA==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.3.0.tgz", + "integrity": "sha512-OtB9XVHWaXidLbHvrVDeeXa09yvTl3+IQN884sO6PhIi2/StXfgSH/9zC7IvzrDB8kW3EBJ1PPLuCUJ2hxAT7Q==", "dependencies": { "chalk": "^4.0.0", "debug": "^4.3.4", - "dotenv": "~16.0.3", - "dotenv-expand": "~10.0.0", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", "getenv": "^1.0.0" } }, @@ -3748,97 +3711,18 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@expo/env/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/env/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/fingerprint": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.6.0.tgz", - "integrity": "sha512-KfpoVRTMwMNJ/Cf5o+Ou8M/Y0EGSTqK+rbi70M2Y0K2qgWNfMJ1gm6sYO9uc8lcTr7YSYM1Rme3dk7QXhpScNA==", - "dependencies": { - "@expo/spawn-async": "^1.5.0", - "chalk": "^4.1.2", - "debug": "^4.3.4", - "find-up": "^5.0.0", - "minimatch": "^3.0.4", - "p-limit": "^3.1.0", - "resolve-from": "^5.0.0" - }, - "bin": { - "fingerprint": "bin/cli.js" - } - }, - "node_modules/@expo/fingerprint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@expo/fingerprint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@expo/fingerprint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/@expo/env/node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://dotenvx.com" } }, - "node_modules/@expo/fingerprint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@expo/fingerprint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@expo/fingerprint/node_modules/has-flag": { + "node_modules/@expo/env/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -3846,18 +3730,7 @@ "node": ">=8" } }, - "node_modules/@expo/fingerprint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@expo/fingerprint/node_modules/supports-color": { + "node_modules/@expo/env/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -4115,19 +3988,18 @@ } }, "node_modules/@expo/metro-config": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.17.4.tgz", - "integrity": "sha512-PxqDMuVjXQeboa6Aj8kNj4iTxIpwpfoYlF803qOjf1LE1ePlREnWNwqy65ESCBnCmekYIO5hhm1Nksa+xCvuyg==", + "version": "0.18.9", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.18.9.tgz", + "integrity": "sha512-kcqT/wuO43zxuFeR5AR/pMuq/O9qtIyuTI1wYvBY97blHAYU/wfPJKW3xFL14fDkPqQOc87hEEhjlJiXoebvcw==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", - "@expo/config": "~8.5.0", - "@expo/env": "~0.2.0", + "@expo/config": "~9.0.0-beta.0", + "@expo/env": "~0.3.0", "@expo/json-file": "~8.3.0", "@expo/spawn-async": "^1.7.2", - "babel-preset-fbjs": "^3.4.0", "chalk": "^4.1.0", "debug": "^4.3.2", "find-yarn-workspace-root": "~2.0.0", @@ -4137,11 +4009,7 @@ "jsc-safe-url": "^0.2.4", "lightningcss": "~1.19.0", "postcss": "~8.4.32", - "resolve-from": "^5.0.0", - "sucrase": "3.34.0" - }, - "peerDependencies": { - "@react-native/babel-preset": "*" + "resolve-from": "^5.0.0" } }, "node_modules/@expo/metro-config/node_modules/@babel/code-frame": { @@ -4153,41 +4021,39 @@ } }, "node_modules/@expo/metro-config/node_modules/@expo/config": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.5.4.tgz", - "integrity": "sha512-ggOLJPHGzJSJHVBC1LzwXwR6qUn8Mw7hkc5zEKRIdhFRuIQ6s2FE4eOvP87LrNfDF7eZGa6tJQYsiHSmZKG+8Q==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.3.tgz", + "integrity": "sha512-eOTNM8eOC8gZNHgenySRlc/lwmYY1NOgvjwA8LHuvPT7/eUwD93zrxu3lPD1Cc/P6C/2BcVdfH4hf0tLmDxnsg==", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~7.8.2", - "@expo/config-types": "^50.0.0", - "@expo/json-file": "^8.2.37", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/json-file": "^8.3.0", "getenv": "^1.0.0", "glob": "7.1.6", "require-from-string": "^2.0.2", "resolve-from": "^5.0.0", - "semver": "7.5.3", + "semver": "^7.6.0", "slugify": "^1.3.4", "sucrase": "3.34.0" } }, "node_modules/@expo/metro-config/node_modules/@expo/config-plugins": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.8.4.tgz", - "integrity": "sha512-hv03HYxb/5kX8Gxv/BTI8TLc9L06WzqAfHRRXdbar4zkLcP2oTzvsLEF4/L/TIpD3rsnYa0KU42d0gWRxzPCJg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.8.tgz", + "integrity": "sha512-Fvu6IO13EUw0R9WeqxUO37FkM62YJBNcZb9DyJAOgMz7Ez/vaKQGEjKt9cwT+Q6uirtCATMgaq6VWAW7YW8xXw==", "dependencies": { - "@expo/config-types": "^50.0.0-alpha.1", - "@expo/fingerprint": "^0.6.0", + "@expo/config-types": "^51.0.0-unreleased", "@expo/json-file": "~8.3.0", "@expo/plist": "^0.1.0", "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", "chalk": "^4.1.2", "debug": "^4.3.1", "find-up": "~5.0.0", "getenv": "^1.0.0", "glob": "7.1.6", "resolve-from": "^5.0.0", - "semver": "^7.5.3", + "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", @@ -4198,6 +4064,7 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4214,14 +4081,15 @@ } }, "node_modules/@expo/metro-config/node_modules/@expo/config-types": { - "version": "50.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-50.0.0.tgz", - "integrity": "sha512-0kkhIwXRT6EdFDwn+zTg9R2MZIAEYGn1MVkyRohAd+C9cXOb5RA8WLQi7vuxKF9m1SMtNAUrf0pO+ENK0+/KSw==" + "version": "51.0.2", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.2.tgz", + "integrity": "sha512-IglkIoiDwJMY01lYkF/ZSBoe/5cR+O3+Gx6fpLFjLfgZGBTdyPkKa1g8NWoWQCk+D3cKL2MDbszT2DyRRB0YqQ==" }, "node_modules/@expo/metro-config/node_modules/@expo/config/node_modules/glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4238,9 +4106,9 @@ } }, "node_modules/@expo/metro-config/node_modules/@expo/json-file": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.0.tgz", - "integrity": "sha512-yROUeXJXR5goagB8c3muFLCzLmdGOvoPpR5yDNaXrnTp4euNykr9yW0wWhJx4YVRTNOPtGBnEbbJBW+a9q+S6g==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.2", @@ -4248,9 +4116,9 @@ } }, "node_modules/@expo/metro-config/node_modules/@expo/plist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.0.tgz", - "integrity": "sha512-xWD+8vIFif0wKyuqe3fmnmnSouXYucciZXFzS0ZD5OV9eSAS1RGQI5FaGGJ6zxJ4mpdy/4QzbLdBjnYE5vxA0g==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", "dependencies": { "@xmldom/xmldom": "~0.7.7", "base64-js": "^1.2.3", @@ -4348,6 +4216,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4371,17 +4240,6 @@ "node": ">=8" } }, - "node_modules/@expo/metro-config/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@expo/metro-config/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -4394,12 +4252,9 @@ } }, "node_modules/@expo/metro-config/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -4432,6 +4287,7 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4458,15 +4314,10 @@ "node": ">=8" } }, - "node_modules/@expo/metro-config/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@expo/metro-runtime": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.1.3.tgz", - "integrity": "sha512-u1CaQJJlSgvxBB5NJ6YMVvSDTTRzjT71dHpEBnKPZhpFv5ebVry52FZ2sEeEEA6mHG5zGxWXmHImW3hNKHh8EA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.2.1.tgz", + "integrity": "sha512-L7xNo5SmK+rcuXDm/+VBBImpA7FZsVB+m/rNr3fNl5or+1+yrZe99ViF7LZ8DOoVqAqcb4aCAXvGrP2JNYo1/Q==", "peerDependencies": { "react-native": "*" } @@ -4877,11 +4728,11 @@ "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==" }, "node_modules/@expo/server": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.3.1.tgz", - "integrity": "sha512-cCKyVA2IR9J4hDFPXzj3L08+Ngd/7z2F+JtdW0NLy03qShXBI5NSEEcaiHtjrgsLXPDe9PBw5Xgsfmxuduyggg==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.4.4.tgz", + "integrity": "sha512-q9ADBzMN5rZ/fgQ2mz5YIJuZ8gelQlhG2CQqToD+UvBLZvbaHCNxTTSs2KI1LzJvAaW5CWgWMatGvGF6iUQ0LA==", "dependencies": { - "@remix-run/node": "^1.19.3", + "@remix-run/node": "^2.7.2", "abort-controller": "^3.0.0", "debug": "^4.3.4", "source-map-support": "~0.5.21" @@ -4965,9 +4816,12 @@ "dev": true }, "node_modules/@expo/vector-icons": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.0.tgz", - "integrity": "sha512-5orm59pdnBQlovhU9k4DbjMUZBHNlku7IRgFY56f7pcaaCnXq9yaLJoOQl9sMwNdFzf4gnkTyHmR5uN10mI9rA==" + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.2.tgz", + "integrity": "sha512-70LpmXQu4xa8cMxjp1fydgRPsalefnHaXLzIwaHMEzcZhnyjw2acZz8azRrZOslPVAWlxItOa2Dd7WtD/kI+CA==", + "dependencies": { + "prop-types": "^15.8.1" + } }, "node_modules/@expo/xcpretty": { "version": "4.3.1", @@ -5071,10 +4925,10 @@ "node": ">=8" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "node_modules/@googlemaps/polyline-codec": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/@googlemaps/polyline-codec/-/polyline-codec-1.0.28.tgz", + "integrity": "sha512-m7rh8sbxlrHvebXEweBHX8r1uPtToPRYxWDD6p6k2YG8hyhBe0Wi6xRUVFpxpEseMNgF+OBotFQC5senj8K7TQ==" }, "node_modules/@gorhom/bottom-sheet": { "version": "4.5.1", @@ -5193,7 +5047,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -5210,7 +5063,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -5222,7 +5074,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "engines": { "node": ">=12" }, @@ -5234,7 +5085,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -5251,7 +5101,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -5266,7 +5115,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -5420,13 +5268,13 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -5441,20 +5289,20 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -5463,9 +5311,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -5551,32 +5399,20 @@ } }, "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dependencies": { - "@gar/promisify": "^1.0.1", "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/fs/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -5584,35 +5420,6 @@ "node": ">=10" } }, - "node_modules/@npmcli/fs/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@oclif/core": { "version": "1.23.2", "resolved": "https://registry.npmjs.org/@oclif/core/-/core-1.23.2.tgz", @@ -5904,7 +5711,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true, "engines": { "node": ">=14" @@ -5946,9 +5752,9 @@ } }, "node_modules/@react-native-async-storage/async-storage": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz", - "integrity": "sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag==", + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.23.1.tgz", + "integrity": "sha512-Qd2kQ3yi6Y3+AcUlrHxSLlnBvpdCEMVGFlVBneVOjaFaPU61g1huc38g339ysXspwY1QZA2aNhrk/KlHGO+ewA==", "dependencies": { "merge-options": "^3.0.4" }, @@ -5957,19 +5763,18 @@ } }, "node_modules/@react-native-community/cli": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.2.tgz", - "integrity": "sha512-WgoUWwLDcf/G1Su2COUUVs3RzAwnV/vUTdISSpAUGgSc57mPabaAoUctKTnfYEhCnE3j02k3VtaVPwCAFRO3TQ==", - "dependencies": { - "@react-native-community/cli-clean": "12.3.2", - "@react-native-community/cli-config": "12.3.2", - "@react-native-community/cli-debugger-ui": "12.3.2", - "@react-native-community/cli-doctor": "12.3.2", - "@react-native-community/cli-hermes": "12.3.2", - "@react-native-community/cli-plugin-metro": "12.3.2", - "@react-native-community/cli-server-api": "12.3.2", - "@react-native-community/cli-tools": "12.3.2", - "@react-native-community/cli-types": "12.3.2", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.9.tgz", + "integrity": "sha512-hFJL4cgLPxncJJd/epQ4dHnMg5Jy/7Q56jFvA3MHViuKpzzfTCJCB+pGY54maZbtym53UJON9WTGpM3S81UfjQ==", + "dependencies": { + "@react-native-community/cli-clean": "13.6.9", + "@react-native-community/cli-config": "13.6.9", + "@react-native-community/cli-debugger-ui": "13.6.9", + "@react-native-community/cli-doctor": "13.6.9", + "@react-native-community/cli-hermes": "13.6.9", + "@react-native-community/cli-server-api": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", + "@react-native-community/cli-types": "13.6.9", "chalk": "^4.1.2", "commander": "^9.4.1", "deepmerge": "^4.3.0", @@ -5981,20 +5786,21 @@ "semver": "^7.5.2" }, "bin": { - "react-native": "build/bin.js" + "rnc-cli": "build/bin.js" }, "engines": { "node": ">=18" } }, "node_modules/@react-native-community/cli-clean": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.2.tgz", - "integrity": "sha512-90k2hCX0ddSFPT7EN7h5SZj0XZPXP0+y/++v262hssoey3nhurwF57NGWN0XAR0o9BSW7+mBfeInfabzDraO6A==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-13.6.9.tgz", + "integrity": "sha512-7Dj5+4p9JggxuVNOjPbduZBAP1SUgNhLKVw5noBUzT/3ZpUZkDM+RCSwyoyg8xKWoE4OrdUAXwAFlMcFDPKykA==", "dependencies": { - "@react-native-community/cli-tools": "12.3.2", + "@react-native-community/cli-tools": "13.6.9", "chalk": "^4.1.2", - "execa": "^5.0.0" + "execa": "^5.0.0", + "fast-glob": "^3.3.2" } }, "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { @@ -6064,6 +5870,21 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/@react-native-community/cli-clean/node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/@react-native-community/cli-clean/node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -6075,6 +5896,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@react-native-community/cli-clean/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -6106,15 +5938,15 @@ } }, "node_modules/@react-native-community/cli-config": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.2.tgz", - "integrity": "sha512-UUCzDjQgvAVL/57rL7eOuFUhd+d+6qfM7V8uOegQFeFEmSmvUUDLYoXpBa5vAK9JgQtSqMBJ1Shmwao+/oElxQ==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-13.6.9.tgz", + "integrity": "sha512-rFfVBcNojcMm+KKHE/xqpqXg8HoKl4EC7bFHUrahMJ+y/tZll55+oX/PGG37rzB8QzP2UbMQ19DYQKC1G7kXeg==", "dependencies": { - "@react-native-community/cli-tools": "12.3.2", + "@react-native-community/cli-tools": "13.6.9", "chalk": "^4.1.2", "cosmiconfig": "^5.1.0", "deepmerge": "^4.3.0", - "glob": "^7.1.3", + "fast-glob": "^3.3.2", "joi": "^17.2.1" } }, @@ -6163,16 +5995,42 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@react-native-community/cli-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@react-native-community/cli-config/node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, - "node_modules/@react-native-community/cli-config/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/@react-native-community/cli-config/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@react-native-community/cli-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-config/node_modules/supports-color": { + "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { @@ -6183,29 +6041,29 @@ } }, "node_modules/@react-native-community/cli-debugger-ui": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.2.tgz", - "integrity": "sha512-nSWQUL+51J682DlfcC1bjkUbQbGvHCC25jpqTwHIjmmVjYCX1uHuhPSqQKgPNdvtfOkrkACxczd7kVMmetxY2Q==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.9.tgz", + "integrity": "sha512-TkN7IdFmGPPvTpAo3nCAH9uwGCPxWBEAwpqEZDrq0NWllI7Tdie8vDpGdrcuCcKalmhq6OYnkXzeBah7O1Ztpw==", "dependencies": { "serve-static": "^1.13.1" } }, "node_modules/@react-native-community/cli-doctor": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.2.tgz", - "integrity": "sha512-GrAabdY4qtBX49knHFvEAdLtCjkmndjTeqhYO6BhsbAeKOtspcLT/0WRgdLIaKODRa61ADNB3K5Zm4dU0QrZOg==", - "dependencies": { - "@react-native-community/cli-config": "12.3.2", - "@react-native-community/cli-platform-android": "12.3.2", - "@react-native-community/cli-platform-ios": "12.3.2", - "@react-native-community/cli-tools": "12.3.2", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-13.6.9.tgz", + "integrity": "sha512-5quFaLdWFQB+677GXh5dGU9I5eg2z6Vg4jOX9vKnc9IffwyIFAyJfCZHrxLSRPDGNXD7biDQUdoezXYGwb6P/A==", + "dependencies": { + "@react-native-community/cli-config": "13.6.9", + "@react-native-community/cli-platform-android": "13.6.9", + "@react-native-community/cli-platform-apple": "13.6.9", + "@react-native-community/cli-platform-ios": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", "chalk": "^4.1.2", "command-exists": "^1.2.8", "deepmerge": "^4.3.0", "envinfo": "^7.10.0", "execa": "^5.0.0", "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5", "node-stream-zip": "^1.9.1", "ora": "^5.4.1", "semver": "^7.5.2", @@ -6260,9 +6118,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-doctor/node_modules/envinfo": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", - "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "bin": { "envinfo": "dist/cli.js" }, @@ -6311,17 +6169,6 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@react-native-community/cli-doctor/node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6367,12 +6214,9 @@ } }, "node_modules/@react-native-community/cli-doctor/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -6410,21 +6254,15 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@react-native-community/cli-hermes": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.2.tgz", - "integrity": "sha512-SL6F9O8ghp4ESBFH2YAPLtIN39jdnvGBKnK4FGKpDCjtB3DnUmDsGFlH46S+GGt5M6VzfG2eeKEOKf3pZ6jUzA==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-13.6.9.tgz", + "integrity": "sha512-GvwiwgvFw4Ws+krg2+gYj8sR3g05evmNjAHkKIKMkDTJjZ8EdyxbkifRUs1ZCq3TMZy2oeblZBXCJVOH4W7ZbA==", "dependencies": { - "@react-native-community/cli-platform-android": "12.3.2", - "@react-native-community/cli-tools": "12.3.2", + "@react-native-community/cli-platform-android": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", "chalk": "^4.1.2", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" + "hermes-profile-transformer": "^0.0.6" } }, "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { @@ -6492,15 +6330,15 @@ } }, "node_modules/@react-native-community/cli-platform-android": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.2.tgz", - "integrity": "sha512-MZ5nO8yi/N+Fj2i9BJcJ9C/ez+9/Ir7lQt49DWRo9YDmzye66mYLr/P2l/qxsixllbbDi7BXrlLpxaEhMrDopg==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.9.tgz", + "integrity": "sha512-9KsYGdr08QhdvT3Ht7e8phQB3gDX9Fs427NJe0xnoBh+PDPTI2BD5ks5ttsH8CzEw8/P6H8tJCHq6hf2nxd9cw==", "dependencies": { - "@react-native-community/cli-tools": "12.3.2", + "@react-native-community/cli-tools": "13.6.9", "chalk": "^4.1.2", "execa": "^5.0.0", + "fast-glob": "^3.3.2", "fast-xml-parser": "^4.2.4", - "glob": "^7.1.3", "logkitty": "^0.7.1" } }, @@ -6571,6 +6409,21 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/@react-native-community/cli-platform-android/node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/@react-native-community/cli-platform-android/node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -6582,6 +6435,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@react-native-community/cli-platform-android/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -6612,20 +6476,20 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.2.tgz", - "integrity": "sha512-OcWEAbkev1IL6SUiQnM6DQdsvfsKZhRZtoBNSj9MfdmwotVZSOEZJ+IjZ1FR9ChvMWayO9ns/o8LgoQxr1ZXeg==", + "node_modules/@react-native-community/cli-platform-apple": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.9.tgz", + "integrity": "sha512-KoeIHfhxMhKXZPXmhQdl6EE+jGKWwoO9jUVWgBvibpVmsNjo7woaG/tfJMEWfWF3najX1EkQAoJWpCDBMYWtlA==", "dependencies": { - "@react-native-community/cli-tools": "12.3.2", + "@react-native-community/cli-tools": "13.6.9", "chalk": "^4.1.2", "execa": "^5.0.0", + "fast-glob": "^3.3.2", "fast-xml-parser": "^4.0.12", - "glob": "^7.1.3", "ora": "^5.4.1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -6639,7 +6503,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/chalk": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -6654,7 +6518,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/color-convert": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -6665,12 +6529,12 @@ "node": ">=7.0.0" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/color-name": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/execa": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", @@ -6692,7 +6556,22 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/get-stream": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", @@ -6703,7 +6582,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/has-flag": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -6711,7 +6601,7 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/npm-run-path": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", @@ -6722,7 +6612,7 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/ora": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", @@ -6744,7 +6634,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/supports-color": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -6755,25 +6645,28 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-plugin-metro": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.2.tgz", - "integrity": "sha512-FpFBwu+d2E7KRhYPTkKvQsWb2/JKsJv+t1tcqgQkn+oByhp+qGyXBobFB8/R3yYvRRDCSDhS+atWTJzk9TjM8g==" + "node_modules/@react-native-community/cli-platform-ios": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.9.tgz", + "integrity": "sha512-CiUcHlGs8vE0CAB4oi1f+dzniqfGuhWPNrDvae2nm8dewlahTBwIcK5CawyGezjcJoeQhjBflh9vloska+nlnw==", + "dependencies": { + "@react-native-community/cli-platform-apple": "13.6.9" + } }, "node_modules/@react-native-community/cli-server-api": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.2.tgz", - "integrity": "sha512-iwa7EO9XFA/OjI5pPLLpI/6mFVqv8L73kNck3CNOJIUCCveGXBKK0VMyOkXaf/BYnihgQrXh+x5cxbDbggr7+Q==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-13.6.9.tgz", + "integrity": "sha512-W8FSlCPWymO+tlQfM3E0JmM8Oei5HZsIk5S0COOl0MRi8h0NmHI4WSTF2GCfbFZkcr2VI/fRsocoN8Au4EZAug==", "dependencies": { - "@react-native-community/cli-debugger-ui": "12.3.2", - "@react-native-community/cli-tools": "12.3.2", + "@react-native-community/cli-debugger-ui": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", "compression": "^1.7.1", "connect": "^3.6.5", "errorhandler": "^1.5.1", "nocache": "^3.0.1", "pretty-format": "^26.6.2", "serve-static": "^1.13.1", - "ws": "^7.5.1" + "ws": "^6.2.2" } }, "node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { @@ -6883,32 +6776,21 @@ } }, "node_modules/@react-native-community/cli-server-api/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "dependencies": { + "async-limiter": "~1.0.0" } }, "node_modules/@react-native-community/cli-tools": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.2.tgz", - "integrity": "sha512-nDH7vuEicHI2TI0jac/DjT3fr977iWXRdgVAqPZFFczlbs7A8GQvEdGnZ1G8dqRUmg+kptw0e4hwczAOG89JzQ==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-13.6.9.tgz", + "integrity": "sha512-OXaSjoN0mZVw3nrAwcY1PC0uMfyTd9fz7Cy06dh+EJc+h0wikABsVRzV8cIOPrVV+PPEEXE0DBrH20T2puZzgQ==", "dependencies": { "appdirsjs": "^1.2.4", "chalk": "^4.1.2", + "execa": "^5.0.0", "find-up": "^5.0.0", "mime": "^2.4.1", "node-fetch": "^2.6.0", @@ -6964,6 +6846,39 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/@react-native-community/cli-tools/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -6980,17 +6895,6 @@ "node": ">=4" } }, - "node_modules/@react-native-community/cli-tools/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@react-native-community/cli-tools/node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -7002,6 +6906,17 @@ "node": ">=4.0.0" } }, + "node_modules/@react-native-community/cli-tools/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-tools/node_modules/open": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", @@ -7036,12 +6951,9 @@ } }, "node_modules/@react-native-community/cli-tools/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -7060,15 +6972,10 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-tools/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@react-native-community/cli-types": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.2.tgz", - "integrity": "sha512-9D0UEFqLW8JmS16mjHJxUJWX8E+zJddrHILSH8AJHZ0NNHv4u2DXKdb0wFLMobFxGNxPT+VSOjc60fGvXzWHog==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-13.6.9.tgz", + "integrity": "sha512-RLxDppvRxXfs3hxceW/mShi+6o5yS+kFPnPqZTaMKKR5aSg7LwDpLQW4K2D22irEG8e6RKDkZUeH9aL3vO2O0w==", "dependencies": { "joi": "^17.2.1" } @@ -7211,17 +7118,6 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@react-native-community/cli/node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -7259,12 +7155,9 @@ } }, "node_modules/@react-native-community/cli/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -7291,48 +7184,44 @@ "node": ">= 4.0.0" } }, - "node_modules/@react-native-community/cli/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@react-native-segmented-control/segmented-control": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@react-native-segmented-control/segmented-control/-/segmented-control-2.4.1.tgz", - "integrity": "sha512-c8Q7TP14CD6vJ38VO5SWoIcxfwLPIz/4zRKJnJOJ0xKkMxkrUu089m86Y0dSvo+T3c1NQyvBFRtKWrPqbqG6tg==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@react-native-segmented-control/segmented-control/-/segmented-control-2.5.2.tgz", + "integrity": "sha512-Rm+i7cI/ztZyYLUXzzfiyoe44m3JxAix82qS2Av/DkPWCR1bgfkxtrm6OZ06p4/2hqp4RvtMftxQiHGr/GDPew==", "peerDependencies": { "react": ">=16.0", "react-native": ">=0.62" } }, "node_modules/@react-native/assets-registry": { - "version": "0.73.1", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.73.1.tgz", - "integrity": "sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg==", + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.85.tgz", + "integrity": "sha512-59YmIQxfGDw4aP9S/nAM+sjSFdW8fUP6fsqczCcXgL2YVEjyER9XCaUT0J1K+PdHep8pi05KUgIKUds8P3jbmA==", "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.73.4", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz", - "integrity": "sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==", + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.85.tgz", + "integrity": "sha512-48TSDclRB5OMXiImiJkLxyCfRyLsqkCgI8buugCZzvXcYslfV7gCvcyFyQldtcOmerV+CK4RAj7QS4hmB5Mr8Q==", "dependencies": { - "@react-native/codegen": "0.73.3" + "@react-native/codegen": "0.74.85" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset": { - "version": "0.73.21", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.21.tgz", - "integrity": "sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==", + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.85.tgz", + "integrity": "sha512-yMHUlN8INbK5BBwiBuQMftdWkpm1IgCsoJTKcGD2OpSgZhwwm8RUSvGhdRMzB2w7bsqqBmaEMleGtW6aCR7B9w==", "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-logical-assignment-operators": "^7.18.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", @@ -7368,7 +7257,7 @@ "@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.4", + "@react-native/babel-plugin-codegen": "0.74.85", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" }, @@ -7380,13 +7269,13 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.73.3", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz", - "integrity": "sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==", + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.85.tgz", + "integrity": "sha512-N7QwoS4Hq/uQmoH83Ewedy6D0M7xbQsOU3OMcQf0eY3ltQ7S2hd9/R4UTalQWRn1OUJfXR6OG12QJ4FStKgV6Q==", "dependencies": { "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", "glob": "^7.1.1", + "hermes-parser": "0.19.1", "invariant": "^2.2.4", "jscodeshift": "^0.14.0", "mkdirp": "^0.5.1", @@ -7400,20 +7289,21 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.73.16", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.16.tgz", - "integrity": "sha512-eNH3v3qJJF6f0n/Dck90qfC9gVOR4coAXMTdYECO33GfgjTi+73vf/SBqlXw9HICH/RNZYGPM3wca4FRF7TYeQ==", - "dependencies": { - "@react-native-community/cli-server-api": "12.3.2", - "@react-native-community/cli-tools": "12.3.2", - "@react-native/dev-middleware": "0.73.7", - "@react-native/metro-babel-transformer": "0.73.15", + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.85.tgz", + "integrity": "sha512-ODzND33eA2owAY3g9jgCdqB+BjAh8qJ7dvmSotXgrgDYr3MJMpd8gvHTIPe2fg4Kab+wk8uipRhrE0i0RYMwtQ==", + "dependencies": { + "@react-native-community/cli-server-api": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", + "@react-native/dev-middleware": "0.74.85", + "@react-native/metro-babel-transformer": "0.74.85", "chalk": "^4.0.0", "execa": "^5.1.1", "metro": "^0.80.3", "metro-config": "^0.80.3", "metro-core": "^0.80.3", "node-fetch": "^2.2.0", + "querystring": "^0.2.1", "readline": "^1.3.0" }, "engines": { @@ -7529,28 +7419,31 @@ } }, "node_modules/@react-native/debugger-frontend": { - "version": "0.73.3", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.73.3.tgz", - "integrity": "sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw==", + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.85.tgz", + "integrity": "sha512-gUIhhpsYLUTYWlWw4vGztyHaX/kNlgVspSvKe2XaPA7o3jYKUoNLc3Ov7u70u/MBWfKdcEffWq44eSe3j3s5JQ==", "engines": { "node": ">=18" } }, "node_modules/@react-native/dev-middleware": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.7.tgz", - "integrity": "sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg==", + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.85.tgz", + "integrity": "sha512-BRmgCK5vnMmHaKRO+h8PKJmHHH3E6JFuerrcfE3wG2eZ1bcSr+QTu8DAlpxsDWvJvHpCi8tRJGauxd+Ssj/c7w==", "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.73.3", + "@react-native/debugger-frontend": "0.74.85", + "@rnx-kit/chromium-edge-launcher": "^1.0.0", "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^1.0.0", "connect": "^3.6.5", "debug": "^2.2.0", "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", "open": "^7.0.3", + "selfsigned": "^2.4.1", "serve-static": "^1.13.1", - "temp-dir": "^2.0.0" + "temp-dir": "^2.0.0", + "ws": "^6.2.2" }, "engines": { "node": ">=18" @@ -7584,30 +7477,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, "node_modules/@react-native/gradle-plugin": { - "version": "0.73.4", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz", - "integrity": "sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg==", + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.85.tgz", + "integrity": "sha512-1VQSLukJzaVMn1MYcs8Weo1nUW8xCas2XU1KuoV7OJPk6xPnEBFJmapmEGP5mWeEy7kcTXJmddEgy1wwW0tcig==", "engines": { "node": ">=18" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.73.1", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.73.1.tgz", - "integrity": "sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g==", + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.85.tgz", + "integrity": "sha512-gp4Rg9le3lVZeW7Cie6qLfekvRKZuhJ3LKgi1SFB4N154z1wIclypAJXVXgWBsy8JKJfTwRI+sffC4qZDlvzrg==", "engines": { "node": ">=18" } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.73.15", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.15.tgz", - "integrity": "sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw==", + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.85.tgz", + "integrity": "sha512-JIrXqEwhTvWPtGArgMptIPGstMdXQIkwSjKVYt+7VC4a9Pw1GurIWanIJheEW6ZuCVvTc0VZkwglFz9JVjzDjA==", "dependencies": { "@babel/core": "^7.20.0", - "@react-native/babel-preset": "0.73.21", - "hermes-parser": "0.15.0", + "@react-native/babel-preset": "0.74.85", + "hermes-parser": "0.19.1", "nullthrows": "^1.1.1" }, "engines": { @@ -7623,9 +7524,9 @@ "integrity": "sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==" }, "node_modules/@react-native/normalize-colors": { - "version": "0.73.2", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz", - "integrity": "sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==" + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz", + "integrity": "sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw==" }, "node_modules/@react-native/virtualized-lists": { "version": "0.72.8", @@ -7745,46 +7646,61 @@ } }, "node_modules/@remix-run/node": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-1.19.3.tgz", - "integrity": "sha512-z5qrVL65xLXIUpU4mkR4MKlMeKARLepgHAk4W5YY3IBXOreRqOGUC70POViYmY7x38c2Ia1NwqL80H+0h7jbMw==", - "dependencies": { - "@remix-run/server-runtime": "1.19.3", - "@remix-run/web-fetch": "^4.3.6", - "@remix-run/web-file": "^3.0.3", - "@remix-run/web-stream": "^1.0.4", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-2.10.3.tgz", + "integrity": "sha512-LBqsgADJKW7tYdJZZi2wu20gfMm6UcOXbvb5U70P2jCNxjJvuIw1gXVvNXRJKAdxPKLonjm8cSpfoI6HeQKEDg==", + "dependencies": { + "@remix-run/server-runtime": "2.10.3", + "@remix-run/web-fetch": "^4.4.2", "@web3-storage/multipart-parser": "^1.0.0", - "abort-controller": "^3.0.0", "cookie-signature": "^1.1.0", "source-map-support": "^0.5.21", - "stream-slice": "^0.1.2" + "stream-slice": "^0.1.2", + "undici": "^6.11.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" + }, + "peerDependencies": { + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@remix-run/router": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz", - "integrity": "sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.18.0.tgz", + "integrity": "sha512-L3jkqmqoSVBVKHfpGZmLrex0lxR5SucGA0sUfFzGctehw+S/ggL9L/0NnC5mw6P8HUWpFZ3nQw3cRApjjWx9Sw==", "engines": { - "node": ">=14" + "node": ">=14.0.0" } }, "node_modules/@remix-run/server-runtime": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-1.19.3.tgz", - "integrity": "sha512-KzQ+htUsKqpBgKE2tWo7kIIGy3MyHP58Io/itUPvV+weDjApwr9tQr9PZDPA3yAY6rAzLax7BU0NMSYCXWFY5A==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-2.10.3.tgz", + "integrity": "sha512-vUl5jONUI6Lj0ICg9FSRFhoPzQdZ/7dpT1m7ID13DF5BEeF3t/9uCJS61XXWgQ/JEu7YRiwvZiwSRTrgM7zeWw==", "dependencies": { - "@remix-run/router": "1.7.2", - "@types/cookie": "^0.4.1", + "@remix-run/router": "1.18.0", + "@types/cookie": "^0.6.0", "@web3-storage/multipart-parser": "^1.0.0", - "cookie": "^0.4.1", + "cookie": "^0.6.0", "set-cookie-parser": "^2.4.8", - "source-map": "^0.7.3" + "source-map": "^0.7.3", + "turbo-stream": "2.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" + }, + "peerDependencies": { + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@remix-run/web-blob": { @@ -7838,6 +7754,52 @@ "web-streams-polyfill": "^3.1.1" } }, + "node_modules/@rnx-kit/chromium-edge-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", + "integrity": "sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==", + "dependencies": { + "@types/node": "^18.0.0", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=14.15" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/@types/node": { + "version": "18.19.42", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", + "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@segment/ajv-human-errors": { "version": "2.11.3", "resolved": "https://registry.npmjs.org/@segment/ajv-human-errors/-/ajv-human-errors-2.11.3.tgz", @@ -8039,9 +8001,9 @@ } }, "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" }, "node_modules/@types/geojson": { "version": "7946.0.13", @@ -8093,6 +8055,14 @@ "undici-types": "~5.26.4" } }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/prop-types": { "version": "15.7.11", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", @@ -8107,12 +8077,11 @@ } }, "node_modules/@types/react": { - "version": "18.2.46", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.46.tgz", - "integrity": "sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w==", + "version": "18.2.79", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.79.tgz", + "integrity": "sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==", "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", "csstype": "^3.0.2" } }, @@ -8125,11 +8094,6 @@ "@types/react": "*" } }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" - }, "node_modules/@types/semver": { "version": "7.5.6", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", @@ -8746,13 +8710,15 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8854,17 +8820,17 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -8948,9 +8914,12 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -9069,15 +9038,15 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/babel-plugin-react-native-web": { - "version": "0.18.12", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.18.12.tgz", - "integrity": "sha512-4djr9G6fMdwQoD6LQ7hOKAm39+y12flWgovAqS1k5O8f42YQ3A1FFMyV5kKfetZuGhZO5BmNmOdRRZQ1TixtDw==" + "node_modules/babel-plugin-react-compiler": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-0.0.0.tgz", + "integrity": "sha512-Kigl0V36a/6hLVH7+CCe1CCtU3mFBqBd829V//VtuG7I/pyq+B2QZJqOefd63snQmdfCryNhO9XW1FbGPBvYDA==" }, - "node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", - "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" + "node_modules/babel-plugin-react-native-web": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.12.tgz", + "integrity": "sha512-eYZ4+P6jNcB37lObWIg0pUbi7+3PKoU1Oie2j0C8UF3cXyXoR74tO2NBjI/FORb2LJyItJZEAmjU5pSaJYEL1w==" }, "node_modules/babel-plugin-transform-flow-enums": { "version": "0.0.2", @@ -9088,56 +9057,20 @@ } }, "node_modules/babel-preset-expo": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-10.0.1.tgz", - "integrity": "sha512-uWIGmLfbP3dS5+8nesxaW6mQs41d4iP7X82ZwRdisB/wAhKQmuJM9Y1jQe4006uNYkw6Phf2TT03ykLVro7KuQ==", + "version": "11.0.12", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-11.0.12.tgz", + "integrity": "sha512-hUuKdzSo8+H1oXQvKvlHRMHTxl+nN6YhFGlKiIxPa0E+gYfMEp8FnnStc/2Hwmip5rgJzQs6KF63KKRUc75xAg==", "dependencies": { "@babel/plugin-proposal-decorators": "^7.12.9", "@babel/plugin-transform-export-namespace-from": "^7.22.11", "@babel/plugin-transform-object-rest-spread": "^7.12.13", "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/preset-env": "^7.20.0", "@babel/preset-react": "^7.22.15", - "@react-native/babel-preset": "^0.73.18", - "babel-plugin-react-native-web": "~0.18.10", - "react-refresh": "0.14.0" - } - }, - "node_modules/babel-preset-fbjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", - "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", - "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/preset-typescript": "^7.23.0", + "@react-native/babel-preset": "0.74.85", + "babel-plugin-react-compiler": "^0.0.0-experimental-592953e-20240517", + "babel-plugin-react-native-web": "~0.19.10", + "react-refresh": "^0.14.2" } }, "node_modules/balanced-match": { @@ -9206,11 +9139,6 @@ "node": ">= 6" } }, - "node_modules/blueimp-md5": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", - "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" - }, "node_modules/bplist-creator": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", @@ -9234,7 +9162,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -9251,9 +9178,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "funding": [ { "type": "opencollective", @@ -9269,10 +9196,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -9368,68 +9295,111 @@ } }, "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/cacache/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dependencies": { - "yallist": "^4.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, "bin": { - "mkdirp": "bin/cmd.js" + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9494,9 +9464,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001572", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001572.tgz", - "integrity": "sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==", + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", "funding": [ { "type": "opencollective", @@ -9600,41 +9570,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chromium-edge-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", - "integrity": "sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "node_modules/chromium-edge-launcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chromium-edge-launcher/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -9930,9 +9865,9 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -10103,6 +10038,54 @@ "node": ">= 6" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dateformat": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", @@ -10113,9 +10096,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", + "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==" }, "node_modules/debug": { "version": "4.3.4", @@ -10203,16 +10186,19 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { @@ -10227,7 +10213,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -10282,19 +10267,6 @@ "node": ">= 0.8" } }, - "node_modules/deprecated-react-native-prop-types": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-5.0.0.tgz", - "integrity": "sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ==", - "dependencies": { - "@react-native/normalize-colors": "^0.73.0", - "invariant": "^2.2.4", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -10430,16 +10402,34 @@ "version": "16.0.3", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true, "engines": { "node": ">=12" } }, "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", + "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", + "dependencies": { + "dotenv": "^16.4.4" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand/node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/dtrace-provider": { @@ -10683,8 +10673,7 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/ee-first": { "version": "1.1.1", @@ -10707,15 +10696,14 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.616", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz", - "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==" + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.2.tgz", + "integrity": "sha512-kc4r3U3V3WLaaZqThjYz/Y6z8tJe+7K0bbjUVo3i+LWIypVdMx5nXCkwRe6SWbY6ILqLdc1rKcKmr3HoH7wjSQ==" }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -10816,50 +10804,56 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -10868,6 +10862,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-iterator-helpers": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", @@ -10890,15 +10903,25 @@ "safe-array-concat": "^1.0.1" } }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", - "dev": true, + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -10917,7 +10940,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -10931,9 +10953,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } @@ -11970,23 +11992,23 @@ } }, "node_modules/expo": { - "version": "50.0.7", - "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.7.tgz", - "integrity": "sha512-lTqIrKOUTKHLdTuAaJzZihi1v7F8Ix1dOXVWMpToDy9zPC/s+fet0fbyXdFUxYsCUyuEDIB9tvejrTYZk8Hm0Q==", + "version": "51.0.22", + "resolved": "https://registry.npmjs.org/expo/-/expo-51.0.22.tgz", + "integrity": "sha512-AtdqmtKNRC+cRBTsYGfwQFMLWAWWC531V2V+bAO3S9wVSTP2eLh34V06/IsBIjCCAJQPaaeR05XcST8U3apXFw==", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "0.17.5", - "@expo/config": "8.5.4", - "@expo/config-plugins": "7.8.4", - "@expo/metro-config": "0.17.4", + "@expo/cli": "0.18.25", + "@expo/config": "9.0.3", + "@expo/config-plugins": "8.0.8", + "@expo/metro-config": "0.18.9", "@expo/vector-icons": "^14.0.0", - "babel-preset-expo": "~10.0.1", - "expo-asset": "~9.0.2", - "expo-file-system": "~16.0.6", - "expo-font": "~11.10.3", - "expo-keep-awake": "~12.8.2", - "expo-modules-autolinking": "1.10.3", - "expo-modules-core": "1.11.9", + "babel-preset-expo": "~11.0.12", + "expo-asset": "~10.0.10", + "expo-file-system": "~17.0.1", + "expo-font": "~12.0.9", + "expo-keep-awake": "~13.0.2", + "expo-modules-autolinking": "1.11.1", + "expo-modules-core": "1.12.19", "fbemitter": "^3.0.0", "whatwg-url-without-unicode": "8.0.0-3" }, @@ -11995,51 +12017,36 @@ } }, "node_modules/expo-asset": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-9.0.2.tgz", - "integrity": "sha512-PzYKME1MgUOoUvwtdzhAyXkjXOXGiSYqGKG/MsXwWr0Ef5wlBaBm2DCO9V6KYbng5tBPFu6hTjoRNil1tBOSow==", - "dependencies": { - "@react-native/assets-registry": "~0.73.1", - "blueimp-md5": "^2.10.0", - "expo-constants": "~15.4.0", - "expo-file-system": "~16.0.0", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-10.0.10.tgz", + "integrity": "sha512-0qoTIihB79k+wGus9wy0JMKq7DdenziVx3iUkGvMAy2azscSgWH6bd2gJ9CGnhC6JRd3qTMFBL0ou/fx7WZl7A==", + "dependencies": { + "expo-constants": "~16.0.0", "invariant": "^2.2.4", "md5-file": "^3.2.3" + }, + "peerDependencies": { + "expo": "*" } }, "node_modules/expo-build-properties": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/expo-build-properties/-/expo-build-properties-0.11.1.tgz", - "integrity": "sha512-m4j4aEjFaDuBE6KWYMxDhWgLzzSmpE7uHKAwtvXyNmRK+6JKF0gjiXi0sXgI5ngNppDQpsyPFMvqG7uQpRuCuw==", + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/expo-build-properties/-/expo-build-properties-0.12.3.tgz", + "integrity": "sha512-ihMKJyCHnKaiadI56UFYp2IdTxUhYa7e0ekHDfT+T3H2fk3jDYfh3n3wlUxFVeGyT7BE78tBTQ7QhMT6lluX2A==", "dev": true, "dependencies": { "ajv": "^8.11.0", - "semver": "^7.5.3" + "semver": "^7.6.0" }, "peerDependencies": { "expo": "*" } }, - "node_modules/expo-build-properties/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/expo-build-properties/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -12047,18 +12054,13 @@ "node": ">=10" } }, - "node_modules/expo-build-properties/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/expo-constants": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-15.4.5.tgz", - "integrity": "sha512-1pVVjwk733hbbIjtQcvUFCme540v4gFemdNlaxM2UXKbfRCOh2hzgKN5joHMOysoXQe736TTUrRj7UaZI5Yyhg==", + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-16.0.2.tgz", + "integrity": "sha512-9tNY3OVO0jfiMzl7ngb6IOyR5VFzNoN5OOazUWoeGfmMqVB5kltTemRvKraK9JRbBKIw+SOYLEmF0sEqgFZ6OQ==", "dependencies": { - "@expo/config": "~8.5.0" + "@expo/config": "~9.0.0", + "@expo/env": "~0.3.0" }, "peerDependencies": { "expo": "*" @@ -12073,41 +12075,39 @@ } }, "node_modules/expo-constants/node_modules/@expo/config": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.5.4.tgz", - "integrity": "sha512-ggOLJPHGzJSJHVBC1LzwXwR6qUn8Mw7hkc5zEKRIdhFRuIQ6s2FE4eOvP87LrNfDF7eZGa6tJQYsiHSmZKG+8Q==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.3.tgz", + "integrity": "sha512-eOTNM8eOC8gZNHgenySRlc/lwmYY1NOgvjwA8LHuvPT7/eUwD93zrxu3lPD1Cc/P6C/2BcVdfH4hf0tLmDxnsg==", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~7.8.2", - "@expo/config-types": "^50.0.0", - "@expo/json-file": "^8.2.37", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/json-file": "^8.3.0", "getenv": "^1.0.0", "glob": "7.1.6", "require-from-string": "^2.0.2", "resolve-from": "^5.0.0", - "semver": "7.5.3", + "semver": "^7.6.0", "slugify": "^1.3.4", "sucrase": "3.34.0" } }, "node_modules/expo-constants/node_modules/@expo/config-plugins": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.8.4.tgz", - "integrity": "sha512-hv03HYxb/5kX8Gxv/BTI8TLc9L06WzqAfHRRXdbar4zkLcP2oTzvsLEF4/L/TIpD3rsnYa0KU42d0gWRxzPCJg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.8.tgz", + "integrity": "sha512-Fvu6IO13EUw0R9WeqxUO37FkM62YJBNcZb9DyJAOgMz7Ez/vaKQGEjKt9cwT+Q6uirtCATMgaq6VWAW7YW8xXw==", "dependencies": { - "@expo/config-types": "^50.0.0-alpha.1", - "@expo/fingerprint": "^0.6.0", + "@expo/config-types": "^51.0.0-unreleased", "@expo/json-file": "~8.3.0", "@expo/plist": "^0.1.0", "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", "chalk": "^4.1.2", "debug": "^4.3.1", "find-up": "~5.0.0", "getenv": "^1.0.0", "glob": "7.1.6", "resolve-from": "^5.0.0", - "semver": "^7.5.3", + "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", @@ -12115,14 +12115,14 @@ } }, "node_modules/expo-constants/node_modules/@expo/config-types": { - "version": "50.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-50.0.0.tgz", - "integrity": "sha512-0kkhIwXRT6EdFDwn+zTg9R2MZIAEYGn1MVkyRohAd+C9cXOb5RA8WLQi7vuxKF9m1SMtNAUrf0pO+ENK0+/KSw==" + "version": "51.0.2", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.2.tgz", + "integrity": "sha512-IglkIoiDwJMY01lYkF/ZSBoe/5cR+O3+Gx6fpLFjLfgZGBTdyPkKa1g8NWoWQCk+D3cKL2MDbszT2DyRRB0YqQ==" }, "node_modules/expo-constants/node_modules/@expo/json-file": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.0.tgz", - "integrity": "sha512-yROUeXJXR5goagB8c3muFLCzLmdGOvoPpR5yDNaXrnTp4euNykr9yW0wWhJx4YVRTNOPtGBnEbbJBW+a9q+S6g==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.2", @@ -12130,9 +12130,9 @@ } }, "node_modules/expo-constants/node_modules/@expo/plist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.0.tgz", - "integrity": "sha512-xWD+8vIFif0wKyuqe3fmnmnSouXYucciZXFzS0ZD5OV9eSAS1RGQI5FaGGJ6zxJ4mpdy/4QzbLdBjnYE5vxA0g==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", "dependencies": { "@xmldom/xmldom": "~0.7.7", "base64-js": "^1.2.3", @@ -12200,24 +12200,10 @@ "node": ">=8" } }, - "node_modules/expo-constants/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/expo-constants/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -12257,23 +12243,18 @@ "node": ">=8" } }, - "node_modules/expo-constants/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/expo-file-system": { - "version": "16.0.6", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-16.0.6.tgz", - "integrity": "sha512-ATCHL7nEg2WwKeamW/SDTR9jBEqM5wncFq594ftKS5QFmhKIrX48d9jyPFGnNq+6h8AGPg4QKh2KCA4OY49L4g==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-17.0.1.tgz", + "integrity": "sha512-dYpnZJqTGj6HCYJyXAgpFkQWsiCH3HY1ek2cFZVHFoEc5tLz9gmdEgTF6nFHurvmvfmXqxi7a5CXyVm0aFYJBw==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-font": { - "version": "11.10.3", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-11.10.3.tgz", - "integrity": "sha512-q1Td2zUvmLbCA9GV4OG4nLPw5gJuNY1VrPycsnemN1m8XWTzzs8nyECQQqrcBhgulCgcKZZJJ6U0kC2iuSoQHQ==", + "version": "12.0.9", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-12.0.9.tgz", + "integrity": "sha512-seTCyf0tbgkAnp3ZI9ZfK9QVtURQUgFnuj+GuJ5TSnN0XsOtVe1s2RxTvmMgkfuvfkzcjJ69gyRpsZS1cC8hjw==", "dependencies": { "fontfaceobserver": "^2.1.0" }, @@ -12282,36 +12263,35 @@ } }, "node_modules/expo-keep-awake": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-12.8.2.tgz", - "integrity": "sha512-uiQdGbSX24Pt8nGbnmBtrKq6xL/Tm3+DuDRGBk/3ZE/HlizzNosGRIufIMJ/4B4FRw4dw8KU81h2RLuTjbay6g==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-13.0.2.tgz", + "integrity": "sha512-kKiwkVg/bY0AJ5q1Pxnm/GvpeB6hbNJhcFsoOWDh2NlpibhCLaHL826KHUM+WsnJRbVRxJ+K9vbPRHEMvFpVyw==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-linking": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-6.2.2.tgz", - "integrity": "sha512-FEe6lP4f7xFT/vjoHRG+tt6EPVtkEGaWNK1smpaUevmNdyCJKqW0PDB8o8sfG6y7fly8ULe8qg3HhKh5J7aqUQ==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-6.3.1.tgz", + "integrity": "sha512-xuZCntSBGWCD/95iZ+mTUGTwHdy8Sx+immCqbUBxdvZ2TN61P02kKg7SaLS8A4a/hLrSCwrg5tMMwu5wfKr35g==", "dependencies": { - "expo-constants": "~15.4.3", + "expo-constants": "~16.0.0", "invariant": "^2.2.4" } }, "node_modules/expo-location": { - "version": "16.5.3", - "resolved": "https://registry.npmjs.org/expo-location/-/expo-location-16.5.3.tgz", - "integrity": "sha512-V+84TZIa5MWpIXPvurnlJS9VxuxF1d3ajufUeq2sTgUkI/PP0aLHwyk5wg05C4CwuvwoiaVV80WyEL23j1Mz0w==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/expo-location/-/expo-location-17.0.1.tgz", + "integrity": "sha512-m+OzotzlAXO3ZZ1uqW5GC25nXW868zN+ROyBA1V4VF6jGay1ZEs4URPglCVUDzZby2F5wt24cMzqDKw2IX6nRw==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-modules-autolinking": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.10.3.tgz", - "integrity": "sha512-pn4n2Dl4iRh/zUeiChjRIe1C7EqOw1qhccr85viQV7W6l5vgRpY0osE51ij5LKg/kJmGRcJfs12+PwbdTplbKw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.11.1.tgz", + "integrity": "sha512-2dy3lTz76adOl7QUvbreMCrXyzUiF8lygI7iFJLjgIQIVH+43KnFWE5zBumpPbkiaq0f0uaFpN9U0RGQbnKiMw==", "dependencies": { - "@expo/config": "~8.5.0", "chalk": "^4.1.0", "commander": "^7.2.0", "fast-glob": "^3.2.5", @@ -12322,81 +12302,6 @@ "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, - "node_modules/expo-modules-autolinking/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/expo-modules-autolinking/node_modules/@expo/config": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.5.4.tgz", - "integrity": "sha512-ggOLJPHGzJSJHVBC1LzwXwR6qUn8Mw7hkc5zEKRIdhFRuIQ6s2FE4eOvP87LrNfDF7eZGa6tJQYsiHSmZKG+8Q==", - "dependencies": { - "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~7.8.2", - "@expo/config-types": "^50.0.0", - "@expo/json-file": "^8.2.37", - "getenv": "^1.0.0", - "glob": "7.1.6", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "semver": "7.5.3", - "slugify": "^1.3.4", - "sucrase": "3.34.0" - } - }, - "node_modules/expo-modules-autolinking/node_modules/@expo/config-plugins": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.8.4.tgz", - "integrity": "sha512-hv03HYxb/5kX8Gxv/BTI8TLc9L06WzqAfHRRXdbar4zkLcP2oTzvsLEF4/L/TIpD3rsnYa0KU42d0gWRxzPCJg==", - "dependencies": { - "@expo/config-types": "^50.0.0-alpha.1", - "@expo/fingerprint": "^0.6.0", - "@expo/json-file": "~8.3.0", - "@expo/plist": "^0.1.0", - "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.1", - "find-up": "~5.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "slash": "^3.0.0", - "slugify": "^1.6.6", - "xcode": "^3.0.1", - "xml2js": "0.6.0" - } - }, - "node_modules/expo-modules-autolinking/node_modules/@expo/config-types": { - "version": "50.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-50.0.0.tgz", - "integrity": "sha512-0kkhIwXRT6EdFDwn+zTg9R2MZIAEYGn1MVkyRohAd+C9cXOb5RA8WLQi7vuxKF9m1SMtNAUrf0pO+ENK0+/KSw==" - }, - "node_modules/expo-modules-autolinking/node_modules/@expo/json-file": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.0.tgz", - "integrity": "sha512-yROUeXJXR5goagB8c3muFLCzLmdGOvoPpR5yDNaXrnTp4euNykr9yW0wWhJx4YVRTNOPtGBnEbbJBW+a9q+S6g==", - "dependencies": { - "@babel/code-frame": "~7.10.4", - "json5": "^2.2.2", - "write-file-atomic": "^2.3.0" - } - }, - "node_modules/expo-modules-autolinking/node_modules/@expo/plist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.0.tgz", - "integrity": "sha512-xWD+8vIFif0wKyuqe3fmnmnSouXYucciZXFzS0ZD5OV9eSAS1RGQI5FaGGJ6zxJ4mpdy/4QzbLdBjnYE5vxA0g==", - "dependencies": { - "@xmldom/xmldom": "~0.7.7", - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0" - } - }, "node_modules/expo-modules-autolinking/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -12464,60 +12369,6 @@ "node": ">=8" } }, - "node_modules/expo-modules-autolinking/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/expo-modules-autolinking/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/expo-modules-autolinking/node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/expo-modules-autolinking/node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, "node_modules/expo-modules-autolinking/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12529,32 +12380,27 @@ "node": ">=8" } }, - "node_modules/expo-modules-autolinking/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/expo-modules-core": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.9.tgz", - "integrity": "sha512-GTUb81vcPaF+5MtlBI1u9IjrZbGdF1ZUwz3u8Gc+rOLBblkZ7pYsj2mU/tu+k0khTckI9vcH4ZBksXWvE1ncjQ==", + "version": "1.12.19", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.12.19.tgz", + "integrity": "sha512-fFsErN4oMsOdStUVYvyLpl6MX/wbD9yJSqy/Lu7ZRLIPzeKDfGS2jNl8RzryPznRpWmy49X8l40R4osRJLizhg==", "dependencies": { "invariant": "^2.2.4" } }, "node_modules/expo-router": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.4.7.tgz", - "integrity": "sha512-B1VLols+ErUqWtRHi9j/sQhxxwlsM7AJN+jEkvrPIfvhG7qpb1Usq13893ORcHvz/UhSHeEc9nKh7qx9hS6urw==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.5.18.tgz", + "integrity": "sha512-Pd76q9c5wcHU/dbsX2xhBaiJP0LRpB044RLLX3t3DR0MB3gjk+N9Fi7aC+ffyTiJ5uDDgpXdPe8ALL14/GgxbA==", "dependencies": { - "@expo/metro-runtime": "3.1.3", - "@expo/server": "^0.3.0", + "@expo/metro-runtime": "3.2.1", + "@expo/server": "^0.4.0", "@radix-ui/react-slot": "1.0.1", "@react-navigation/bottom-tabs": "~6.5.7", "@react-navigation/native": "~6.1.6", "@react-navigation/native-stack": "~6.9.12", - "expo-splash-screen": "0.26.4", - "react-helmet-async": "^1.3.0", + "expo-splash-screen": "0.27.5", + "react-native-helmet-async": "2.0.4", "schema-utils": "^4.0.1" }, "peerDependencies": { @@ -12580,11 +12426,11 @@ } }, "node_modules/expo-splash-screen": { - "version": "0.26.4", - "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.26.4.tgz", - "integrity": "sha512-2DwofTQ0FFQCsvDysm/msENsbyNsJiAJwK3qK/oXeizECAPqD7bK19J4z9kuEbr7ORPX9MLnTQYKl6kmX3keUg==", + "version": "0.27.5", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.27.5.tgz", + "integrity": "sha512-9rdZuLkFCfgJBxrheUsOEOIW6Rp+9NVlpSE0hgXQwbTCLTncf00IHSE8/L2NbFyeDLNjof1yZBppaV7tXHRUzA==", "dependencies": { - "@expo/prebuild-config": "6.7.4" + "@expo/prebuild-config": "7.0.6" }, "peerDependencies": { "expo": "*" @@ -12599,41 +12445,39 @@ } }, "node_modules/expo-splash-screen/node_modules/@expo/config": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.5.4.tgz", - "integrity": "sha512-ggOLJPHGzJSJHVBC1LzwXwR6qUn8Mw7hkc5zEKRIdhFRuIQ6s2FE4eOvP87LrNfDF7eZGa6tJQYsiHSmZKG+8Q==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.3.tgz", + "integrity": "sha512-eOTNM8eOC8gZNHgenySRlc/lwmYY1NOgvjwA8LHuvPT7/eUwD93zrxu3lPD1Cc/P6C/2BcVdfH4hf0tLmDxnsg==", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~7.8.2", - "@expo/config-types": "^50.0.0", - "@expo/json-file": "^8.2.37", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/json-file": "^8.3.0", "getenv": "^1.0.0", "glob": "7.1.6", "require-from-string": "^2.0.2", "resolve-from": "^5.0.0", - "semver": "7.5.3", + "semver": "^7.6.0", "slugify": "^1.3.4", "sucrase": "3.34.0" } }, "node_modules/expo-splash-screen/node_modules/@expo/config-plugins": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.8.4.tgz", - "integrity": "sha512-hv03HYxb/5kX8Gxv/BTI8TLc9L06WzqAfHRRXdbar4zkLcP2oTzvsLEF4/L/TIpD3rsnYa0KU42d0gWRxzPCJg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.8.tgz", + "integrity": "sha512-Fvu6IO13EUw0R9WeqxUO37FkM62YJBNcZb9DyJAOgMz7Ez/vaKQGEjKt9cwT+Q6uirtCATMgaq6VWAW7YW8xXw==", "dependencies": { - "@expo/config-types": "^50.0.0-alpha.1", - "@expo/fingerprint": "^0.6.0", + "@expo/config-types": "^51.0.0-unreleased", "@expo/json-file": "~8.3.0", "@expo/plist": "^0.1.0", "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", "chalk": "^4.1.2", "debug": "^4.3.1", "find-up": "~5.0.0", "getenv": "^1.0.0", "glob": "7.1.6", "resolve-from": "^5.0.0", - "semver": "^7.5.3", + "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", @@ -12641,16 +12485,16 @@ } }, "node_modules/expo-splash-screen/node_modules/@expo/config-types": { - "version": "50.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-50.0.0.tgz", - "integrity": "sha512-0kkhIwXRT6EdFDwn+zTg9R2MZIAEYGn1MVkyRohAd+C9cXOb5RA8WLQi7vuxKF9m1SMtNAUrf0pO+ENK0+/KSw==" + "version": "51.0.2", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.2.tgz", + "integrity": "sha512-IglkIoiDwJMY01lYkF/ZSBoe/5cR+O3+Gx6fpLFjLfgZGBTdyPkKa1g8NWoWQCk+D3cKL2MDbszT2DyRRB0YqQ==" }, "node_modules/expo-splash-screen/node_modules/@expo/image-utils": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.4.1.tgz", - "integrity": "sha512-EZb+VHSmw+a5s2hS9qksTcWylY0FDaIAVufcxoaRS9tHIXLjW5zcKW7Rhj9dSEbZbRVy9yXXdHKa3GQdUQIOFw==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.5.1.tgz", + "integrity": "sha512-U/GsFfFox88lXULmFJ9Shfl2aQGcwoKPF7fawSCLixIKtMCpsI+1r0h+5i0nQnmt9tHuzXZDL8+Dg1z6OhkI9A==", "dependencies": { - "@expo/spawn-async": "1.5.0", + "@expo/spawn-async": "^1.7.2", "chalk": "^4.0.0", "fs-extra": "9.0.0", "getenv": "^1.0.0", @@ -12658,7 +12502,7 @@ "node-fetch": "^2.6.0", "parse-png": "^2.1.0", "resolve-from": "^5.0.0", - "semver": "7.3.2", + "semver": "^7.6.0", "tempy": "0.3.0" } }, @@ -12676,17 +12520,6 @@ "node": ">=10" } }, - "node_modules/expo-splash-screen/node_modules/@expo/image-utils/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/expo-splash-screen/node_modules/@expo/image-utils/node_modules/universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", @@ -12696,9 +12529,9 @@ } }, "node_modules/expo-splash-screen/node_modules/@expo/json-file": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.0.tgz", - "integrity": "sha512-yROUeXJXR5goagB8c3muFLCzLmdGOvoPpR5yDNaXrnTp4euNykr9yW0wWhJx4YVRTNOPtGBnEbbJBW+a9q+S6g==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.2", @@ -12706,9 +12539,9 @@ } }, "node_modules/expo-splash-screen/node_modules/@expo/plist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.0.tgz", - "integrity": "sha512-xWD+8vIFif0wKyuqe3fmnmnSouXYucciZXFzS0ZD5OV9eSAS1RGQI5FaGGJ6zxJ4mpdy/4QzbLdBjnYE5vxA0g==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", "dependencies": { "@xmldom/xmldom": "~0.7.7", "base64-js": "^1.2.3", @@ -12716,19 +12549,20 @@ } }, "node_modules/expo-splash-screen/node_modules/@expo/prebuild-config": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.7.4.tgz", - "integrity": "sha512-x8EUdCa8DTMZ/dtEXjHAdlP+ljf6oSeSKNzhycXiHhpMSMG9jEhV28ocCwc6cKsjK5GziweEiHwvrj6+vsBlhA==", - "dependencies": { - "@expo/config": "~8.5.0", - "@expo/config-plugins": "~7.8.0", - "@expo/config-types": "^50.0.0-alpha.1", - "@expo/image-utils": "^0.4.0", - "@expo/json-file": "^8.2.37", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-7.0.6.tgz", + "integrity": "sha512-Hts+iGBaG6OQ+N8IEMMgwQElzJeSTb7iUJ26xADEHkaexsucAK+V52dM8M4ceicvbZR9q8M+ebJEGj0MCNA3dQ==", + "dependencies": { + "@expo/config": "~9.0.0-beta.0", + "@expo/config-plugins": "~8.0.0-beta.0", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@react-native/normalize-colors": "0.74.84", "debug": "^4.3.1", "fs-extra": "^9.0.0", "resolve-from": "^5.0.0", - "semver": "7.5.3", + "semver": "^7.6.0", "xml2js": "0.6.0" }, "peerDependencies": { @@ -12736,16 +12570,21 @@ } }, "node_modules/expo-splash-screen/node_modules/@expo/spawn-async": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", - "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", + "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", "dependencies": { - "cross-spawn": "^6.0.5" + "cross-spawn": "^7.0.3" }, "engines": { - "node": ">=4" + "node": ">=12" } }, + "node_modules/expo-splash-screen/node_modules/@react-native/normalize-colors": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.84.tgz", + "integrity": "sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A==" + }, "node_modules/expo-splash-screen/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -12799,29 +12638,6 @@ "node": ">= 6" } }, - "node_modules/expo-splash-screen/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/expo-splash-screen/node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/expo-splash-screen/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -12844,32 +12660,10 @@ "node": ">=8" } }, - "node_modules/expo-splash-screen/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/expo-splash-screen/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" - } - }, "node_modules/expo-splash-screen/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -12877,25 +12671,6 @@ "node": ">=10" } }, - "node_modules/expo-splash-screen/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expo-splash-screen/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/expo-splash-screen/node_modules/sucrase": { "version": "3.34.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", @@ -12928,26 +12703,10 @@ "node": ">=8" } }, - "node_modules/expo-splash-screen/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/expo-splash-screen/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/expo-status-bar": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.11.1.tgz", - "integrity": "sha512-ddQEtCOgYHTLlFUe/yH67dDBIoct5VIULthyT3LRJbEwdpzAgueKsX2FYK02ldh440V87PWKCamh7R9evk1rrg==" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.12.1.tgz", + "integrity": "sha512-/t3xdbS8KB0prj5KG5w7z+wZPFlPtkgs95BsmrP/E7Q0xHXTcDcQ6Cu2FkFuRM+PKTb17cJDnLkawyS5vDLxMA==" }, "node_modules/expo/node_modules/@babel/code-frame": { "version": "7.10.4", @@ -12958,41 +12717,39 @@ } }, "node_modules/expo/node_modules/@expo/config": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.5.4.tgz", - "integrity": "sha512-ggOLJPHGzJSJHVBC1LzwXwR6qUn8Mw7hkc5zEKRIdhFRuIQ6s2FE4eOvP87LrNfDF7eZGa6tJQYsiHSmZKG+8Q==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.3.tgz", + "integrity": "sha512-eOTNM8eOC8gZNHgenySRlc/lwmYY1NOgvjwA8LHuvPT7/eUwD93zrxu3lPD1Cc/P6C/2BcVdfH4hf0tLmDxnsg==", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~7.8.2", - "@expo/config-types": "^50.0.0", - "@expo/json-file": "^8.2.37", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/json-file": "^8.3.0", "getenv": "^1.0.0", "glob": "7.1.6", "require-from-string": "^2.0.2", "resolve-from": "^5.0.0", - "semver": "7.5.3", + "semver": "^7.6.0", "slugify": "^1.3.4", "sucrase": "3.34.0" } }, "node_modules/expo/node_modules/@expo/config-plugins": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.8.4.tgz", - "integrity": "sha512-hv03HYxb/5kX8Gxv/BTI8TLc9L06WzqAfHRRXdbar4zkLcP2oTzvsLEF4/L/TIpD3rsnYa0KU42d0gWRxzPCJg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.8.tgz", + "integrity": "sha512-Fvu6IO13EUw0R9WeqxUO37FkM62YJBNcZb9DyJAOgMz7Ez/vaKQGEjKt9cwT+Q6uirtCATMgaq6VWAW7YW8xXw==", "dependencies": { - "@expo/config-types": "^50.0.0-alpha.1", - "@expo/fingerprint": "^0.6.0", + "@expo/config-types": "^51.0.0-unreleased", "@expo/json-file": "~8.3.0", "@expo/plist": "^0.1.0", "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", "chalk": "^4.1.2", "debug": "^4.3.1", "find-up": "~5.0.0", "getenv": "^1.0.0", "glob": "7.1.6", "resolve-from": "^5.0.0", - "semver": "^7.5.3", + "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", @@ -13000,14 +12757,14 @@ } }, "node_modules/expo/node_modules/@expo/config-types": { - "version": "50.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-50.0.0.tgz", - "integrity": "sha512-0kkhIwXRT6EdFDwn+zTg9R2MZIAEYGn1MVkyRohAd+C9cXOb5RA8WLQi7vuxKF9m1SMtNAUrf0pO+ENK0+/KSw==" + "version": "51.0.2", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.2.tgz", + "integrity": "sha512-IglkIoiDwJMY01lYkF/ZSBoe/5cR+O3+Gx6fpLFjLfgZGBTdyPkKa1g8NWoWQCk+D3cKL2MDbszT2DyRRB0YqQ==" }, "node_modules/expo/node_modules/@expo/json-file": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.0.tgz", - "integrity": "sha512-yROUeXJXR5goagB8c3muFLCzLmdGOvoPpR5yDNaXrnTp4euNykr9yW0wWhJx4YVRTNOPtGBnEbbJBW+a9q+S6g==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.2", @@ -13015,9 +12772,9 @@ } }, "node_modules/expo/node_modules/@expo/plist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.0.tgz", - "integrity": "sha512-xWD+8vIFif0wKyuqe3fmnmnSouXYucciZXFzS0ZD5OV9eSAS1RGQI5FaGGJ6zxJ4mpdy/4QzbLdBjnYE5vxA0g==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", "dependencies": { "@xmldom/xmldom": "~0.7.7", "base64-js": "^1.2.3", @@ -13085,24 +12842,10 @@ "node": ">=8" } }, - "node_modules/expo/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/expo/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -13142,11 +12885,6 @@ "node": ">=8" } }, - "node_modules/expo/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -13202,9 +12940,9 @@ "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==" }, "node_modules/fast-xml-parser": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.4.tgz", - "integrity": "sha512-utnwm92SyozgA3hhH2I8qldf2lBqm6qHOICawRNRFu1qMe3+oqr+GcXjGqTmXTMGE5T4eC03kr/rlh5C1IRdZA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ { "type": "github", @@ -13544,7 +13282,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -13560,7 +13297,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "engines": { "node": ">=14" }, @@ -13653,7 +13389,6 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -13671,7 +13406,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -13693,15 +13427,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -13735,13 +13473,13 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -13821,7 +13559,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -13917,7 +13654,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -13931,20 +13667,20 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -13964,11 +13700,11 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -13978,9 +13714,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -13989,16 +13725,16 @@ } }, "node_modules/hermes-estree": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", - "integrity": "sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==" + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.19.1.tgz", + "integrity": "sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==" }, "node_modules/hermes-parser": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.15.0.tgz", - "integrity": "sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.19.1.tgz", + "integrity": "sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==", "dependencies": { - "hermes-estree": "0.15.0" + "hermes-estree": "0.19.1" } }, "node_modules/hermes-profile-transformer": { @@ -14232,11 +13968,6 @@ "node": ">=8" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -14278,12 +14009,11 @@ } }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", - "dev": true, + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -14299,11 +14029,6 @@ "loose-envify": "^1.0.0" } }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" - }, "node_modules/ip-regex": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", @@ -14336,14 +14061,15 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -14373,7 +14099,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -14385,7 +14110,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -14424,11 +14148,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -14562,10 +14299,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "engines": { "node": ">= 0.4" }, @@ -14585,7 +14321,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -14635,7 +14370,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -14666,12 +14400,14 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -14692,7 +14428,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -14707,7 +14442,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -14719,11 +14453,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -14767,7 +14501,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -16409,9 +16142,9 @@ } }, "node_modules/metro": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.6.tgz", - "integrity": "sha512-f6Nhnht9TxVRP6zdBq9J2jNdeDBxRmJFnjxhQS1GeCpokBvI6fTXq+wHTLz5jZA+75fwbkPSzBxBJzQa6xi0AQ==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.9.tgz", + "integrity": "sha512-Bc57Xf3GO2Xe4UWQsBj/oW6YfLPABEu8jfDVDiNmJvoQW4CO34oDPuYKe4KlXzXhcuNsqOtSxpbjCRRVjhhREg==", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -16428,24 +16161,24 @@ "denodeify": "^1.2.1", "error-stack-parser": "^2.0.6", "graceful-fs": "^4.2.4", - "hermes-parser": "0.19.1", + "hermes-parser": "0.20.1", "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.6.3", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.80.6", - "metro-cache": "0.80.6", - "metro-cache-key": "0.80.6", - "metro-config": "0.80.6", - "metro-core": "0.80.6", - "metro-file-map": "0.80.6", - "metro-resolver": "0.80.6", - "metro-runtime": "0.80.6", - "metro-source-map": "0.80.6", - "metro-symbolicate": "0.80.6", - "metro-transform-plugins": "0.80.6", - "metro-transform-worker": "0.80.6", + "metro-babel-transformer": "0.80.9", + "metro-cache": "0.80.9", + "metro-cache-key": "0.80.9", + "metro-config": "0.80.9", + "metro-core": "0.80.9", + "metro-file-map": "0.80.9", + "metro-resolver": "0.80.9", + "metro-runtime": "0.80.9", + "metro-source-map": "0.80.9", + "metro-symbolicate": "0.80.9", + "metro-transform-plugins": "0.80.9", + "metro-transform-worker": "0.80.9", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -16465,12 +16198,12 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.6.tgz", - "integrity": "sha512-ssuoVC4OzqaOt3LpwfUbDfBlFGRu9v1Yf2JJnKPz0ROYHNjSBws4aUesqQQ/Ea8DbiH7TK4j4cJmm+XjdHmgqA==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.9.tgz", + "integrity": "sha512-d76BSm64KZam1nifRZlNJmtwIgAeZhZG3fi3K+EmPOlrR8rDtBxQHDSN3fSGeNB9CirdTyabTMQCkCup6BXFSQ==", "dependencies": { "@babel/core": "^7.20.0", - "hermes-parser": "0.19.1", + "hermes-parser": "0.20.1", "nullthrows": "^1.1.1" }, "engines": { @@ -16478,24 +16211,24 @@ } }, "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.19.1.tgz", - "integrity": "sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==" + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" }, "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.19.1.tgz", - "integrity": "sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", "dependencies": { - "hermes-estree": "0.19.1" + "hermes-estree": "0.20.1" } }, "node_modules/metro-cache": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.6.tgz", - "integrity": "sha512-NP81pHSPkzs+iNlpVkJqijrpcd6lfuDAunYH9/Rn8oLNz0yLfkl8lt+xOdUU4IkFt3oVcTBEFCnzAzv4B8YhyA==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.9.tgz", + "integrity": "sha512-ujEdSI43QwI+Dj2xuNax8LMo8UgKuXJEdxJkzGPU6iIx42nYa1byQ+aADv/iPh5sh5a//h5FopraW5voXSgm2w==", "dependencies": { - "metro-core": "0.80.6", + "metro-core": "0.80.9", "rimraf": "^3.0.2" }, "engines": { @@ -16503,46 +16236,46 @@ } }, "node_modules/metro-cache-key": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.6.tgz", - "integrity": "sha512-DFmjQacC8m/S3HpELklLMWkPGP/fZPX3BSgjd0xQvwIvWyFwk8Nn/lfp/uWdEVDtDSIr64/anXU5uWohGwlWXw==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.9.tgz", + "integrity": "sha512-hRcYGhEiWIdM87hU0fBlcGr+tHDEAT+7LYNCW89p5JhErFt/QaAkVx4fb5bW3YtXGv5BTV7AspWPERoIb99CXg==", "engines": { "node": ">=18" } }, "node_modules/metro-config": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.6.tgz", - "integrity": "sha512-vHYYvJpRTWYbmvqlR7i04xQpZCHJ6yfZ/xIcPdz2ssbdJGGJbiT1Aar9wr8RAhsccSxdJgfE5B1DB8Mo+DnhIg==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.9.tgz", + "integrity": "sha512-28wW7CqS3eJrunRGnsibWldqgwRP9ywBEf7kg+uzUHkSFJNKPM1K3UNSngHmH0EZjomizqQA2Zi6/y6VdZMolg==", "dependencies": { "connect": "^3.6.5", "cosmiconfig": "^5.0.5", "jest-validate": "^29.6.3", - "metro": "0.80.6", - "metro-cache": "0.80.6", - "metro-core": "0.80.6", - "metro-runtime": "0.80.6" + "metro": "0.80.9", + "metro-cache": "0.80.9", + "metro-core": "0.80.9", + "metro-runtime": "0.80.9" }, "engines": { "node": ">=18" } }, "node_modules/metro-core": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.6.tgz", - "integrity": "sha512-fn4rryTUAwzFJWj7VIPDH4CcW/q7MV4oGobqR6NsuxZoIGYrVpK7pBasumu5YbCqifuErMs5s23BhmrDNeZURw==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.9.tgz", + "integrity": "sha512-tbltWQn+XTdULkGdzHIxlxk4SdnKxttvQQV3wpqqFbHDteR4gwCyTR2RyYJvxgU7HELfHtrVbqgqAdlPByUSbg==", "dependencies": { "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.6" + "metro-resolver": "0.80.9" }, "engines": { "node": ">=18" } }, "node_modules/metro-file-map": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.6.tgz", - "integrity": "sha512-S3CUqvpXpc+q3q+hCEWvFKhVqgq0VmXdZQDF6u7ue86E2elq1XLnfLOt9JSpwyhpMQRyysjSCnd/Yh6GZMNHoQ==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.9.tgz", + "integrity": "sha512-sBUjVtQMHagItJH/wGU9sn3k2u0nrCl0CdR4SFMO1tksXLKbkigyQx4cbpcyPVOAmGTVuy3jyvBlELaGCAhplQ==", "dependencies": { "anymatch": "^3.0.3", "debug": "^2.2.0", @@ -16576,9 +16309,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/metro-minify-terser": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.6.tgz", - "integrity": "sha512-83eZaH2+B+jP92KuodPqXknzwmiboKAuZY4doRfTEEXAG57pNVNN6cqSRJlwDnmaTBKRffxoncBXbYqHQgulgg==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.9.tgz", + "integrity": "sha512-FEeCeFbkvvPuhjixZ1FYrXtO0araTpV6UbcnGgDUpH7s7eR5FG/PiJz3TsuuPP/HwCK19cZtQydcA2QrCw446A==", "dependencies": { "terser": "^5.15.0" }, @@ -16587,17 +16320,17 @@ } }, "node_modules/metro-resolver": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.6.tgz", - "integrity": "sha512-R7trfglG4zY4X9XyM9cvuffAhQ9W1reWoahr1jdEWa6rOI8PyM0qXjcsb8l+fsOQhdSiVlkKcYAmkyrs1S/zrA==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.9.tgz", + "integrity": "sha512-wAPIjkN59BQN6gocVsAvvpZ1+LQkkqUaswlT++cJafE/e54GoVkMNCmrR4BsgQHr9DknZ5Um/nKueeN7kaEz9w==", "engines": { "node": ">=18" } }, "node_modules/metro-runtime": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.6.tgz", - "integrity": "sha512-21GQVd0pp2nACoK0C2PL8mBsEhIFUFFntYrWRlYNHtPQoqDzddrPEIgkyaABGXGued+dZoBlFQl+LASlmmfkvw==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.9.tgz", + "integrity": "sha512-8PTVIgrVcyU+X/rVCy/9yxNlvXsBCk5JwwkbAm/Dm+Abo6NBGtNjWF0M1Xo/NWCb4phamNWcD7cHdR91HhbJvg==", "dependencies": { "@babel/runtime": "^7.0.0" }, @@ -16606,16 +16339,16 @@ } }, "node_modules/metro-source-map": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.6.tgz", - "integrity": "sha512-lqDuSLctWy9Qccu4Zl0YB1PzItpsqcKGb1nK0aDY+lzJ26X65OCib2VzHlj+xj7e4PiIKOfsvDCczCBz4cnxdg==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.9.tgz", + "integrity": "sha512-RMn+XS4VTJIwMPOUSj61xlxgBvPeY4G6s5uIn6kt6HB6A/k9ekhr65UkkDD7WzHYs3a9o869qU8tvOZvqeQzgw==", "dependencies": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.80.6", + "metro-symbolicate": "0.80.9", "nullthrows": "^1.1.1", - "ob1": "0.80.6", + "ob1": "0.80.9", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -16632,12 +16365,12 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.6.tgz", - "integrity": "sha512-SGwKeBi+lK7NmM5+EcW6DyRRa9HmGSvH0LJtlT4XoRMbpxzsLYs0qUEA+olD96pOIP+ta7I8S30nQr2ttqgO8A==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.9.tgz", + "integrity": "sha512-Ykae12rdqSs98hg41RKEToojuIW85wNdmSe/eHUgMkzbvCFNVgcC0w3dKZEhSsqQOXapXRlLtHkaHLil0UD/EA==", "dependencies": { "invariant": "^2.2.4", - "metro-source-map": "0.80.6", + "metro-source-map": "0.80.9", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -16659,9 +16392,9 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.6.tgz", - "integrity": "sha512-e04tdTC5Fy1vOQrTTXb5biao0t7nR/h+b1IaBTlM5UaHaAJZr658uVOoZhkRxKjbhF2mIwJ/8DdorD2CA15BCg==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.9.tgz", + "integrity": "sha512-UlDk/uc8UdfLNJhPbF3tvwajyuuygBcyp+yBuS/q0z3QSuN/EbLllY3rK8OTD9n4h00qZ/qgxGv/lMFJkwP4vg==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", @@ -16674,21 +16407,21 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.6.tgz", - "integrity": "sha512-jV+VgCLiCj5jQadW/h09qJaqDreL6XcBRY52STCoz2xWn6WWLLMB5nXzQtvFNPmnIOps+Xu8+d5hiPcBNOhYmA==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.9.tgz", + "integrity": "sha512-c/IrzMUVnI0hSVVit4TXzt3A1GiUltGVlzCmLJWxNrBGHGrJhvgePj38+GXl1Xf4Fd4vx6qLUkKMQ3ux73bFLQ==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", - "metro": "0.80.6", - "metro-babel-transformer": "0.80.6", - "metro-cache": "0.80.6", - "metro-cache-key": "0.80.6", - "metro-minify-terser": "0.80.6", - "metro-source-map": "0.80.6", - "metro-transform-plugins": "0.80.6", + "metro": "0.80.9", + "metro-babel-transformer": "0.80.9", + "metro-cache": "0.80.9", + "metro-cache-key": "0.80.9", + "metro-minify-terser": "0.80.9", + "metro-source-map": "0.80.9", + "metro-transform-plugins": "0.80.9", "nullthrows": "^1.1.1" }, "engines": { @@ -16762,16 +16495,16 @@ } }, "node_modules/metro/node_modules/hermes-estree": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.19.1.tgz", - "integrity": "sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==" + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" }, "node_modules/metro/node_modules/hermes-parser": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.19.1.tgz", - "integrity": "sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", "dependencies": { - "hermes-estree": "0.19.1" + "hermes-estree": "0.20.1" } }, "node_modules/metro/node_modules/ms": { @@ -16799,9 +16532,9 @@ } }, "node_modules/metro/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, @@ -16913,14 +16646,22 @@ } }, "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-flush": { @@ -17315,9 +17056,9 @@ "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" }, "node_modules/ob1": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.6.tgz", - "integrity": "sha512-nlLGZPMQ/kbmkdIb5yvVzep1jKUII2x6ehNsHpgy71jpnJMW7V+KsB3AjYI2Ajb7UqMAMNjlssg6FUodrEMYzg==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.9.tgz", + "integrity": "sha512-v9yOxowkZbxWhKOaaTyLjIm1aLy4ebMNcSn4NYJKOAI/Qv+SkfEfszpLr2GIxsccmb2Y2HA9qtsqiIJ80ucpVA==", "engines": { "node": ">=18" } @@ -17334,7 +17075,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -17360,7 +17100,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -17696,6 +17435,11 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -17957,35 +17701,29 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/path-scurry/node_modules/minipass": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -17999,9 +17737,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -18205,10 +17943,18 @@ "node": ">=12.13.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", "funding": [ { "type": "opencollective", @@ -18225,8 +17971,8 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -18334,11 +18080,6 @@ "asap": "~2.0.3" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, "node_modules/promise-limit": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz", @@ -18423,6 +18164,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/queue": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", @@ -18497,18 +18247,18 @@ } }, "node_modules/react-devtools-core": { - "version": "4.28.5", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz", - "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.3.1.tgz", + "integrity": "sha512-7FSb9meX0btdBQLwdFOwt6bGqvRPabmVMMslv8fgoSPqXyuGpgQe36kx8gR86XPw7aV1yVouTp6fyZ0EH+NfUw==", "dependencies": { "shell-quote": "^1.6.1", "ws": "^7" } }, "node_modules/react-devtools-core/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, @@ -18553,49 +18303,32 @@ "react": ">=17.0.0" } }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-native": { - "version": "0.73.4", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.4.tgz", - "integrity": "sha512-VtS+Yr6OOTIuJGDECIYWzNU8QpJjASQYvMtfa/Hvm/2/h5GdB6W9H9TOmh13x07Lj4AOhNMx3XSsz6TdrO4jIg==", + "version": "0.74.3", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.3.tgz", + "integrity": "sha512-UFutCC6WEw6HkxlcpQ2BemKqi0JkwrgDchYB5Svi8Sp4Xwt4HA6LGEjNQgZ+3KM44bjyFRpofQym0uh0jACGng==", "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native-community/cli": "12.3.2", - "@react-native-community/cli-platform-android": "12.3.2", - "@react-native-community/cli-platform-ios": "12.3.2", - "@react-native/assets-registry": "0.73.1", - "@react-native/codegen": "0.73.3", - "@react-native/community-cli-plugin": "0.73.16", - "@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-community/cli": "13.6.9", + "@react-native-community/cli-platform-android": "13.6.9", + "@react-native-community/cli-platform-ios": "13.6.9", + "@react-native/assets-registry": "0.74.85", + "@react-native/codegen": "0.74.85", + "@react-native/community-cli-plugin": "0.74.85", + "@react-native/gradle-plugin": "0.74.85", + "@react-native/js-polyfills": "0.74.85", + "@react-native/normalize-colors": "0.74.85", + "@react-native/virtualized-lists": "0.74.85", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", "base64-js": "^1.5.1", "chalk": "^4.0.0", - "deprecated-react-native-prop-types": "^5.0.0", "event-target-shim": "^5.0.1", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", @@ -18608,7 +18341,7 @@ "nullthrows": "^1.1.1", "pretty-format": "^26.5.2", "promise": "^8.3.0", - "react-devtools-core": "^4.27.7", + "react-devtools-core": "^5.0.0", "react-refresh": "^0.14.0", "react-shallow-renderer": "^16.15.0", "regenerator-runtime": "^0.13.2", @@ -18625,13 +18358,19 @@ "node": ">=18" }, "peerDependencies": { + "@types/react": "^18.2.6", "react": "18.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/react-native-gesture-handler": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.14.1.tgz", - "integrity": "sha512-YiM1BApV4aKeuwsM6O4C2ufwewYEKk6VMXOt0YqEZFMwABBFWhXLySFZYjBSNRU2USGppJbfHP1q1DfFQpKhdA==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.16.2.tgz", + "integrity": "sha512-vGFlrDKlmyI+BT+FemqVxmvO7nqxU33cgXVsn6IKAFishvlG3oV2Ds67D5nPkHMea8T+s1IcuMm0bF8ntZtAyg==", "dependencies": { "@egjs/hammerjs": "^2.0.17", "hoist-non-react-statics": "^3.3.0", @@ -18644,10 +18383,23 @@ "react-native": "*" } }, + "node_modules/react-native-helmet-async": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-native-helmet-async/-/react-native-helmet-async-2.0.4.tgz", + "integrity": "sha512-m3CkXWss6B1dd6mCMleLpzDCJJGGaHOLQsUzZv8kAASJmMfmVT4d2fx375iXKTRWT25ThBfae3dECuX5cq/8hg==", + "dependencies": { + "invariant": "^2.2.4", + "react-fast-compare": "^3.2.2", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-native-maps": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-1.10.0.tgz", - "integrity": "sha512-Zs6lHZucEijTwkRVFyInMbPVkJ2UudDEI2fJPc8ArdzdnwDFAdL6OagqTjNRZyI1DBPHRihazfIWpy2+X1VwLg==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-1.14.0.tgz", + "integrity": "sha512-ai7h4UdRLGPFCguz1fI8n4sKLEh35nZXHAH4nSWyAeHGrN8K9GjICu9Xd4Q5Ok4h+WwrM6Xz5pGbF3Qm1tO6iQ==", "dependencies": { "@types/geojson": "^7946.0.13" }, @@ -18666,22 +18418,21 @@ } }, "node_modules/react-native-reanimated": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.6.2.tgz", - "integrity": "sha512-IIMREMOrxhtK35drfpzh2UhxNqAOHnuvGgtMofj7yHcMj16tmWZR2zFvMUf6z2MfmXv+aVgFQ6TRZ6yKYf7LNA==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.10.1.tgz", + "integrity": "sha512-sfxg6vYphrDc/g4jf/7iJ7NRi+26z2+BszPmvmk0Vnrz6FL7HYljJqTf531F1x6tFmsf+FEAmuCtTUIXFLVo9w==", "dependencies": { - "@babel/plugin-transform-object-assign": "^7.16.7", + "@babel/plugin-transform-arrow-functions": "^7.0.0-0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", + "@babel/plugin-transform-optional-chaining": "^7.0.0-0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", + "@babel/plugin-transform-template-literals": "^7.0.0-0", "@babel/preset-typescript": "^7.16.7", "convert-source-map": "^2.0.0", "invariant": "^2.2.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0-0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0-0", - "@babel/plugin-transform-arrow-functions": "^7.0.0-0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", - "@babel/plugin-transform-template-literals": "^7.0.0-0", "react": "*", "react-native": "*" } @@ -18707,18 +18458,18 @@ } }, "node_modules/react-native-safe-area-context": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.8.2.tgz", - "integrity": "sha512-ffUOv8BJQ6RqO3nLml5gxJ6ab3EestPiyWekxdzO/1MQ7NF8fW1Mzh1C5QE9yq573Xefnc7FuzGXjtesZGv7cQ==", + "version": "4.10.5", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.10.5.tgz", + "integrity": "sha512-Wyb0Nqw2XJ6oZxW/cK8k5q7/UAhg/wbEG6UVf89rQqecDZTDA5ic//P9J6VvJRVZerzGmxWQpVuM7f+PRYUM4g==", "peerDependencies": { "react": "*", "react-native": "*" } }, "node_modules/react-native-screens": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.29.0.tgz", - "integrity": "sha512-yB1GoAMamFAcYf4ku94uBPn0/ani9QG7NdI98beJ5cet2YFESYYzuEIuU+kt+CNRcO8qqKeugxlfgAa3HyTqlg==", + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.31.1.tgz", + "integrity": "sha512-8fRW362pfZ9y4rS8KY5P3DFScrmwo/vu1RrRMMx0PNHbeC9TLq0Kw1ubD83591yz64gLNHFLTVkTJmWeWCXKtQ==", "dependencies": { "react-freeze": "^1.0.0", "warn-once": "^0.1.0" @@ -18776,9 +18527,9 @@ } }, "node_modules/react-native/node_modules/@react-native/virtualized-lists": { - "version": "0.73.4", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.73.4.tgz", - "integrity": "sha512-HpmLg1FrEiDtrtAbXiwCgXFYyloK/dOIPIuWW3fsqukwJEWAiTzm1nXGJ7xPU5XTHiWZ4sKup5Ebaj8z7iyWog==", + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.85.tgz", + "integrity": "sha512-jx2Zw0qlZteoQ+0KxRc7s4drsljLBEP534FaNZ950e9+CN9nVkLsV6rigcTjDR8wjKMSBWhKf0C0C3egYz7Ehg==", "dependencies": { "invariant": "^2.2.4", "nullthrows": "^1.1.1" @@ -18787,7 +18538,14 @@ "node": ">=18" }, "peerDependencies": { + "@types/react": "^18.2.6", + "react": "*", "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/react-native/node_modules/@types/yargs": { @@ -18911,9 +18669,9 @@ } }, "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "engines": { "node": ">=0.10.0" } @@ -19065,19 +18823,20 @@ "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "peer": true, "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "dev": true, + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -19273,13 +19032,12 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "dev": true, + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -19302,15 +19060,17 @@ "optional": true }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -19352,6 +19112,18 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -19453,14 +19225,16 @@ "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -19470,7 +19244,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dev": true, "dependencies": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", @@ -19537,7 +19310,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -19629,9 +19401,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -19678,14 +19450,22 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dependencies": { - "minipass": "^3.1.1" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/stack-utils": { @@ -19795,7 +19575,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -19808,14 +19587,12 @@ "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -19854,14 +19631,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "dev": true, + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -19871,28 +19648,29 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dev": true, + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dev": true, + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -19928,7 +19706,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -20257,9 +20034,9 @@ } }, "node_modules/terser": { - "version": "5.27.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.1.tgz", - "integrity": "sha512-29wAr6UU/oQpnTw5HoadwjUZnFQXGdOfj0LjZ4sVxzqwHh/QVkvr7m8y9WoR4iN3FRitVduTc6KdjcW38Npsug==", + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -20379,9 +20156,14 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/traverse": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", - "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.9.tgz", + "integrity": "sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==", + "dependencies": { + "gopd": "^1.0.1", + "typedarray.prototype.slice": "^1.0.3", + "which-typed-array": "^1.1.15" + }, "engines": { "node": ">= 0.4" }, @@ -20473,6 +20255,11 @@ "node": "*" } }, + "node_modules/turbo-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.2.0.tgz", + "integrity": "sha512-FKFg7A0To1VU4CH9YmSMON5QphK0BXjSoiC7D9yMh+mEEbXLUP9qJ4hEt1qcjKtzncs1OpcnjZO8NgrlVbZH+g==" + }, "node_modules/turndown": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.1.1.tgz", @@ -20514,29 +20301,28 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -20546,16 +20332,16 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -20565,14 +20351,38 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz", + "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-offset": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -20582,7 +20392,7 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -20617,7 +20427,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -20628,6 +20437,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici": { + "version": "6.19.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.4.tgz", + "integrity": "sha512-i3uaEUwNdkRq2qtTRRJb13moW5HWqviu7Vl7oYRYz++uPtGHJj+x7TGjcEuwS5Mt2P4nA0U9dhIX3DdB6JGY0g==", + "engines": { + "node": ">=18.17" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -20670,19 +20487,25 @@ } }, "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dependencies": { - "unique-slug": "^2.0.0" + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dependencies": { "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-string": { @@ -20722,9 +20545,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "funding": [ { "type": "opencollective", @@ -20740,8 +20563,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -20942,7 +20765,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -21001,15 +20823,15 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -21057,7 +20879,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -21074,7 +20895,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -21089,7 +20909,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -21100,8 +20919,7 @@ "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", @@ -21149,9 +20967,9 @@ } }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "engines": { "node": ">=10.0.0" }, diff --git a/package.json b/package.json index 29e2447..f839361 100644 --- a/package.json +++ b/package.json @@ -15,47 +15,48 @@ "postinstall": "patch-package" }, "dependencies": { - "@expo/vector-icons": "^14.0.0", + "@expo/vector-icons": "^14.0.2", + "@googlemaps/polyline-codec": "^1.0.28", "@gorhom/bottom-sheet": "^4.5.1", - "@react-native-async-storage/async-storage": "^1.19.3", - "@react-native-segmented-control/segmented-control": "2.4.1", + "@react-native-async-storage/async-storage": "1.23.1", + "@react-native-segmented-control/segmented-control": "2.5.2", "@tanstack/react-query": "^5.22.2", "aggie-spirit-api": "github:Reveille-Rides/aggie-spirit-api#route-planning-api", - "expo": "^50.0.7", - "expo-constants": "~15.4.5", - "expo-linking": "~6.2.2", - "expo-location": "~16.5.3", - "expo-router": "~3.4.7", - "expo-splash-screen": "~0.26.4", - "expo-status-bar": "~1.11.1", + "expo": "^51.0.22", + "expo-constants": "~16.0.2", + "expo-linking": "~6.3.1", + "expo-location": "~17.0.1", + "expo-router": "~3.5.18", + "expo-splash-screen": "~0.27.5", + "expo-status-bar": "~1.12.1", "moment": "^2.30.1", "moment-strftime": "^0.5.0", "patch-package": "^8.0.0", "react": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.73.4", - "react-native-gesture-handler": "~2.14.0", - "react-native-maps": "1.10.0", - "react-native-reanimated": "~3.6.2", + "react-native": "0.74.3", + "react-native-gesture-handler": "~2.16.1", + "react-native-maps": "1.14.0", + "react-native-reanimated": "~3.10.1", "react-native-render-html": "^6.3.4", - "react-native-safe-area-context": "4.8.2", - "react-native-screens": "~3.29.0", + "react-native-safe-area-context": "4.10.5", + "react-native-screens": "3.31.1", "react-native-timeline-flatlist": "^0.8.0", "react-native-web": "~0.19.6", "zod": "^3.22.4", "zustand": "^4.4.6" }, "devDependencies": { - "@babel/core": "^7.22.9", - "@config-plugins/detox": "^7.0.0", + "@babel/core": "^7.24.0", + "@config-plugins/detox": "^8.0.0", "@testing-library/jest-native": "^5.4.2", "@testing-library/react-native": "^12.1.3", - "@types/react": "~18.2.14", + "@types/react": "~18.2.79", "@types/react-native": "^0.72.2", "@typescript-eslint/eslint-plugin": "^6.2.0", "@typescript-eslint/parser": "^6.2.0", "babel-plugin-module-resolver": "^5.0.0", - "babel-preset-expo": "^10.0.1", + "babel-preset-expo": "~11.0.0", "eas-cli": "^3.17.1", "eslint": "^8.46.0", "eslint-config-airbnb": "^19.0.4", diff --git a/utils/interfaces.ts b/utils/interfaces.ts index 90dc5ff..f156002 100644 --- a/utils/interfaces.ts +++ b/utils/interfaces.ts @@ -421,4 +421,17 @@ export const MyLocationSuggestion: SearchSuggestion = { title: "My Location", subtitle: "", type: "my-location" +} + +export interface RoutePlanPolylinePoint { + latitude: number + longitude: number + stepIndex: number + pathIndex: number +} + +export interface RoutePlanMapMarker { + latitude: number + longitude: number + icon: React.JSX.Element } \ No newline at end of file From a0b0165a7d2838286e982fa17610cbc488699ed1 Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 28 Jul 2024 18:57:28 -0400 Subject: [PATCH 17/25] lint --- app/components/ui/SuggestionInput.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/ui/SuggestionInput.tsx b/app/components/ui/SuggestionInput.tsx index 0522de1..c239c1f 100644 --- a/app/components/ui/SuggestionInput.tsx +++ b/app/components/ui/SuggestionInput.tsx @@ -1,6 +1,6 @@ import { useSearchSuggestion } from "app/data/api_query" import useAppStore from "app/data/app_state" -import { memo, useEffect, useRef, useState } from "react" +import { memo, useEffect, useState } from "react" import { View, TextInput, Keyboard } from "react-native" import { MyLocationSuggestion, SearchSuggestion } from "utils/interfaces" From e4d4fc4f2f681e54e9de34c22aa3cb419ab5e90a Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 28 Jul 2024 19:13:39 -0400 Subject: [PATCH 18/25] fix package imports --- package-lock.json | 10 +++++----- package.json | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index b0253b8..9fcf834 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "Reveille Rides", + "name": "maroonrides", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "Reveille Rides", + "name": "maroonrides", "version": "1.0.0", "hasInstallScript": true, "dependencies": { @@ -15,7 +15,7 @@ "@react-native-async-storage/async-storage": "1.23.1", "@react-native-segmented-control/segmented-control": "2.5.2", "@tanstack/react-query": "^5.22.2", - "aggie-spirit-api": "github:Reveille-Rides/aggie-spirit-api#route-planning-api", + "aggie-spirit-api": "^1.1.0", "expo": "^51.0.22", "expo-constants": "~16.0.2", "expo-linking": "~6.3.1", @@ -8518,8 +8518,8 @@ }, "node_modules/aggie-spirit-api": { "version": "1.1.0", - "resolved": "git+ssh://git@github.com/Reveille-Rides/aggie-spirit-api.git#4bbb9cff3cd8a09f64b3e901debc988d845ec738", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/aggie-spirit-api/-/aggie-spirit-api-1.1.0.tgz", + "integrity": "sha512-yNRXUysmMiM/hM0wClK/w8HtWfC8qJ6e6CtS9UugbKw8kaCxc9mgdlTtoCx55TlkVJpWt96wLuhWefNkp3Cj+A==", "dependencies": { "moment": "^2.29.4" } diff --git a/package.json b/package.json index f839361..19bf681 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "Reveille Rides", + "name": "maroonrides", "version": "1.0.0", "main": "Main.tsx", "scripts": { @@ -21,7 +21,7 @@ "@react-native-async-storage/async-storage": "1.23.1", "@react-native-segmented-control/segmented-control": "2.5.2", "@tanstack/react-query": "^5.22.2", - "aggie-spirit-api": "github:Reveille-Rides/aggie-spirit-api#route-planning-api", + "aggie-spirit-api": "^1.1.0", "expo": "^51.0.22", "expo-constants": "~16.0.2", "expo-linking": "~6.3.1", From 6a1755131097b1cb966b8dceb56b1b984b0d2ff6 Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 28 Jul 2024 19:13:48 -0400 Subject: [PATCH 19/25] better handling of route clearing --- app/components/map/MapView.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/components/map/MapView.tsx b/app/components/map/MapView.tsx index dedf22b..caff336 100644 --- a/app/components/map/MapView.tsx +++ b/app/components/map/MapView.tsx @@ -63,9 +63,11 @@ const Map: React.FC = () => { // Generate the path points for the selected route plan useEffect(() => { if (!selectedRoutePlan) { + setSelectedRoutePlanPath([]); setHighlightedRoutePlanPath([]); setFadedRoutePlanPath([]); setRoutePlanMapMarkers([]); + return; } var polyline: RoutePlanPolylinePoint[] = []; @@ -110,6 +112,8 @@ const Map: React.FC = () => { // Adjust the zoom and the path to show the selected part of the route plan useEffect(() => { + if (!selectedRoutePlan) return; + // filter the selected route plan path to only show the selected part var highlighted: RoutePlanPolylinePoint[] = []; if (selectedRoutePlanPathPart === -1) { @@ -374,7 +378,7 @@ const Map: React.FC = () => { ))} {/* Route Plan Highlighted */} - {selectedRoutePlanPath && + {selectedRoutePlan && { /> } - {/* Route Plan Highlighted */} - {selectedRoutePlanPath && fadedRoutePlanPath.map((path, index) => { + {/* Route Plan Faded */} + {selectedRoutePlan && fadedRoutePlanPath.map((path, index) => { return { })} {/* Route Plan Markers */} - {routePlanMapMarkers.map((marker, index) => { + {selectedRoutePlan && routePlanMapMarkers.map((marker, index) => { return ( Date: Sun, 28 Jul 2024 19:18:31 -0400 Subject: [PATCH 20/25] pluralization of minutes --- app/components/ui/TripPlanCell.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/ui/TripPlanCell.tsx b/app/components/ui/TripPlanCell.tsx index 28e5d55..82e8979 100644 --- a/app/components/ui/TripPlanCell.tsx +++ b/app/components/ui/TripPlanCell.tsx @@ -18,7 +18,7 @@ const TripPlanCell: React.FC = ({ plan }) => { const diffMin = Math.floor(time / 60) const diffHrs = Math.floor(diffMin / 60) - if (diffHrs < 1) return `${diffMin} minutes` + if (diffHrs < 1) return `${diffMin} minute${diffMin > 1 ? "s" : ""}` return `${diffHrs}h ${diffMin - (diffHrs * 60)}m` } From c0f31efabcfe38e3ab7d75b5b4b918f9caab80dd Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 28 Jul 2024 20:00:49 -0400 Subject: [PATCH 21/25] fix icons --- app/components/map/MapView.tsx | 37 +++++-------- .../map/markers/RoutePlanMarker.tsx | 52 +++++++++++++------ .../sheets/route_planning/InputRoute.tsx | 4 +- utils/interfaces.ts | 1 + 4 files changed, 51 insertions(+), 43 deletions(-) diff --git a/app/components/map/MapView.tsx b/app/components/map/MapView.tsx index caff336..b612d52 100644 --- a/app/components/map/MapView.tsx +++ b/app/components/map/MapView.tsx @@ -98,14 +98,15 @@ const Map: React.FC = () => { setRoutePlanMapMarkers([ { - icon: , + icon: , latitude: polyline[polyline.length-1]!.latitude, longitude: polyline[polyline.length-1]!.longitude }, { - icon: , + icon: , latitude: polyline[0]!.latitude, - longitude: polyline[0]!.longitude + longitude: polyline[0]!.longitude, + isOrigin: true } ]); }, [selectedRoutePlan]) @@ -159,7 +160,7 @@ const Map: React.FC = () => { } else { setRoutePlanMapMarkers([ { - icon: , + icon: , latitude: lastPoint.latitude, longitude: lastPoint.longitude } @@ -176,29 +177,17 @@ const Map: React.FC = () => { return; } else { - var icon = ; - if (selectedRoutePlanPathPart != -1) { - if (selectedRoutePlan?.instructions[selectedRoutePlanPathPart]!.className === "bus") { - icon = - } - if (selectedRoutePlan?.instructions[selectedRoutePlanPathPart]!.className === "walking") { - icon = - } - if (selectedRoutePlan?.instructions[selectedRoutePlanPathPart]!.className === "waiting") { - icon = - } - } - setRoutePlanMapMarkers([ { - icon: , + icon:, latitude: highlighted[highlighted.length-1]!.latitude, longitude: highlighted[highlighted.length-1]!.longitude }, { - icon: icon, + icon: , latitude: highlighted[0]!.latitude, - longitude: highlighted[0]!.longitude + longitude: highlighted[0]!.longitude, + isOrigin: true } ]); } @@ -207,9 +196,9 @@ const Map: React.FC = () => { mapViewRef.current?.fitToCoordinates(highlighted, { edgePadding: { top: Dimensions.get("window").height * 0.05, - right: 60, + right: 40, bottom: Dimensions.get("window").height * 0.45 + 8, - left: 60 + left: 40 }, animated: true }); @@ -272,9 +261,9 @@ const Map: React.FC = () => { mapViewRef.current?.fitToCoordinates(coords, { edgePadding: { top: Dimensions.get("window").height * 0.05, - right: 60, + right: 40, bottom: Dimensions.get("window").height * 0.45 + 8, - left: 60 + left: 40 }, animated: true }); diff --git a/app/components/map/markers/RoutePlanMarker.tsx b/app/components/map/markers/RoutePlanMarker.tsx index 38b7be5..a167b3e 100644 --- a/app/components/map/markers/RoutePlanMarker.tsx +++ b/app/components/map/markers/RoutePlanMarker.tsx @@ -25,23 +25,41 @@ const RoutePlanMarker: React.FC = ({ marker }) => { anchor={{x: 1, y: 1}} pointerEvents="auto" > - - {marker.icon} - + { marker.isOrigin ? ( + + {marker.icon} + + ) : ( + + {marker.icon} + + )} ); }; diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx index f68219b..20fb162 100644 --- a/app/components/sheets/route_planning/InputRoute.tsx +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -130,7 +130,7 @@ const InputRoute: React.FC = ({ sheetRef }) => { }} icon={(startLocation?.type == "my-location") ? - : + : } setSuggestionLoading={setSearchSuggestionsLoading} /> @@ -149,7 +149,7 @@ const InputRoute: React.FC = ({ sheetRef }) => { }} icon={(endLocation?.type == "my-location") ? - : + : } setSuggestionLoading={setSearchSuggestionsLoading} /> diff --git a/utils/interfaces.ts b/utils/interfaces.ts index f156002..2335db1 100644 --- a/utils/interfaces.ts +++ b/utils/interfaces.ts @@ -434,4 +434,5 @@ export interface RoutePlanMapMarker { latitude: number longitude: number icon: React.JSX.Element + isOrigin?: boolean } \ No newline at end of file From a4170488acebe2a49c506944ccd5ed3b86e00248 Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 28 Jul 2024 20:17:21 -0400 Subject: [PATCH 22/25] remove unneeded import --- app/components/sheets/route_planning/InputRoute.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/sheets/route_planning/InputRoute.tsx b/app/components/sheets/route_planning/InputRoute.tsx index 20fb162..17bf301 100644 --- a/app/components/sheets/route_planning/InputRoute.tsx +++ b/app/components/sheets/route_planning/InputRoute.tsx @@ -5,7 +5,7 @@ import Ionicons from '@expo/vector-icons/Ionicons'; import useAppStore from "../../../data/app_state"; import SheetHeader from "../../ui/SheetHeader"; import { MyLocationSuggestion, SearchSuggestion } from "utils/interfaces"; -import { FontAwesome6, MaterialCommunityIcons } from "@expo/vector-icons"; +import { MaterialCommunityIcons } from "@expo/vector-icons"; import SuggestionInput from "app/components/ui/SuggestionInput"; import SegmentedControl from "@react-native-segmented-control/segmented-control"; import TimeInput from "app/components/ui/TimeInput"; From 229baf755b61fe1f2dfd0b99e4c1fd2298e9a068 Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 28 Jul 2024 21:45:10 -0400 Subject: [PATCH 23/25] remove checkered flag --- app/components/map/MapView.tsx | 4 ++-- app/components/sheets/route_planning/TripPlanDetail.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/components/map/MapView.tsx b/app/components/map/MapView.tsx index 373fb58..9d2d0dd 100644 --- a/app/components/map/MapView.tsx +++ b/app/components/map/MapView.tsx @@ -152,7 +152,7 @@ const Map: React.FC = () => { if (lastPoint.pathIndex == selectedRoutePlanPath.length - 1) { setRoutePlanMapMarkers([ { - icon: , + icon: , latitude: lastPoint.latitude, longitude: lastPoint.longitude } @@ -356,7 +356,7 @@ const Map: React.FC = () => { tintColor={selectedRoute?.directionList[0]?.lineColor ?? "#FFFF"} active={patternPath.directionKey === selectedRouteDirection} route={selectedRoute} - direction={patternPath.directionKey} + direction={selectedRoute?.directionList[0]!.direction} isCalloutShown={poppedUpStopCallout?.stopCode === stop.stopCode} /> ); diff --git a/app/components/sheets/route_planning/TripPlanDetail.tsx b/app/components/sheets/route_planning/TripPlanDetail.tsx index d96bc6d..1c85eab 100644 --- a/app/components/sheets/route_planning/TripPlanDetail.tsx +++ b/app/components/sheets/route_planning/TripPlanDetail.tsx @@ -7,7 +7,7 @@ import SheetHeader from "../../ui/SheetHeader"; import Timeline from "react-native-timeline-flatlist"; import { IOptionDetail, IWalkingInstruction } from "utils/interfaces"; import RenderHTML from "react-native-render-html"; -import { FontAwesome6 } from "@expo/vector-icons"; +import { FontAwesome6, MaterialCommunityIcons } from "@expo/vector-icons"; interface SheetProps { @@ -69,7 +69,7 @@ const TripPlanDetail: React.FC = ({ sheetRef }) => { icon = break; case "end": - icon = + icon = break; case "waiting": icon = From bcac614af6ee24adaca0d2cb0ee8e914c5ef4a6e Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 28 Jul 2024 21:45:27 -0400 Subject: [PATCH 24/25] remove fa import --- app/components/sheets/route_planning/TripPlanDetail.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/sheets/route_planning/TripPlanDetail.tsx b/app/components/sheets/route_planning/TripPlanDetail.tsx index 1c85eab..e4570e8 100644 --- a/app/components/sheets/route_planning/TripPlanDetail.tsx +++ b/app/components/sheets/route_planning/TripPlanDetail.tsx @@ -7,7 +7,7 @@ import SheetHeader from "../../ui/SheetHeader"; import Timeline from "react-native-timeline-flatlist"; import { IOptionDetail, IWalkingInstruction } from "utils/interfaces"; import RenderHTML from "react-native-render-html"; -import { FontAwesome6, MaterialCommunityIcons } from "@expo/vector-icons"; +import { MaterialCommunityIcons } from "@expo/vector-icons"; interface SheetProps { From f8a7de990208042935165ef046d67bfc7ce34af7 Mon Sep 17 00:00:00 2001 From: bwees Date: Sun, 28 Jul 2024 21:46:52 -0400 Subject: [PATCH 25/25] fix direction keys --- app/components/map/MapView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/map/MapView.tsx b/app/components/map/MapView.tsx index 9d2d0dd..b768126 100644 --- a/app/components/map/MapView.tsx +++ b/app/components/map/MapView.tsx @@ -356,7 +356,7 @@ const Map: React.FC = () => { tintColor={selectedRoute?.directionList[0]?.lineColor ?? "#FFFF"} active={patternPath.directionKey === selectedRouteDirection} route={selectedRoute} - direction={selectedRoute?.directionList[0]!.direction} + direction={selectedRoute?.directionList[0]!.direction.key} isCalloutShown={poppedUpStopCallout?.stopCode === stop.stopCode} /> );