From 25f60afb91b035ad18d7a777ba5be7890e888a8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Fri, 22 Mar 2024 23:41:51 +0100 Subject: [PATCH] feat: authentication (register, login, logout) --- .gitlab-ci.yml | 1 + app/(pages)/_layout.tsx | 93 +- app/(pages)/application/_layout.tsx | 61 + .../{ => application}/habits/history.tsx | 0 .../{ => application}/habits/index.tsx | 4 +- app/(pages)/{ => application}/habits/new.tsx | 0 app/(pages)/application/users/settings.tsx | 38 + app/(pages)/authentication/_layout.tsx | 42 + app/(pages)/authentication/login.tsx | 113 +- app/(pages)/authentication/register.tsx | 168 +- app/(pages)/index.tsx | 25 +- app/(pages)/users/settings.tsx | 20 - app/_layout.tsx | 78 +- docs/MLD.md | 3 +- domain/entities/User.ts | 5 +- domain/repositories/Authentication.ts | 12 + domain/use-cases/Authentication.ts | 57 + infrastructure/index.ts | 12 + .../supabase/lib/AuthenticationRepository.ts | 86 + .../supabase/lib/GetHabitProgressHistory.ts | 4 +- .../supabase/lib/GetHabitsByUserId.ts | 14 +- .../20240315152340_initial_schema.sql | 88 +- infrastructure/repositories/supabase/seed.sql | 4 +- .../repositories/supabase/supabase.ts | 25 + package-lock.json | 2036 ++++++++++------- package.json | 26 +- presentation/assets/fonts/Canterbury.ttf | Bin 51256 -> 0 bytes presentation/assets/fonts/Georama-Black.ttf | Bin 144596 -> 0 bytes .../assets/fonts/SpaceMono-Regular.ttf | Bin 93252 -> 0 bytes presentation/presenters/Authentication.ts | 151 ++ presentation/presenters/HabitsTracker.ts | 24 +- presentation/presenters/_Presenter.ts | 27 +- presentation/presenters/utils/ZodPresenter.ts | 7 + presentation/react/components/TabBarIcon.tsx | 13 + .../react/contexts/Authentication.tsx | 56 + presentation/react/contexts/HabitsTracker.tsx | 19 +- 36 files changed, 2088 insertions(+), 1224 deletions(-) create mode 100644 app/(pages)/application/_layout.tsx rename app/(pages)/{ => application}/habits/history.tsx (100%) rename app/(pages)/{ => application}/habits/index.tsx (89%) rename app/(pages)/{ => application}/habits/new.tsx (100%) create mode 100644 app/(pages)/application/users/settings.tsx create mode 100644 app/(pages)/authentication/_layout.tsx delete mode 100644 app/(pages)/users/settings.tsx create mode 100644 domain/repositories/Authentication.ts create mode 100644 domain/use-cases/Authentication.ts create mode 100644 infrastructure/repositories/supabase/lib/AuthenticationRepository.ts delete mode 100755 presentation/assets/fonts/Canterbury.ttf delete mode 100755 presentation/assets/fonts/Georama-Black.ttf delete mode 100755 presentation/assets/fonts/SpaceMono-Regular.ttf create mode 100644 presentation/presenters/Authentication.ts create mode 100644 presentation/presenters/utils/ZodPresenter.ts create mode 100644 presentation/react/components/TabBarIcon.tsx create mode 100644 presentation/react/contexts/Authentication.tsx diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fdb56bd..9e39bdb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -11,6 +11,7 @@ test: - "develop" script: - "npm clean-install" + - "npm run expo:typed-routes" - 'echo "${CI_COMMIT_MESSAGE}" | npm run lint:commit' - "npm run lint:prettier" - "npm run lint:eslint" diff --git a/app/(pages)/_layout.tsx b/app/(pages)/_layout.tsx index 81e0c96..8b5f90e 100644 --- a/app/(pages)/_layout.tsx +++ b/app/(pages)/_layout.tsx @@ -1,92 +1,7 @@ -import FontAwesome from "@expo/vector-icons/FontAwesome" -import { Tabs } from "expo-router" -import React from "react" +import { Slot } from "expo-router" -/** - * @see https://icons.expo.fyi/ - * @param props - * @returns - */ -const TabBarIcon: React.FC<{ - name: React.ComponentProps["name"] - color: string -}> = (props) => { - return +const Layout: React.FC = () => { + return } -const TabLayout: React.FC = () => { - return ( - - { - return - }, - }} - /> - { - return - }, - }} - /> - { - return - }, - }} - /> - { - return - }, - }} - /> - { - return - }, - }} - /> - { - return - }, - }} - /> - { - return - }, - }} - /> - - ) -} - -export default TabLayout +export default Layout diff --git a/app/(pages)/application/_layout.tsx b/app/(pages)/application/_layout.tsx new file mode 100644 index 0000000..9a0133f --- /dev/null +++ b/app/(pages)/application/_layout.tsx @@ -0,0 +1,61 @@ +import { Redirect, Tabs } from "expo-router" +import React from "react" + +import { TabBarIcon } from "@/presentation/react/components/TabBarIcon" +import { useAuthentication } from "@/presentation/react/contexts/Authentication" + +const TabLayout: React.FC = () => { + const { user } = useAuthentication() + + if (user == null) { + return + } + + return ( + + { + return + }, + }} + /> + { + return + }, + }} + /> + { + return + }, + }} + /> + { + return + }, + }} + /> + + ) +} + +export default TabLayout diff --git a/app/(pages)/habits/history.tsx b/app/(pages)/application/habits/history.tsx similarity index 100% rename from app/(pages)/habits/history.tsx rename to app/(pages)/application/habits/history.tsx diff --git a/app/(pages)/habits/index.tsx b/app/(pages)/application/habits/index.tsx similarity index 89% rename from app/(pages)/habits/index.tsx rename to app/(pages)/application/habits/index.tsx index 1c5609b..c22ff21 100644 --- a/app/(pages)/habits/index.tsx +++ b/app/(pages)/application/habits/index.tsx @@ -13,7 +13,9 @@ const HabitsPage: React.FC = () => { return ( - {habit.name} + + {habit.name} ({habit.goal.type}) + ) })} diff --git a/app/(pages)/habits/new.tsx b/app/(pages)/application/habits/new.tsx similarity index 100% rename from app/(pages)/habits/new.tsx rename to app/(pages)/application/habits/new.tsx diff --git a/app/(pages)/application/users/settings.tsx b/app/(pages)/application/users/settings.tsx new file mode 100644 index 0000000..dc59f25 --- /dev/null +++ b/app/(pages)/application/users/settings.tsx @@ -0,0 +1,38 @@ +import { StyleSheet, Text } from "react-native" +import { Button } from "react-native-paper" +import { SafeAreaView } from "react-native-safe-area-context" + +import { useAuthentication } from "@/presentation/react/contexts/Authentication" + +const SettingsPage: React.FC = () => { + const { logout, authenticationPresenter } = useAuthentication() + + const handleLogout = async (): Promise => { + await authenticationPresenter.logout() + } + + return ( + + Settings + + + + ) +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + alignItems: "center", + justifyContent: "center", + }, +}) + +export default SettingsPage diff --git a/app/(pages)/authentication/_layout.tsx b/app/(pages)/authentication/_layout.tsx new file mode 100644 index 0000000..152f67f --- /dev/null +++ b/app/(pages)/authentication/_layout.tsx @@ -0,0 +1,42 @@ +import { Redirect, Tabs } from "expo-router" +import React from "react" + +import { TabBarIcon } from "@/presentation/react/components/TabBarIcon" +import { useAuthentication } from "@/presentation/react/contexts/Authentication" + +const TabLayout: React.FC = () => { + const { user } = useAuthentication() + + if (user != null) { + return + } + + return ( + + { + return + }, + }} + /> + { + return + }, + }} + /> + + ) +} + +export default TabLayout diff --git a/app/(pages)/authentication/login.tsx b/app/(pages)/authentication/login.tsx index ddaa9d9..896dc9b 100644 --- a/app/(pages)/authentication/login.tsx +++ b/app/(pages)/authentication/login.tsx @@ -1,58 +1,78 @@ -import { useState } from "react" -import { Image, StyleSheet } from "react-native" -import { - ActivityIndicator, - Banner, - Button, - HelperText, - TextInput, -} from "react-native-paper" +import { Controller, useForm } from "react-hook-form" +import { StyleSheet } from "react-native" +import { Button, HelperText, TextInput } from "react-native-paper" import { SafeAreaView } from "react-native-safe-area-context" +import type { UserLoginData } from "@/domain/entities/User" +import { useAuthentication } from "@/presentation/react/contexts/Authentication" + const LoginPage: React.FC = () => { - const [hasError, _sethasError] = useState(true) + const { login, authenticationPresenter } = useAuthentication() - const [errorMessage, _setErrorMessage] = useState("Error message") + const { control, handleSubmit } = useForm({ + defaultValues: { + email: "", + password: "", + }, + }) - const [isPerfomingLogin, _setIsPerfomingLogin] = useState(true) + const onSubmit = async (data: unknown): Promise => { + await authenticationPresenter.login(data) + } return ( - { + { return ( - ) }} - > - There was an error while trying to login. - - - - - {errorMessage} - - - + + { + return ( + + ) + }} + name="password" + /> + + + Invalid credentials. + + + ) } @@ -67,12 +87,9 @@ const styles = StyleSheet.create({ width: "80%", marginBottom: 10, }, - errorText: { - marginBottom: 10, - }, - indicator: { - marginTop: 10, - marginBottom: 10, + helperText: { + fontSize: 18, + marginVertical: 20, }, }) diff --git a/app/(pages)/authentication/register.tsx b/app/(pages)/authentication/register.tsx index 16363d7..e496de8 100644 --- a/app/(pages)/authentication/register.tsx +++ b/app/(pages)/authentication/register.tsx @@ -1,82 +1,115 @@ -import { useState } from "react" -import { Image, StyleSheet } from "react-native" -import { Banner, Button, HelperText, TextInput } from "react-native-paper" +import { Controller, useForm } from "react-hook-form" +import { StyleSheet } from "react-native" +import { Button, HelperText, TextInput } from "react-native-paper" import { SafeAreaView } from "react-native-safe-area-context" +import { useMemo } from "react" + +import type { UserRegisterData } from "@/domain/entities/User" +import { useAuthentication } from "@/presentation/react/contexts/Authentication" const RegisterPage: React.FC = () => { - const regexEmail = /^[\w.-]+@[\d.A-Za-z-]+\.[A-Za-z]{2,4}$/ + const { register, authenticationPresenter } = useAuthentication() - const [password, setPassword] = useState("") - const [isPasswordCorrect, setIsPasswordCorrect] = useState(true) - const [isEmailValid, setIsEmailValid] = useState(true) + const { control, handleSubmit } = useForm({ + defaultValues: { + displayName: "", + email: "", + password: "", + }, + }) + + const onSubmit = async (data: unknown): Promise => { + await authenticationPresenter.register(data) + } + + const helperMessage = useMemo(() => { + if (register.state === "error") { + if (register.errorsFields.includes("displayName")) { + return "Display Name is required." + } + if (register.errorsFields.includes("email")) { + return "Invalid email." + } + if (register.errorsFields.includes("password")) { + return "Password must be at least 6 characters." + } + return "Invalid credentials." + } + + // if (register.state === "success") { + // return "Success! Please verify your email." + // } + + return "" + }, [register.errorsFields, register.state]) return ( - { - return console.log("Pressed") - }, - }, - ]} - icon={({ size }) => { + { return ( - ) }} + name="displayName" + /> + + { + return ( + + ) + }} + name="email" + /> + + { + return ( + + ) + }} + name="password" + /> + + - There was an error while trying to register. - - - { - setIsEmailValid(regexEmail.test(text)) - }} - /> - {isEmailValid ? null : ( - - Email address is invalid! - - )} - { - setPassword(text) - console.log(text) - }} - /> - { - setIsPasswordCorrect(text === password) - }} - /> - - Error message + {helperMessage} + @@ -92,10 +125,11 @@ const styles = StyleSheet.create({ }, input: { width: "80%", - margin: 10, + marginBottom: 10, }, - errorText: { - margin: 10, + helperText: { + fontSize: 18, + marginVertical: 20, }, }) diff --git a/app/(pages)/index.tsx b/app/(pages)/index.tsx index b02cf0a..33e8657 100644 --- a/app/(pages)/index.tsx +++ b/app/(pages)/index.tsx @@ -1,20 +1,15 @@ -import { StyleSheet, Text } from "react-native" -import { SafeAreaView } from "react-native-safe-area-context" +import { Redirect } from "expo-router" + +import { useAuthentication } from "@/presentation/react/contexts/Authentication" const HomePage: React.FC = () => { - return ( - - Home Page - - ) + const { user } = useAuthentication() + + if (user == null) { + return + } + + return } -const styles = StyleSheet.create({ - container: { - flex: 1, - alignItems: "center", - justifyContent: "center", - }, -}) - export default HomePage diff --git a/app/(pages)/users/settings.tsx b/app/(pages)/users/settings.tsx deleted file mode 100644 index 9190a60..0000000 --- a/app/(pages)/users/settings.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { StyleSheet, Text } from "react-native" -import { SafeAreaView } from "react-native-safe-area-context" - -const SettingsPage: React.FC = () => { - return ( - - Settings - - ) -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - alignItems: "center", - justifyContent: "center", - }, -}) - -export default SettingsPage diff --git a/app/_layout.tsx b/app/_layout.tsx index 92e8c93..8b0adca 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -1,17 +1,17 @@ -import { useFonts } from "expo-font" import { Stack } from "expo-router" import * as SplashScreen from "expo-splash-screen" -import { useEffect } from "react" import { MD3LightTheme as DefaultTheme, PaperProvider, } from "react-native-paper" import { StatusBar } from "expo-status-bar" +import { useEffect } from "react" -import CanterburyFont from "../presentation/assets/fonts/Canterbury.ttf" -import GeoramFont from "../presentation/assets/fonts/Georama-Black.ttf" -import SpaceMonoFont from "../presentation/assets/fonts/SpaceMono-Regular.ttf" import { HabitsTrackerProvider } from "@/presentation/react/contexts/HabitsTracker" +import { + AuthenticationProvider, + useAuthentication, +} from "@/presentation/react/contexts/Authentication" export { ErrorBoundary } from "expo-router" @@ -23,54 +23,52 @@ SplashScreen.preventAutoHideAsync().catch((error) => { console.error(error) }) -const RootLayout: React.FC = () => { - const [loaded, error] = useFonts({ - Georama: GeoramFont, - SpaceMono: SpaceMonoFont, - Canterbury: CanterburyFont, - }) +const StackLayout: React.FC = () => { + const { hasLoaded } = useAuthentication() useEffect(() => { - if (error != null) { - throw error - } - }, [error]) - - useEffect(() => { - if (loaded) { + if (!hasLoaded) { SplashScreen.hideAsync().catch((error) => { console.error(error) }) } - }, [loaded]) + }, [hasLoaded]) - if (!loaded) { - return null + if (hasLoaded) { + return <> } return ( - - - + + + ) +} + +const RootLayout: React.FC = () => { + return ( + + + - - + - - - + + + + ) } diff --git a/docs/MLD.md b/docs/MLD.md index 8d878ae..c617260 100644 --- a/docs/MLD.md +++ b/docs/MLD.md @@ -10,8 +10,7 @@ On représente ainsi les données sous la forme suivante: - Le nom de la table est écrit en **gras**. - Les champs sont listés en dessous du nom de la table. - Les clés primaires sont soulignées et placées au début de la liste des champs. -- Les clés étrangères sont préfixées par un dièse (#), et placées après les clés primaires. Les clés étrangères sont - suivies entre parenthèses du nom de la table suivi d'une flèche (->) et du nom du champ de la table référencée. +- Les clés étrangères sont préfixées par un dièse (#), et placées après les clés primaires. Les clés étrangères sont suivies entre parenthèses du nom de la table suivi d'une flèche (->) et du nom du champ de la table référencée. ## Modèle diff --git a/domain/entities/User.ts b/domain/entities/User.ts index 2b6fed1..e50c9eb 100644 --- a/domain/entities/User.ts +++ b/domain/entities/User.ts @@ -8,10 +8,13 @@ export const UserSchema = EntitySchema.extend({ }) export const UserRegisterSchema = UserSchema.extend({ - password: z.string().min(2), + password: z.string().min(6), }).omit({ id: true }) export type UserRegisterData = z.infer +export const UserLoginSchema = UserRegisterSchema.omit({ displayName: true }) +export type UserLoginData = z.infer + export type UserData = z.infer export class User extends Entity implements UserData { diff --git a/domain/repositories/Authentication.ts b/domain/repositories/Authentication.ts new file mode 100644 index 0000000..d7d2db6 --- /dev/null +++ b/domain/repositories/Authentication.ts @@ -0,0 +1,12 @@ +import type { User, UserLoginData, UserRegisterData } from "../entities/User" + +export interface AuthenticationRepository { + register: (data: UserRegisterData) => Promise + login: (data: UserLoginData) => Promise + logout: () => Promise + + getUser: () => Promise + onUserStateChange: ( + callback: (user: User | null) => void | Promise, + ) => void +} diff --git a/domain/use-cases/Authentication.ts b/domain/use-cases/Authentication.ts new file mode 100644 index 0000000..cbc87e0 --- /dev/null +++ b/domain/use-cases/Authentication.ts @@ -0,0 +1,57 @@ +import { + UserRegisterSchema, + type User, + UserLoginSchema, +} from "../entities/User" +import type { AuthenticationRepository } from "../repositories/Authentication" + +export interface AuthenticationUseCaseDependencyOptions { + authenticationRepository: AuthenticationRepository +} + +export class AuthenticationUseCase + implements AuthenticationUseCaseDependencyOptions +{ + public authenticationRepository: AuthenticationRepository + + public constructor(options: AuthenticationUseCaseDependencyOptions) { + this.authenticationRepository = options.authenticationRepository + } + + /** + * Register a new user. + * @throws {ZodError} if the data is invalid. + * @throws {Error} if user already exists. + * @param data + * @returns + */ + public async register(data: unknown): Promise { + const userData = await UserRegisterSchema.parseAsync(data) + return await this.authenticationRepository.register(userData) + } + + /** + * Login a user. + * @throws {ZodError} if the data is invalid. + * @throws {Error} if invalid credentials. + * @param data + * @returns + */ + public async login(data: unknown): Promise { + const userData = await UserLoginSchema.parseAsync(data) + return await this.authenticationRepository.login(userData) + } + + public async logout(): Promise { + return await this.authenticationRepository.logout() + } + + public getUser: AuthenticationRepository["getUser"] = async (...args) => { + return await this.authenticationRepository.getUser(...args) + } + + public onUserStateChange: AuthenticationRepository["onUserStateChange"] = + async (...args) => { + return this.authenticationRepository.onUserStateChange(...args) + } +} diff --git a/infrastructure/index.ts b/infrastructure/index.ts index e681c2e..5a3aa72 100644 --- a/infrastructure/index.ts +++ b/infrastructure/index.ts @@ -1,12 +1,18 @@ +import { AuthenticationUseCase } from "@/domain/use-cases/Authentication" import { RetrieveHabitsTrackerUseCase } from "../domain/use-cases/RetrieveHabitsTracker" import { HabitsTrackerPresenter } from "../presentation/presenters/HabitsTracker" +import { AuthenticationSupabaseRepository } from "./repositories/supabase/lib/AuthenticationRepository" import { GetHabitProgressHistorySupabaseRepository } from "./repositories/supabase/lib/GetHabitProgressHistory" import { GetHabitsByUserIdSupabaseRepository } from "./repositories/supabase/lib/GetHabitsByUserId" import { supabaseClient } from "./repositories/supabase/supabase" +import { AuthenticationPresenter } from "@/presentation/presenters/Authentication" /** * Repositories */ +const authenticationRepository = new AuthenticationSupabaseRepository({ + supabaseClient, +}) const getHabitProgressesRepository = new GetHabitProgressHistorySupabaseRepository({ supabaseClient, @@ -18,6 +24,9 @@ const getHabitsByUserIdRepository = new GetHabitsByUserIdSupabaseRepository({ /** * Use Cases */ +const authenticationUseCase = new AuthenticationUseCase({ + authenticationRepository, +}) const retrieveHabitsTrackerUseCase = new RetrieveHabitsTrackerUseCase({ getHabitProgressHistoryRepository: getHabitProgressesRepository, getHabitsByUserIdRepository, @@ -26,6 +35,9 @@ const retrieveHabitsTrackerUseCase = new RetrieveHabitsTrackerUseCase({ /** * Presenters */ +export const authenticationPresenter = new AuthenticationPresenter({ + authenticationUseCase, +}) export const habitsTrackerPresenter = new HabitsTrackerPresenter({ retrieveHabitsTrackerUseCase, }) diff --git a/infrastructure/repositories/supabase/lib/AuthenticationRepository.ts b/infrastructure/repositories/supabase/lib/AuthenticationRepository.ts new file mode 100644 index 0000000..03f1604 --- /dev/null +++ b/infrastructure/repositories/supabase/lib/AuthenticationRepository.ts @@ -0,0 +1,86 @@ +import type { Session } from "@supabase/supabase-js" + +import type { AuthenticationRepository } from "@/domain/repositories/Authentication" +import { SupabaseRepository } from "./_SupabaseRepository" +import { User } from "@/domain/entities/User" + +export class AuthenticationSupabaseRepository + extends SupabaseRepository + implements AuthenticationRepository +{ + private readonly getUserFromSession = (session: Session | null): User => { + if (session == null || session?.user?.email == null) { + throw new Error("Session is null.") + } + const user = new User({ + id: session.user.id, + displayName: session.user.user_metadata["display_name"], + email: session.user.email, + }) + return user + } + + public register: AuthenticationRepository["register"] = async (data) => { + const { displayName, email, password } = data + const { + data: { session }, + error, + } = await this.supabaseClient.auth.signUp({ + email, + password, + options: { + data: { display_name: displayName }, + }, + }) + if (error != null) { + throw new Error(error.message) + } + const user = this.getUserFromSession(session) + return user + } + + public login: AuthenticationRepository["login"] = async (data) => { + const { email, password } = data + const { + data: { session }, + error, + } = await this.supabaseClient.auth.signInWithPassword({ + email, + password, + }) + if (error != null) { + throw new Error(error.message) + } + const user = this.getUserFromSession(session) + return user + } + + public logout: AuthenticationRepository["logout"] = async () => { + await this.supabaseClient.auth.signOut() + } + + public getUser: AuthenticationRepository["getUser"] = async () => { + try { + const { + data: { session }, + } = await this.supabaseClient.auth.getSession() + const user = this.getUserFromSession(session) + return user + } catch { + return null + } + } + + public onUserStateChange: AuthenticationRepository["onUserStateChange"] = ( + callback, + ) => { + this.supabaseClient.auth.onAuthStateChange(async (_, session) => { + try { + const user = this.getUserFromSession(session) + await callback(user) + } catch { + await callback(null) + } + }) + } +} diff --git a/infrastructure/repositories/supabase/lib/GetHabitProgressHistory.ts b/infrastructure/repositories/supabase/lib/GetHabitProgressHistory.ts index c2acc5e..9e5c1f0 100644 --- a/infrastructure/repositories/supabase/lib/GetHabitProgressHistory.ts +++ b/infrastructure/repositories/supabase/lib/GetHabitProgressHistory.ts @@ -11,7 +11,9 @@ export class GetHabitProgressHistorySupabaseRepository extends SupabaseRepository implements GetHabitProgressHistoryRepository { - execute: GetHabitProgressHistoryRepository["execute"] = async (options) => { + public execute: GetHabitProgressHistoryRepository["execute"] = async ( + options, + ) => { const { habit } = options const { data, error } = await this.supabaseClient .from("habits_progresses") diff --git a/infrastructure/repositories/supabase/lib/GetHabitsByUserId.ts b/infrastructure/repositories/supabase/lib/GetHabitsByUserId.ts index 704af53..3d9c022 100644 --- a/infrastructure/repositories/supabase/lib/GetHabitsByUserId.ts +++ b/infrastructure/repositories/supabase/lib/GetHabitsByUserId.ts @@ -8,14 +8,12 @@ export class GetHabitsByUserIdSupabaseRepository extends SupabaseRepository implements GetHabitsByUserIdRepository { - // execute: GetHabitsByUserIdRepository["execute"] = async (options) => { - // const { userId } = options - // const { data, error } = await this.supabaseClient - // .from("habits") - // .select("*") - // .eq("user_id", userId) - execute: GetHabitsByUserIdRepository["execute"] = async () => { - const { data, error } = await this.supabaseClient.from("habits").select("*") + public execute: GetHabitsByUserIdRepository["execute"] = async (options) => { + const { userId } = options + const { data, error } = await this.supabaseClient + .from("habits") + .select("*") + .eq("user_id", userId) if (error != null) { throw new Error(error.message) } diff --git a/infrastructure/repositories/supabase/migrations/20240315152340_initial_schema.sql b/infrastructure/repositories/supabase/migrations/20240315152340_initial_schema.sql index b14c4bf..b2016bf 100644 --- a/infrastructure/repositories/supabase/migrations/20240315152340_initial_schema.sql +++ b/infrastructure/repositories/supabase/migrations/20240315152340_initial_schema.sql @@ -10,7 +10,7 @@ CREATE TABLE "public"."habits" ( "goal_frequency" goal_frequency NOT NULL, "goal_target" bigint, "goal_target_unit" text, - "user_id" uuid NOT NULL DEFAULT gen_random_uuid() + "user_id" uuid NOT NULL DEFAULT auth.uid() ); ALTER TABLE @@ -190,115 +190,85 @@ GRANT UPDATE ON TABLE "public"."habits_progresses" TO "service_role"; -CREATE policy "Enable delete for users based on user_id" ON "public"."habits" AS permissive FOR DELETE TO public USING ((auth.uid() = user_id)); +CREATE policy "Enable delete for users based on user_id" ON "public"."habits" AS permissive FOR DELETE TO authenticated USING ((auth.uid() = user_id)); CREATE policy "Enable insert for users based on user_id" ON "public"."habits" AS permissive FOR INSERT - TO public WITH CHECK ((auth.uid() = user_id)); + TO authenticated WITH CHECK ((auth.uid() = user_id)); CREATE policy "Enable select for users based on user_id" ON "public"."habits" AS permissive FOR SELECT - TO public USING ((auth.uid() = user_id)); + TO authenticated USING ((auth.uid() = user_id)); CREATE policy "Enable update for users based on user_id" ON "public"."habits" AS permissive FOR UPDATE - TO public USING ((auth.uid() = user_id)) WITH CHECK ((auth.uid() = user_id)); + TO authenticated USING ((auth.uid() = user_id)) WITH CHECK ((auth.uid() = user_id)); -CREATE policy "Enable delete for users based on user_id" ON "public"."habits_progresses" AS permissive FOR DELETE TO public USING ( +CREATE policy "Enable delete for users based on user_id" ON "public"."habits_progresses" AS permissive FOR DELETE TO authenticated USING ( ( - EXISTS ( + auth.uid() IN ( SELECT - 1 + habits.user_id FROM - ( - habits_progresses habit_progress - JOIN habits habit ON ((habit_progress.habit_id = habit.id)) - ) + habits WHERE - ( - (habit_progress.id = habits_progresses.id) - AND (habit.user_id = auth.uid()) - ) + (habits_progresses.habit_id = habits.id) ) ) ); CREATE policy "Enable insert for users based on user_id" ON "public"."habits_progresses" AS permissive FOR INSERT - TO public WITH CHECK ( + TO authenticated WITH CHECK ( ( - EXISTS ( + auth.uid() IN ( SELECT - 1 + habits.user_id FROM - ( - habits_progresses habit_progress - JOIN habits habit ON ((habit_progress.habit_id = habit.id)) - ) + habits WHERE - ( - (habit_progress.id = habits_progresses.id) - AND (habit.user_id = auth.uid()) - ) + (habits_progresses.habit_id = habits.id) ) ) ); CREATE policy "Enable select for users based on user_id" ON "public"."habits_progresses" AS permissive FOR SELECT - TO public USING ( + TO authenticated USING ( ( - EXISTS ( + auth.uid() IN ( SELECT - 1 + habits.user_id FROM - ( - habits_progresses habit_progress - JOIN habits habit ON ((habit_progress.habit_id = habit.id)) - ) + habits WHERE - ( - (habit_progress.id = habits_progresses.id) - AND (habit.user_id = auth.uid()) - ) + (habits_progresses.habit_id = habits.id) ) ) ); CREATE policy "Enable update for users based on user_id" ON "public"."habits_progresses" AS permissive FOR UPDATE - TO public USING ( + TO authenticated USING ( ( - EXISTS ( + auth.uid() IN ( SELECT - 1 + habits.user_id FROM - ( - habits_progresses habit_progress - JOIN habits habit ON ((habit_progress.habit_id = habit.id)) - ) + habits WHERE - ( - (habit_progress.id = habits_progresses.id) - AND (habit.user_id = auth.uid()) - ) + (habits_progresses.habit_id = habits.id) ) ) ) WITH CHECK ( ( - EXISTS ( + auth.uid() IN ( SELECT - 1 + habits.user_id FROM - ( - habits_progresses habit_progress - JOIN habits habit ON ((habit_progress.habit_id = habit.id)) - ) + habits WHERE - ( - (habit_progress.id = habits_progresses.id) - AND (habit.user_id = auth.uid()) - ) + (habits_progresses.habit_id = habits.id) ) ) ); diff --git a/infrastructure/repositories/supabase/seed.sql b/infrastructure/repositories/supabase/seed.sql index 05bfda9..bb7f5b5 100644 --- a/infrastructure/repositories/supabase/seed.sql +++ b/infrastructure/repositories/supabase/seed.sql @@ -55,7 +55,7 @@ VALUES NULL, NULL, '{"provider": "email", "providers": ["email"]}', - '{}', + '{"display_name": "Test"}', NULL, timezone('utc' :: text, NOW()), timezone('utc' :: text, NOW()), @@ -88,7 +88,7 @@ VALUES ( 'ab054ee9-fbb4-473e-942b-bbf4415f4bef', 'ab054ee9-fbb4-473e-942b-bbf4415f4bef', - '{"sub": "ab054ee9-fbb4-473e-942b-bbf4415f4bef", "email": "test@test.com", "display_name": "Test"}', + '{"sub": "ab054ee9-fbb4-473e-942b-bbf4415f4bef", "email": "test@test.com"}', 'email', 'ab054ee9-fbb4-473e-942b-bbf4415f4bef', timezone('utc' :: text, NOW()), diff --git a/infrastructure/repositories/supabase/supabase.ts b/infrastructure/repositories/supabase/supabase.ts index d675558..6f5812d 100644 --- a/infrastructure/repositories/supabase/supabase.ts +++ b/infrastructure/repositories/supabase/supabase.ts @@ -1,4 +1,7 @@ import { createClient } from "@supabase/supabase-js" +import { AppState, Platform } from "react-native" +import "react-native-url-polyfill/auto" +import AsyncStorage from "@react-native-async-storage/async-storage" import type { Database } from "./supabase-types" @@ -8,4 +11,26 @@ const SUPABASE_ANON_KEY = process.env["EXPO_PUBLIC_SUPABASE_ANON_KEY"] ?? "" export const supabaseClient = createClient( SUPABASE_URL, SUPABASE_ANON_KEY, + { + auth: { + // https://github.com/supabase/supabase-js/issues/870 + ...(Platform.OS !== "web" ? { storage: AsyncStorage } : {}), + autoRefreshToken: true, + persistSession: true, + detectSessionInUrl: false, + }, + }, ) + +/** + * Tells Supabase Auth to continuously refresh the session automatically if the app is in the foreground. + * When this is added, you will continue to receive `onAuthStateChange` events with the `TOKEN_REFRESH` or `SIGNED_OUT` event if the user's session is terminated. + * This should only be registered once. + */ +AppState.addEventListener("change", async (state) => { + if (state === "active") { + await supabaseClient.auth.startAutoRefresh() + } else { + await supabaseClient.auth.stopAutoRefresh() + } +}) diff --git a/package-lock.json b/package-lock.json index 0a465dd..4c6ac31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,9 +11,10 @@ "dependencies": { "@expo/vector-icons": "14.0.0", "@hookform/resolvers": "3.3.4", + "@react-native-async-storage/async-storage": "1.21.0", "@react-navigation/native": "6.1.16", "@supabase/supabase-js": "2.39.8", - "expo": "50.0.13", + "expo": "50.0.14", "expo-font": "11.10.3", "expo-linking": "6.2.2", "expo-router": "3.4.8", @@ -25,28 +26,30 @@ "react": "18.2.0", "react-dom": "18.2.0", "react-hook-form": "7.51.1", - "react-native": "0.73.5", + "react-native": "0.73.6", "react-native-calendars": "1.1304.1", + "react-native-elements": "3.4.3", "react-native-paper": "5.12.3", "react-native-safe-area-context": "4.8.2", "react-native-screens": "3.29.0", + "react-native-url-polyfill": "2.0.0", "react-native-vector-icons": "10.0.3", "react-native-web": "0.19.10", "zod": "3.22.4" }, "devDependencies": { - "@babel/core": "7.24.0", - "@commitlint/cli": "19.2.0", + "@babel/core": "7.24.3", + "@commitlint/cli": "19.1.0", "@commitlint/config-conventional": "19.1.0", - "@testing-library/react-native": "12.4.3", + "@testing-library/react-native": "12.4.4", "@total-typescript/ts-reset": "0.5.1", "@tsconfig/strictest": "2.0.3", "@types/jest": "29.5.12", - "@types/node": "20.11.28", - "@types/react": "18.2.66", + "@types/node": "20.11.30", + "@types/react": "18.2.69", "@types/react-test-renderer": "18.0.7", - "@typescript-eslint/eslint-plugin": "7.2.0", - "@typescript-eslint/parser": "7.2.0", + "@typescript-eslint/eslint-plugin": "7.3.1", + "@typescript-eslint/parser": "7.3.1", "eslint": "8.57.0", "eslint-config-conventions": "14.1.0", "eslint-config-prettier": "9.1.0", @@ -63,8 +66,8 @@ "jest-junit": "16.0.0", "lint-staged": "15.2.2", "react-test-renderer": "18.2.0", - "supabase": "1.148.6", - "typescript": "5.4.2" + "supabase": "1.150.0", + "typescript": "5.4.3" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -89,39 +92,39 @@ } }, "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.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "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.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", + "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -138,13 +141,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.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -189,16 +192,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz", - "integrity": "sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz", + "integrity": "sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -284,11 +287,11 @@ } }, "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.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -348,12 +351,12 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -397,9 +400,9 @@ } }, "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.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } @@ -434,12 +437,12 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", - "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", "dependencies": { "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", + "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0" }, "engines": { @@ -447,22 +450,23 @@ } }, "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.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "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.24.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", - "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -471,11 +475,11 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "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==", + "version": "7.24.1", + "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.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -485,13 +489,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" + "@babel/plugin-transform-optional-chaining": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -501,12 +505,12 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -550,13 +554,13 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.0.tgz", - "integrity": "sha512-LiT1RqZWeij7X+wGxCoYh3/3b8nVOX6/7BZ9wiQgAIyjoeQWdROaodJCgT+dwtbjHaz0r7bEbHJzjSbVfcOyjQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.1.tgz", + "integrity": "sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.0", + "@babel/helper-create-class-features-plugin": "^7.24.1", "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-decorators": "^7.24.0" + "@babel/plugin-syntax-decorators": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -566,12 +570,29 @@ } }, "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.23.3.tgz", - "integrity": "sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.1.tgz", + "integrity": "sha512-+0hrgGGV3xyYIjOrD/bUZk/iUwOIGuoANfRfVg1cPhYBxF+TIXSEcc42DqzBICmWsnAQ+SfKedY0bj8QD+LuMg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-default-from": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-export-default-from": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@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.", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -724,9 +745,9 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.0.tgz", - "integrity": "sha512-MXW3pQCu9gUiVGzqkGqsgiINDVYXoAnrY8FYF/rmb+OfufNF0zHMpHPN4ulRrinxYT8Vk/aZJxYqOKsDECjKAw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz", + "integrity": "sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -749,11 +770,11 @@ } }, "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.23.3.tgz", - "integrity": "sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.1.tgz", + "integrity": "sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -774,11 +795,11 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", - "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz", + "integrity": "sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -788,11 +809,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -802,11 +823,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -838,11 +859,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -946,11 +967,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -975,11 +996,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -989,12 +1010,12 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", - "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -1006,12 +1027,12 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-module-imports": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { @@ -1022,11 +1043,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1036,11 +1057,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz", + "integrity": "sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1050,12 +1071,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1065,12 +1086,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz", + "integrity": "sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1081,16 +1102,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", - "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", + "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -1102,12 +1123,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1117,11 +1138,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", + "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1131,12 +1152,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1146,11 +1167,11 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1160,11 +1181,11 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1175,12 +1196,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1190,11 +1211,11 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1205,12 +1226,12 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", - "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz", + "integrity": "sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-flow": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1220,11 +1241,11 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1235,13 +1256,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1251,11 +1272,11 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1266,11 +1287,11 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1280,11 +1301,11 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1295,11 +1316,11 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1309,12 +1330,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1324,12 +1345,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-simple-access": "^7.22.5" }, "engines": { @@ -1340,13 +1361,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", - "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { @@ -1357,12 +1378,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1387,11 +1408,11 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1401,11 +1422,11 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1416,11 +1437,11 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1431,15 +1452,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz", - "integrity": "sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", + "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", "dependencies": { - "@babel/compat-data": "^7.23.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" + "@babel/plugin-transform-parameters": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1449,12 +1469,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1464,11 +1484,11 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1479,11 +1499,11 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", + "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1495,11 +1515,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", + "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1509,12 +1529,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1524,13 +1544,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", + "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1541,11 +1561,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1555,11 +1575,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", - "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz", + "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1601,11 +1621,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", - "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", + "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1615,11 +1635,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", - "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", + "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1629,12 +1649,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", - "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz", + "integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1644,11 +1664,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1659,11 +1679,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1673,15 +1693,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", - "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", + "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-module-imports": "^7.24.3", "@babel/helper-plugin-utils": "^7.24.0", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, "engines": { @@ -1692,11 +1712,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1706,11 +1726,11 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1721,11 +1741,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1735,11 +1755,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1749,11 +1769,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", + "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1763,14 +1783,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", - "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.1.tgz", + "integrity": "sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.23.3" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-typescript": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1780,11 +1800,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1794,12 +1814,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1809,12 +1829,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1824,12 +1844,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1839,25 +1859,25 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", - "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.3.tgz", + "integrity": "sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA==", "dependencies": { - "@babel/compat-data": "^7.23.5", + "@babel/compat-data": "^7.24.1", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-assertions": "^7.24.1", + "@babel/plugin-syntax-import-attributes": "^7.24.1", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1869,58 +1889,58 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.24.1", + "@babel/plugin-transform-async-generator-functions": "^7.24.3", + "@babel/plugin-transform-async-to-generator": "^7.24.1", + "@babel/plugin-transform-block-scoped-functions": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.1", + "@babel/plugin-transform-class-properties": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.1", + "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-computed-properties": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-dotall-regex": "^7.24.1", + "@babel/plugin-transform-duplicate-keys": "^7.24.1", + "@babel/plugin-transform-dynamic-import": "^7.24.1", + "@babel/plugin-transform-exponentiation-operator": "^7.24.1", + "@babel/plugin-transform-export-namespace-from": "^7.24.1", + "@babel/plugin-transform-for-of": "^7.24.1", + "@babel/plugin-transform-function-name": "^7.24.1", + "@babel/plugin-transform-json-strings": "^7.24.1", + "@babel/plugin-transform-literals": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-member-expression-literals": "^7.24.1", + "@babel/plugin-transform-modules-amd": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-modules-systemjs": "^7.24.1", + "@babel/plugin-transform-modules-umd": "^7.24.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.24.0", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-new-target": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-numeric-separator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-super": "^7.24.1", + "@babel/plugin-transform-optional-catch-binding": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.1", + "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-private-methods": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-property-literals": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-reserved-words": "^7.24.1", + "@babel/plugin-transform-shorthand-properties": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-sticky-regex": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-unicode-escapes": "^7.24.1", + "@babel/plugin-transform-unicode-property-regex": "^7.24.1", + "@babel/plugin-transform-unicode-regex": "^7.24.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1932,13 +1952,13 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.0.tgz", - "integrity": "sha512-cum/nSi82cDaSJ21I4PgLTVlj0OXovFk6GRguJYe/IKg6y6JHLTbJhybtX4k35WT9wdeJfEVjycTixMhBHd0Dg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.1.tgz", + "integrity": "sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-transform-flow-strip-types": "^7.23.3" + "@babel/plugin-transform-flow-strip-types": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1961,16 +1981,16 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", - "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz", + "integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.23.3", - "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-transform-react-display-name": "^7.24.1", + "@babel/plugin-transform-react-jsx": "^7.23.4", "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.23.3" + "@babel/plugin-transform-react-pure-annotations": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1980,15 +2000,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", - "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz", + "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-typescript": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-syntax-jsx": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-typescript": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -2041,9 +2061,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", - "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", + "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2065,17 +2085,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", - "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", "@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.24.0", + "@babel/parser": "^7.24.1", "@babel/types": "^7.24.0", "debug": "^4.3.1", "globals": "^11.1.0" @@ -2124,15 +2144,15 @@ } }, "node_modules/@commitlint/cli": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.2.0.tgz", - "integrity": "sha512-8XnQDMyQR+1/ldbmIyhonvnDS2enEw48Wompo/967fsEvy9Vj5/JbDutzmSBKxANWDVeEbR9QQm0yHpw6ArrFw==", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.1.0.tgz", + "integrity": "sha512-SYGm8HGbVzrlSYeB6oo6pG1Ec6bOMJcDsXgNGa4vgZQsPj6nJkcbTWlIRmtmIk0tHi0d5sCljGuQ+g/0NCPv7w==", "dev": true, "dependencies": { "@commitlint/format": "^19.0.3", "@commitlint/lint": "^19.1.0", - "@commitlint/load": "^19.2.0", - "@commitlint/read": "^19.2.0", + "@commitlint/load": "^19.1.0", + "@commitlint/read": "^19.0.3", "@commitlint/types": "^19.0.3", "execa": "^8.0.1", "yargs": "^17.0.0" @@ -2339,9 +2359,9 @@ } }, "node_modules/@commitlint/read": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.2.0.tgz", - "integrity": "sha512-HlGeEd/jyp2a5Fb9mvtsaDm5hFCmj80dJYjLQkpG3DzWneWBc37YU3kM8Za1D1HUazZaTkdsWq73M3XDE4CvCA==", + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.2.1.tgz", + "integrity": "sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==", "dev": true, "dependencies": { "@commitlint/top-level": "^19.0.0", @@ -5302,6 +5322,17 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, + "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==", + "dependencies": { + "merge-options": "^3.0.4" + }, + "peerDependencies": { + "react-native": "^0.0.0-0 || >=0.60 <1.0" + } + }, "node_modules/@react-native-community/cli": { "version": "12.3.6", "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.6.tgz", @@ -7139,25 +7170,28 @@ } }, "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.75.0-main", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.75.0-main.tgz", + "integrity": "sha512-gEl+bl+orntqNA3yGETGeHLNzDnZuQfO074BreX/l80WnZbx00/BJ57IkZ372j6I+gjki+3dYeRQOp82m/sUWQ==", + "peer": true, "dependencies": { - "@react-native/codegen": "0.73.3" + "@react-native/codegen": "0.75.0-main" }, "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.75.0-main", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.75.0-main.tgz", + "integrity": "sha512-yTyft0jSbTEfTfDUUfllJqKWLl3rNMiVMFjuWzMigikKAlSwKKUC/DxTEUfMwekFU05TjDyEOtigOTrm2yuoRQ==", + "peer": true, "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", @@ -7193,7 +7227,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.75.0-main", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" }, @@ -7205,13 +7239,14 @@ } }, "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.75.0-main", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.75.0-main.tgz", + "integrity": "sha512-vcIu7x7o/3xn9UQdOPqA6B/jtxDHB+xTIDlVe7nym+0ua/OIOwYoVscTb0NtHuEjGKO1G5CTWNhl34BFhIs0+g==", + "peer": true, "dependencies": { "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", "glob": "^7.1.1", + "hermes-parser": "0.20.1", "invariant": "^2.2.4", "jscodeshift": "^0.14.0", "mkdirp": "^0.5.1", @@ -7505,6 +7540,113 @@ "@babel/core": "*" } }, + "node_modules/@react-native/metro-babel-transformer/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==", + "dependencies": { + "@react-native/codegen": "0.73.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/metro-babel-transformer/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==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.73.4", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/metro-babel-transformer/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==", + "dependencies": { + "@babel/parser": "^7.20.0", + "flow-parser": "^0.206.0", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/flow-parser": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", + "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@react-native/metro-babel-transformer/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==" + }, + "node_modules/@react-native/metro-babel-transformer/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==", + "dependencies": { + "hermes-estree": "0.15.0" + } + }, "node_modules/@react-native/normalize-color": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz", @@ -7531,11 +7673,11 @@ } }, "node_modules/@react-navigation/bottom-tabs": { - "version": "6.5.19", - "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.19.tgz", - "integrity": "sha512-Kz0dbPeeTJ6pbn69/NsllWnaLfe0egdmTDTnatniYTvwJYvaE06r73c+bKxeZ2jYps5xqmQDY+odvxmifCJO+g==", + "version": "6.5.20", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.20.tgz", + "integrity": "sha512-ow6Z06iS4VqBO8d7FP+HsGjJLWt2xTWIvuWjpoCvsM/uQXzCRDIjBv9HaKcXbF0yTW7IMir0oDAbU5PFzEDdgA==", "dependencies": { - "@react-navigation/elements": "^1.3.29", + "@react-navigation/elements": "^1.3.30", "color": "^4.2.3", "warn-once": "^0.1.0" }, @@ -7548,9 +7690,9 @@ } }, "node_modules/@react-navigation/core": { - "version": "6.4.15", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.15.tgz", - "integrity": "sha512-/ti6dulU68bsR3+zM9rlrqOUG8x7Xor35B4W1sA/AbDC0b1veexMGUQHXeyF+qh/3loG8JTwBUgTsPXkoLO2mw==", + "version": "6.4.16", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.16.tgz", + "integrity": "sha512-UDTJBsHxnzgFETR3ZxhctP+RWr4SkyeZpbhpkQoIGOuwSCkt1SE0qjU48/u6r6w6XlX8OqVudn1Ab0QFXTHxuQ==", "dependencies": { "@react-navigation/routers": "^6.1.9", "escape-string-regexp": "^4.0.0", @@ -7564,9 +7706,9 @@ } }, "node_modules/@react-navigation/elements": { - "version": "1.3.29", - "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.29.tgz", - "integrity": "sha512-sMkqqQHlxdBxrBVw6E2a3LJjb9Hrb1ola8+zRgJn4Ox8iKtjqtWEdg349DPWU77VpIekcMLsqQvEtZox3XkXgA==", + "version": "1.3.30", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.30.tgz", + "integrity": "sha512-plhc8UvCZs0UkV+sI+3bisIyn78wz9O/BiWZXpounu72k/R/Sj5PuZYFJ1fi6psvriUveMCGh4LeZckAZu2qiQ==", "peerDependencies": { "@react-navigation/native": "^6.0.0", "react": "*", @@ -7590,11 +7732,11 @@ } }, "node_modules/@react-navigation/native-stack": { - "version": "6.9.25", - "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.25.tgz", - "integrity": "sha512-bhJ5NC9RxJyG8O3kLA2Axv699Wih8MoPCUWD6bWFIwLC/k02bXOQd/a19hEJqlFd+YLA343z897yybpHtcEhZQ==", + "version": "6.9.26", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.26.tgz", + "integrity": "sha512-++dueQ+FDj2XkZ902DVrK79ub1vp19nSdAZWxKRgd6+Bc0Niiesua6rMCqymYOVaYh+dagwkA9r00bpt/U5WLw==", "dependencies": { - "@react-navigation/elements": "^1.3.29", + "@react-navigation/elements": "^1.3.30", "warn-once": "^0.1.0" }, "peerDependencies": { @@ -7823,9 +7965,9 @@ } }, "node_modules/@testing-library/react-native": { - "version": "12.4.3", - "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-12.4.3.tgz", - "integrity": "sha512-WLE7VbbR5jZJQl3vfNK7Wt+IHnzhOxyu95Mr56EHmzH3XhC8DkrPVAnUq9asq/QWj4aGnymbinFx6zZys/WZmA==", + "version": "12.4.4", + "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-12.4.4.tgz", + "integrity": "sha512-2j8ycuQvsTT8s7q4NwnFnnbTQ29/wC22LnMwwnNF+QzqKXz0jcABTkQ/x3xKZsG2lf5F79ZF5ijGsurBuVGRxw==", "dev": true, "dependencies": { "jest-matcher-utils": "^29.7.0", @@ -7983,9 +8125,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.28", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz", - "integrity": "sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==", + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", "dependencies": { "undici-types": "~5.26.4" } @@ -8002,22 +8144,37 @@ "integrity": "sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==" }, "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", - "dev": true + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/react": { - "version": "18.2.66", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.66.tgz", - "integrity": "sha512-OYTmMI4UigXeFMF/j4uv0lBBEbongSgptPrHBxqME44h9+yNov+oL6Z3ocJKo0WyXR84sQUNeyIp9MRfckvZpg==", - "dev": true, + "version": "18.2.69", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.69.tgz", + "integrity": "sha512-W1HOMUWY/1Yyw0ba5TkCV+oqynRjG7BnteBB+B7JmAK7iw3l2SW+VGOxL+akPweix6jk2NNJtyJKpn4TkpfK3Q==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, + "node_modules/@types/react-native": { + "version": "0.70.19", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.19.tgz", + "integrity": "sha512-c6WbyCgWTBgKKMESj/8b4w+zWcZSsCforson7UdXtXMecG3MxCinYi6ihhrHVPyUrVzORsvEzK8zg32z4pK6Sg==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-native-vector-icons": { + "version": "6.4.18", + "resolved": "https://registry.npmjs.org/@types/react-native-vector-icons/-/react-native-vector-icons-6.4.18.tgz", + "integrity": "sha512-YGlNWb+k5laTBHd7+uZowB9DpIK3SXUneZqAiKQaj1jnJCZM0x71GDim5JCTMi4IFkhc9m8H/Gm28T5BjyivUw==", + "dependencies": { + "@types/react": "*", + "@types/react-native": "^0.70" + } + }, "node_modules/@types/react-test-renderer": { "version": "18.0.7", "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.0.7.tgz", @@ -8030,8 +8187,7 @@ "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==", - "dev": true + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" }, "node_modules/@types/semver": { "version": "7.5.8", @@ -8072,16 +8228,16 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", - "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.3.1.tgz", + "integrity": "sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/type-utils": "7.2.0", - "@typescript-eslint/utils": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/type-utils": "7.3.1", + "@typescript-eslint/utils": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -8090,7 +8246,7 @@ "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -8140,19 +8296,19 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.3.1.tgz", + "integrity": "sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -8168,16 +8324,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", + "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -8185,18 +8341,18 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", - "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.3.1.tgz", + "integrity": "sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/utils": "7.3.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -8212,12 +8368,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", + "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", "dev": true, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -8225,13 +8381,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", + "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -8240,7 +8396,7 @@ "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -8286,21 +8442,21 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", - "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", + "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", "semver": "^7.5.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -8344,16 +8500,16 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", + "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/types": "7.3.1", "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -8707,15 +8863,16 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -8733,35 +8890,17 @@ "node": ">=8" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.findlast": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz", - "integrity": "sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { @@ -8772,15 +8911,16 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", - "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { @@ -9089,53 +9229,23 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz", + "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "@babel/helper-define-polyfill-provider": "^0.6.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -9198,6 +9308,100 @@ "react-refresh": "0.14.0" } }, + "node_modules/babel-preset-expo/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==", + "dependencies": { + "@react-native/codegen": "0.73.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/babel-preset-expo/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==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.73.4", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/babel-preset-expo/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==", + "dependencies": { + "@babel/parser": "^7.20.0", + "flow-parser": "^0.206.0", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/babel-preset-expo/node_modules/flow-parser": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", + "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "engines": { + "node": ">=0.4.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", @@ -9635,9 +9839,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001597", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", - "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", + "version": "1.0.30001600", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", "funding": [ { "type": "opencollective", @@ -10182,11 +10386,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", - "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", + "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", "dependencies": { - "browserslist": "^4.22.3" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -10404,8 +10608,7 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/dag-map": { "version": "1.0.2", @@ -10963,9 +11166,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.708", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.708.tgz", - "integrity": "sha512-iWgEEvREL4GTXXHKohhh33+6Y8XkPI5eHihDmm8zUk5Zo7HICEW+wI/j5kJ2tbuNUCXJ/sNXa03ajW635DiJXA==" + "version": "1.4.715", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz", + "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==" }, "node_modules/emittery": { "version": "0.13.1", @@ -11075,9 +11278,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.0.tgz", - "integrity": "sha512-vmuE7Uoevk2xkwu5Gwa7RfJk/ebVV6xRv7KuZNbUglmJHhWPMbLL20ztreVpBbdxBZijETx3Aml3NssX4SFMvQ==", + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", + "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -11085,10 +11288,11 @@ "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.0", + "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", @@ -11099,7 +11303,7 @@ "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.1", + "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", @@ -11114,17 +11318,17 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", + "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.7", "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.5", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -11133,12 +11337,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -11183,6 +11381,18 @@ "node": ">= 0.4" } }, + "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==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", @@ -12084,9 +12294,9 @@ } }, "node_modules/expo": { - "version": "50.0.13", - "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.13.tgz", - "integrity": "sha512-p0FYrhUJZe92YOwOXx6GZ/WaxF6YtsLXtWkql9pFIIocYBN6iQ3OMGsbQCRSu0ao8rlxsk7HgQDEWK4D+y9tAg==", + "version": "50.0.14", + "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.14.tgz", + "integrity": "sha512-yLPdxCMVAbmeEIpzzyAuJ79wvr6ToDDtQmuLDMAgWtjqP8x3CGddXxUe07PpKEQgzwJabdHvCLP5Bv94wMFIjQ==", "dependencies": { "@babel/runtime": "^7.20.0", "@expo/cli": "0.17.8", @@ -12472,9 +12682,9 @@ "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==" }, "node_modules/fast-xml-parser": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.5.tgz", - "integrity": "sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz", + "integrity": "sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==", "funding": [ { "type": "github", @@ -12790,9 +13000,9 @@ "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" }, "node_modules/flow-parser": { - "version": "0.206.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", - "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "version": "0.231.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.231.0.tgz", + "integrity": "sha512-WVzuqwq7ZnvBceCG0DGeTQebZE+iIU0mlk5PmJgYj9DDrt+0isGC2m1ezW9vxL4V+HERJJo9ExppOnwKH2op6Q==", "engines": { "node": ">=0.4.0" } @@ -13273,16 +13483,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.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" }, "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.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", "dependencies": { - "hermes-estree": "0.15.0" + "hermes-estree": "0.20.1" } }, "node_modules/hermes-profile-transformer": { @@ -13996,11 +14206,11 @@ } }, "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-plain-object": { @@ -17246,6 +17456,11 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -17760,6 +17975,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -17774,9 +18000,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.7", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.7.tgz", + "integrity": "sha512-con7RTEulmefHplqusjpoGD+r4CBuDLaeI261hFcSuTv6+Arm5FgSYmUcBa3MeqJbC/U8v0uT6MbdkEFCEl1xg==", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -17793,24 +18019,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.7", + "metro-cache": "0.80.7", + "metro-cache-key": "0.80.7", + "metro-config": "0.80.7", + "metro-core": "0.80.7", + "metro-file-map": "0.80.7", + "metro-resolver": "0.80.7", + "metro-runtime": "0.80.7", + "metro-source-map": "0.80.7", + "metro-symbolicate": "0.80.7", + "metro-transform-plugins": "0.80.7", + "metro-transform-worker": "0.80.7", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -17830,37 +18056,24 @@ } }, "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.7", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.7.tgz", + "integrity": "sha512-b773yA16DsDQiM4OOzCsr1gwEd+iio9au98o3bj7F/bxVyoz1LuYox06BIdsiLL1o4kV5VtzTu3UXSJ2X0ZGXg==", "dependencies": { "@babel/core": "^7.20.0", - "hermes-parser": "0.19.1", + "hermes-parser": "0.20.1", "nullthrows": "^1.1.1" }, "engines": { "node": ">=18" } }, - "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==" - }, - "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==", - "dependencies": { - "hermes-estree": "0.19.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.7", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.7.tgz", + "integrity": "sha512-N6HyLjwDKusqJDaVyP57SVZKP51m1FFVcbIWQXu938W30nCXQEuWOx4e6adKgfEOZpscisWojfrCFN42/A8uug==", "dependencies": { - "metro-core": "0.80.6", + "metro-core": "0.80.7", "rimraf": "^3.0.2" }, "engines": { @@ -17868,9 +18081,9 @@ } }, "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.7", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.7.tgz", + "integrity": "sha512-sfCOtooMqmmm2v0a4EsYr5knYJGIArZJ5Y7MAcmsVU2pcqg+JQyPhYr/zqSkXBBipRxXr7aNXul9StKzKjsnbw==", "engines": { "node": ">=18" } @@ -17890,17 +18103,17 @@ } }, "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.7", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.7.tgz", + "integrity": "sha512-kpXCidthS/kFlEoXjWQp+IyCU5ICCOESVgwXEzViSDOv5bPJz2ytIr2lF623e50QzyrpFBSnOPjnyd1JbsVPvQ==", "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.7", + "metro-cache": "0.80.7", + "metro-core": "0.80.7", + "metro-runtime": "0.80.7" }, "engines": { "node": ">=18" @@ -17973,21 +18186,21 @@ } }, "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.7", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.7.tgz", + "integrity": "sha512-bl3D6TtIa2mSdVTbkskMPcJSdoivO0F06u8ip/oS/T6RsbjkMTN3OZBjJXclY9I0FcN14q8I5YQt1oriySY/2Q==", "dependencies": { "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.6" + "metro-resolver": "0.80.7" }, "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.7", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.7.tgz", + "integrity": "sha512-A9IAmFZu/Ch7zJ4LzJChsvhedNOipuIXaOz6N8J44rqVZHI0uIqDKVGCne7lzc97djF1Ti4tH9nP64u4IdhpSg==", "dependencies": { "anymatch": "^3.0.3", "debug": "^2.2.0", @@ -18021,9 +18234,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.7", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.7.tgz", + "integrity": "sha512-9/mYV1tMGeoFSTMFr94oigJM2qMXJO3hvlibkaQ21HZjVyrfb54bSYyfIIRvAsjY2RCBRg9r2OrT+YbxnMypig==", "dependencies": { "terser": "^5.15.0" }, @@ -18032,17 +18245,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.7", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.7.tgz", + "integrity": "sha512-xW7M0TITuKs2rYQqbIQn297+MVWfDuGptPnfZ+RBG9afdN//Zpmg14KFMIYU4r5AH2WS+nxwL57DbZft1MyoHg==", "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.7", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.7.tgz", + "integrity": "sha512-gWqzfm9YQw9I08L23hcLmY7XNx48W0c0vLEkVEF5P7ZNIOSfX9CkEv0JvTTJWshRYkbgIqsdtpMAHq13LJJ6iA==", "dependencies": { "@babel/runtime": "^7.0.0" }, @@ -18051,16 +18264,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.7", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.7.tgz", + "integrity": "sha512-6a1m/51ekkAl+ISNBcKQUXTU+AldbbPUHDE3DDDU17Y0HNoovkQR23DB/uH/SzUHQszYxK1fnwUTSxpzOjx+pw==", "dependencies": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.80.6", + "metro-symbolicate": "0.80.7", "nullthrows": "^1.1.1", - "ob1": "0.80.6", + "ob1": "0.80.7", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -18077,12 +18290,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.7", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.7.tgz", + "integrity": "sha512-WrBR5FQhVf/Y2N3zBS5TvNdwYzcQTLdJj9kcn0MIt+DpdgfLuUDjHXYaq4G9fZubofInx2dUcqr4WCn6fkIxuA==", "dependencies": { "invariant": "^2.2.4", - "metro-source-map": "0.80.6", + "metro-source-map": "0.80.7", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -18104,9 +18317,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.7", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.7.tgz", + "integrity": "sha512-ENGvQF7wZCtn2rO6jwsYy3XRSPrlm0G/1TgDC8AXdvz0yjfAe1ODSCYWxP8S3JXfjKL5m3b6j9RsV8sQIxsUjQ==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", @@ -18119,21 +18332,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.7", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.7.tgz", + "integrity": "sha512-QcgKpx3WZo71jTtXMEeeFuGpA+nG8YuWjxPTIsIYTjgDxcArS8zDDRzS18mmYkP65yyzH4dT94B1FJH9+flRag==", "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.7", + "metro-babel-transformer": "0.80.7", + "metro-cache": "0.80.7", + "metro-cache-key": "0.80.7", + "metro-minify-terser": "0.80.7", + "metro-source-map": "0.80.7", + "metro-transform-plugins": "0.80.7", "nullthrows": "^1.1.1" }, "engines": { @@ -18206,19 +18419,6 @@ "node": ">=8" } }, - "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==" - }, - "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==", - "dependencies": { - "hermes-estree": "0.19.1" - } - }, "node_modules/metro/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -18850,9 +19050,9 @@ "dev": true }, "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.7", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.7.tgz", + "integrity": "sha512-+m1cCNckRtDEnurNSVqywpN6LhFWc1Z3MdX7PX7boCwEdSzh4evlUjBIUzao1lBOpB7G5FvwfFagTVQGCMa0Yw==", "engines": { "node": ">=18" } @@ -18901,28 +19101,29 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "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" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "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.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -18932,16 +19133,17 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", - "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.hasown": { @@ -18958,14 +19160,14 @@ } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "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" @@ -19032,6 +19234,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "bin": { + "opencollective-postinstall": "index.js" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -19522,9 +19732,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -19542,7 +19752,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -19710,9 +19920,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -19937,9 +20147,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-native": { - "version": "0.73.5", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.5.tgz", - "integrity": "sha512-iHgDArmF4CrhL0qTj+Rn+CBN5pZWUL9lUGl8ub+V9Hwu/vnzQQh8rTMVSwVd2sV6N76KjpE5a4TfIAHkpIHhKg==", + "version": "0.73.6", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.6.tgz", + "integrity": "sha512-oqmZe8D2/VolIzSPZw+oUd6j/bEmeRHwsLn1xLA5wllEYsZ5zNuMsDus235ONOnCRwexqof/J3aztyQswSmiaA==", "dependencies": { "@jest/create-cache-key-function": "^29.6.3", "@react-native-community/cli": "12.3.6", @@ -20007,6 +20217,35 @@ "moment": "^2.29.4" } }, + "node_modules/react-native-elements": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/react-native-elements/-/react-native-elements-3.4.3.tgz", + "integrity": "sha512-VtZc25EecPZyUBER85zFK9ZbY6kkUdcm1ZwJ9hdoGSCr1R/GFgxor4jngOcSYeMvQ+qimd5No44OVJW3rSJECA==", + "hasInstallScript": true, + "dependencies": { + "@types/react-native-vector-icons": "^6.4.6", + "color": "^3.1.2", + "deepmerge": "^4.2.2", + "hoist-non-react-statics": "^3.3.2", + "lodash.isequal": "^4.5.0", + "opencollective-postinstall": "^2.0.3", + "react-native-ratings": "8.0.4", + "react-native-size-matters": "^0.3.1" + }, + "peerDependencies": { + "react-native-safe-area-context": ">= 3.0.0", + "react-native-vector-icons": ">7.0.0" + } + }, + "node_modules/react-native-elements/node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, "node_modules/react-native-paper": { "version": "5.12.3", "resolved": "https://registry.npmjs.org/react-native-paper/-/react-native-paper-5.12.3.tgz", @@ -20032,6 +20271,18 @@ "color-string": "^1.6.0" } }, + "node_modules/react-native-ratings": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/react-native-ratings/-/react-native-ratings-8.0.4.tgz", + "integrity": "sha512-Xczu5lskIIRD6BEdz9A0jDRpEck/SFxRqiglkXi0u67yAtI1/pcJC76P4MukCbT8K4BPVl+42w83YqXBoBRl7A==", + "dependencies": { + "lodash": "^4.17.15" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, "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", @@ -20054,11 +20305,30 @@ "react-native": "*" } }, + "node_modules/react-native-size-matters": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/react-native-size-matters/-/react-native-size-matters-0.3.1.tgz", + "integrity": "sha512-mKOfBLIBFBcs9br1rlZDvxD5+mAl8Gfr5CounwJtxI6Z82rGrMO+Kgl9EIg3RMVf3G855a85YVqHJL2f5EDRlw==", + "peerDependencies": { + "react-native": "*" + } + }, "node_modules/react-native-swipe-gestures": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/react-native-swipe-gestures/-/react-native-swipe-gestures-1.0.5.tgz", "integrity": "sha512-Ns7Bn9H/Tyw278+5SQx9oAblDZ7JixyzeOczcBK8dipQk2pD7Djkcfnf1nB/8RErAmMLL9iXgW0QHqiII8AhKw==" }, + "node_modules/react-native-url-polyfill": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-native-url-polyfill/-/react-native-url-polyfill-2.0.0.tgz", + "integrity": "sha512-My330Do7/DvKnEvwQc0WdcBnFPploYKp9CYlefDXzIdEaA+PAhDYllkvGeEroEzvc4Kzzj2O4yVdz8v6fjRvhA==", + "dependencies": { + "whatwg-url-without-unicode": "8.0.0-3" + }, + "peerDependencies": { + "react-native": "*" + } + }, "node_modules/react-native-vector-icons": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-10.0.3.tgz", @@ -20174,6 +20444,26 @@ "node": ">= 10.14.2" } }, + "node_modules/react-native/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==", + "dependencies": { + "@babel/parser": "^7.20.0", + "flow-parser": "^0.206.0", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, "node_modules/react-native/node_modules/@types/yargs": { "version": "15.0.19", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", @@ -20227,6 +20517,14 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/react-native/node_modules/flow-parser": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", + "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/react-native/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -20528,16 +20826,16 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", - "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0", - "get-intrinsic": "^1.2.3", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -21264,6 +21562,14 @@ "node": ">=4" } }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -21273,9 +21579,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" } @@ -21559,34 +21865,41 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "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==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "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" @@ -21596,28 +21909,31 @@ } }, "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==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "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==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "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" @@ -21776,9 +22092,9 @@ "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==" }, "node_modules/supabase": { - "version": "1.148.6", - "resolved": "https://registry.npmjs.org/supabase/-/supabase-1.148.6.tgz", - "integrity": "sha512-/VXbN0C/r/o1TkHGw4EXYvwtwfsSvRaBd6lWa5HamcC6HdFpbof8VsSglWjiie5ONTg3lwqv06wcOrtdpzz/Bg==", + "version": "1.150.0", + "resolved": "https://registry.npmjs.org/supabase/-/supabase-1.150.0.tgz", + "integrity": "sha512-hjyXukIww6Jc37Wq9urUldS61a7lZdw6J8Ky/TaScGFqTsO4DbPXUoOxHHaWYSM2ucV+4ejNZ5jYpAGmorApkA==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -21828,6 +22144,27 @@ "node": ">= 14" } }, + "node_modules/supabase/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supabase/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/supabase/node_modules/node-fetch": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", @@ -21846,6 +22183,29 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/supabase/node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supabase/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/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -21922,9 +22282,9 @@ } }, "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -22387,9 +22747,9 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "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==", "dev": true, "dependencies": { "call-bind": "^1.0.7", @@ -22407,9 +22767,9 @@ } }, "node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", "dev": true, "bin": { "tsc": "bin/tsc", diff --git a/package.json b/package.json index 9691d34..ebff656 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "android": "expo start --android", "ios": "expo start --ios", "web": "expo start --web", + "expo:typed-routes": "expo customize tsconfig.json", "lint:commit": "commitlint", "lint:prettier": "prettier . --check", "lint:eslint": "eslint . --max-warnings 0 --report-unused-disable-directives --ignore-path .gitignore", @@ -20,9 +21,10 @@ "dependencies": { "@expo/vector-icons": "14.0.0", "@hookform/resolvers": "3.3.4", + "@react-native-async-storage/async-storage": "1.21.0", "@react-navigation/native": "6.1.16", "@supabase/supabase-js": "2.39.8", - "expo": "50.0.13", + "expo": "50.0.14", "expo-font": "11.10.3", "expo-linking": "6.2.2", "expo-router": "3.4.8", @@ -34,28 +36,30 @@ "react": "18.2.0", "react-dom": "18.2.0", "react-hook-form": "7.51.1", - "react-native": "0.73.5", + "react-native": "0.73.6", "react-native-calendars": "1.1304.1", + "react-native-elements": "3.4.3", "react-native-paper": "5.12.3", "react-native-safe-area-context": "4.8.2", "react-native-screens": "3.29.0", + "react-native-url-polyfill": "2.0.0", "react-native-vector-icons": "10.0.3", "react-native-web": "0.19.10", "zod": "3.22.4" }, "devDependencies": { - "@babel/core": "7.24.0", - "@commitlint/cli": "19.2.0", + "@babel/core": "7.24.3", + "@commitlint/cli": "19.1.0", "@commitlint/config-conventional": "19.1.0", - "@testing-library/react-native": "12.4.3", + "@testing-library/react-native": "12.4.4", "@total-typescript/ts-reset": "0.5.1", "@tsconfig/strictest": "2.0.3", "@types/jest": "29.5.12", - "@types/node": "20.11.28", - "@types/react": "18.2.66", + "@types/node": "20.11.30", + "@types/react": "18.2.69", "@types/react-test-renderer": "18.0.7", - "@typescript-eslint/eslint-plugin": "7.2.0", - "@typescript-eslint/parser": "7.2.0", + "@typescript-eslint/eslint-plugin": "7.3.1", + "@typescript-eslint/parser": "7.3.1", "eslint": "8.57.0", "eslint-config-conventions": "14.1.0", "eslint-config-prettier": "9.1.0", @@ -72,7 +76,7 @@ "jest-junit": "16.0.0", "lint-staged": "15.2.2", "react-test-renderer": "18.2.0", - "supabase": "1.148.6", - "typescript": "5.4.2" + "supabase": "1.150.0", + "typescript": "5.4.3" } } diff --git a/presentation/assets/fonts/Canterbury.ttf b/presentation/assets/fonts/Canterbury.ttf deleted file mode 100755 index f12fa3aa406ff3cab1e63d31a6579e0ea5d582bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51256 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

4EBg|YDl&SH@CoSqmAXh~PE|I&M0 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 diff --git a/presentation/assets/fonts/Georama-Black.ttf b/presentation/assets/fonts/Georama-Black.ttf deleted file mode 100755 index d95dcfe0f4cb6d4c203abb17b83f131dab446b50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144596 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 Rg3Rc1w-{7q9znu6{vWWVlDPl? diff --git a/presentation/assets/fonts/SpaceMono-Regular.ttf b/presentation/assets/fonts/SpaceMono-Regular.ttf deleted file mode 100755 index 28d7ff717769d29e5d1f036bfa91eea660ce8a24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93252 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%0Ay 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 + errorGlobal: ErrorGlobal + } + + login: { + state: FetchState + errorsFields: Array + errorGlobal: ErrorGlobal + } + + logout: { + state: FetchState + } +} + +export interface AuthenticationPresenterOptions { + authenticationUseCase: AuthenticationUseCase +} + +export class AuthenticationPresenter + extends Presenter + implements AuthenticationPresenterOptions +{ + public authenticationUseCase: AuthenticationUseCase + + public constructor(options: AuthenticationPresenterOptions) { + const { authenticationUseCase } = options + super({ + user: null, + hasLoaded: true, + register: { + state: "idle", + errorsFields: [], + errorGlobal: null, + }, + login: { + state: "idle", + errorsFields: [], + errorGlobal: null, + }, + logout: { + state: "idle", + }, + }) + this.authenticationUseCase = authenticationUseCase + } + + public async register(data: unknown): Promise { + try { + this.setState((state) => { + state.register.state = "loading" + state.register.errorsFields = [] + state.register.errorGlobal = null + }) + const user = await this.authenticationUseCase.register(data) + this.setState((state) => { + state.register.state = "success" + state.user = user + }) + } catch (error) { + this.setState((state) => { + state.register.state = "error" + if (error instanceof ZodError) { + state.register.errorsFields = + zodPresenter.getErrorsFieldsFromZodError(error) + } else { + state.register.errorGlobal = "unknown" + } + }) + } + } + + public async login(data: unknown): Promise { + try { + this.setState((state) => { + state.login.state = "loading" + state.login.errorsFields = [] + state.login.errorGlobal = null + }) + const user = await this.authenticationUseCase.login(data) + this.setState((state) => { + state.login.state = "success" + state.user = user + }) + } catch (error) { + this.setState((state) => { + state.login.state = "error" + if (error instanceof ZodError) { + state.login.errorsFields = + zodPresenter.getErrorsFieldsFromZodError(error) + } else { + state.login.errorGlobal = "unknown" + } + }) + } + } + + public async logout(): Promise { + try { + this.setState((state) => { + state.logout.state = "loading" + }) + await this.authenticationUseCase.logout() + this.setState((state) => { + state.logout.state = "success" + state.user = null + }) + } catch (error) { + this.setState((state) => { + state.user = null + state.logout.state = "error" + }) + } + } + + public async initialAuthStateListener(): Promise { + const user = await this.authenticationUseCase.getUser() + this.setState((state) => { + state.user = user + state.hasLoaded = false + }) + + this.authenticationUseCase.onUserStateChange((user) => { + this.setState((state) => { + state.user = user + }) + }) + } +} diff --git a/presentation/presenters/HabitsTracker.ts b/presentation/presenters/HabitsTracker.ts index a0e4802..5809000 100644 --- a/presentation/presenters/HabitsTracker.ts +++ b/presentation/presenters/HabitsTracker.ts @@ -1,4 +1,5 @@ import { HabitsTracker } from "@/domain/entities/HabitsTracker" +import type { FetchState } from "./_Presenter" import { Presenter } from "./_Presenter" import type { RetrieveHabitsTrackerUseCase, @@ -7,6 +8,10 @@ import type { export interface HabitsTrackerPresenterState { habitsTracker: HabitsTracker + + retrieveHabitsTracker: { + state: FetchState + } } export interface HabitsTrackerPresenterOptions { @@ -22,17 +27,28 @@ export class HabitsTrackerPresenter public constructor(options: HabitsTrackerPresenterOptions) { const { retrieveHabitsTrackerUseCase } = options const habitsTracker = HabitsTracker.default() - super({ habitsTracker }) + super({ habitsTracker, retrieveHabitsTracker: { state: "idle" } }) this.retrieveHabitsTrackerUseCase = retrieveHabitsTrackerUseCase } public async retrieveHabitsTracker( options: RetrieveHabitsTrackerUseCaseOptions, ): Promise { - const habitsTracker = - await this.retrieveHabitsTrackerUseCase.execute(options) this.setState((state) => { - state.habitsTracker = habitsTracker + state.retrieveHabitsTracker.state = "loading" + state.habitsTracker = HabitsTracker.default() }) + try { + const habitsTracker = + await this.retrieveHabitsTrackerUseCase.execute(options) + this.setState((state) => { + state.habitsTracker = habitsTracker + state.retrieveHabitsTracker.state = "success" + }) + } catch (error) { + this.setState((state) => { + state.retrieveHabitsTracker.state = "error" + }) + } } } diff --git a/presentation/presenters/_Presenter.ts b/presentation/presenters/_Presenter.ts index e39bc2e..1f53ccb 100644 --- a/presentation/presenters/_Presenter.ts +++ b/presentation/presenters/_Presenter.ts @@ -1,21 +1,26 @@ import { produce } from "immer" -type Listener = (state: S) => void +type Listener = (state: State) => void -type SetStateAction = (state: S) => void +type SetStateAction = (state: State) => void -export abstract class Presenter { - private _state: S - private readonly _initialState: S - private readonly _listeners: Array> +export const FETCH_STATES = ["idle", "loading", "error", "success"] as const +export type FetchState = (typeof FETCH_STATES)[number] - public constructor(initialState: S) { +export type ErrorGlobal = "unknown" | null + +export abstract class Presenter { + private _state: State + private readonly _initialState: State + private readonly _listeners: Array> + + public constructor(initialState: State) { this._state = initialState this._initialState = initialState this._listeners = [] } - public get initialState(): S { + public get initialState(): State { return this._initialState } @@ -24,17 +29,17 @@ export abstract class Presenter { * @param action A function that receives the current state and can update it by mutating it. * @returns The new state. */ - public setState(action: SetStateAction): S { + public setState(action: SetStateAction): State { this._state = produce(this._state, action) this.notifyListeners() return this._state } - public subscribe(listener: Listener): void { + public subscribe(listener: Listener): void { this._listeners.push(listener) } - public unsubscribe(listener: Listener): void { + public unsubscribe(listener: Listener): void { const listenerIndex = this._listeners.indexOf(listener) const listenerFound = listenerIndex !== -1 if (listenerFound) { diff --git a/presentation/presenters/utils/ZodPresenter.ts b/presentation/presenters/utils/ZodPresenter.ts new file mode 100644 index 0000000..3664589 --- /dev/null +++ b/presentation/presenters/utils/ZodPresenter.ts @@ -0,0 +1,7 @@ +import type { ZodError } from "zod" + +export const zodPresenter = { + getErrorsFieldsFromZodError: (error: ZodError): Array => { + return Object.keys(error.format()) as Array + }, +} diff --git a/presentation/react/components/TabBarIcon.tsx b/presentation/react/components/TabBarIcon.tsx new file mode 100644 index 0000000..9501547 --- /dev/null +++ b/presentation/react/components/TabBarIcon.tsx @@ -0,0 +1,13 @@ +import FontAwesome from "@expo/vector-icons/FontAwesome" + +/** + * @see https://icons.expo.fyi/ + * @param props + * @returns + */ +export const TabBarIcon: React.FC<{ + name: React.ComponentProps["name"] + color: string +}> = (props) => { + return +} diff --git a/presentation/react/contexts/Authentication.tsx b/presentation/react/contexts/Authentication.tsx new file mode 100644 index 0000000..c0cf020 --- /dev/null +++ b/presentation/react/contexts/Authentication.tsx @@ -0,0 +1,56 @@ +import { createContext, useContext, useEffect } from "react" + +import { usePresenterState } from "@/presentation/react/hooks/usePresenterState" +import type { + AuthenticationPresenter, + AuthenticationPresenterState, +} from "@/presentation/presenters/Authentication" +import { authenticationPresenter } from "@/infrastructure" + +export interface AuthenticationContextValue + extends AuthenticationPresenterState { + authenticationPresenter: AuthenticationPresenter +} + +const defaultContextValue = {} as AuthenticationContextValue +const AuthenticationContext = + createContext(defaultContextValue) + +interface AuthenticationProviderProps extends React.PropsWithChildren {} + +export const AuthenticationProvider: React.FC = ( + props, +) => { + const { children } = props + + useEffect(() => { + authenticationPresenter.initialAuthStateListener().catch((error) => { + console.error(error) + }) + }, []) + + const authenticationPresenterState = usePresenterState( + authenticationPresenter, + ) + + return ( + + {children} + + ) +} + +export const useAuthentication = (): AuthenticationContextValue => { + const context = useContext(AuthenticationContext) + if (context === defaultContextValue) { + throw new Error( + "`useAuthentication` must be used within a `AuthenticationProvider`.", + ) + } + return context +} diff --git a/presentation/react/contexts/HabitsTracker.tsx b/presentation/react/contexts/HabitsTracker.tsx index 658474b..bb96249 100644 --- a/presentation/react/contexts/HabitsTracker.tsx +++ b/presentation/react/contexts/HabitsTracker.tsx @@ -6,15 +6,15 @@ import type { } from "@/presentation/presenters/HabitsTracker" import { usePresenterState } from "@/presentation/react/hooks/usePresenterState" import { habitsTrackerPresenter } from "@/infrastructure" +import { useAuthentication } from "./Authentication" export interface HabitsTrackerContextValue extends HabitsTrackerPresenterState { habitsTrackerPresenter: HabitsTrackerPresenter } -const defaultHabitsTrackerContextValue = {} as HabitsTrackerContextValue -const HabitsTrackerContext = createContext( - defaultHabitsTrackerContextValue, -) +const defaultContextValue = {} as HabitsTrackerContextValue +const HabitsTrackerContext = + createContext(defaultContextValue) interface HabitsTrackerProviderProps extends React.PropsWithChildren {} @@ -23,13 +23,18 @@ export const HabitsTrackerProvider: React.FC = ( ) => { const { children } = props + const { user } = useAuthentication() + useEffect(() => { + if (user == null) { + return + } habitsTrackerPresenter - .retrieveHabitsTracker({ userId: "1" }) + .retrieveHabitsTracker({ userId: user.id }) .catch((error) => { console.error(error) }) - }, []) + }, [user]) const habitsTrackerPresenterState = usePresenterState(habitsTrackerPresenter) @@ -47,7 +52,7 @@ export const HabitsTrackerProvider: React.FC = ( export const useHabitsTracker = (): HabitsTrackerContextValue => { const context = useContext(HabitsTrackerContext) - if (context === defaultHabitsTrackerContextValue) { + if (context === defaultContextValue) { throw new Error( "`useHabitsTracker` must be used within a `HabitsTrackerProvider`.", )