diff --git a/apps/expo/src/app/(tabs)/settings.tsx b/apps/expo/src/app/(tabs)/settings.tsx index 58d0f2f..aa152ad 100644 --- a/apps/expo/src/app/(tabs)/settings.tsx +++ b/apps/expo/src/app/(tabs)/settings.tsx @@ -91,7 +91,7 @@ export default function SettingsScreen() { }; const clearCacheDirectory = async () => { - const cacheDirectory = FileSystem.cacheDirectory + "movie-web"; + const cacheDirectory = `${FileSystem.cacheDirectory}movie-web`; if (!cacheDirectory) return; try { diff --git a/apps/expo/src/components/player/DownloadButton.tsx b/apps/expo/src/components/player/DownloadButton.tsx index 62c930e..d1d213b 100644 --- a/apps/expo/src/components/player/DownloadButton.tsx +++ b/apps/expo/src/components/player/DownloadButton.tsx @@ -1,7 +1,7 @@ import { MaterialCommunityIcons } from "@expo/vector-icons"; import { useTheme } from "tamagui"; -import { findHighestQuality } from "@movie-web/provider-utils"; +import { findQuality } from "@movie-web/provider-utils"; import { useDownloadManager } from "~/hooks/useDownloadManager"; import { convertMetaToScrapeMedia } from "~/lib/meta"; @@ -21,7 +21,7 @@ export const DownloadButton = () => { let url: string | undefined | null = null; if (stream?.type === "file") { - const highestQuality = findHighestQuality(stream); + const highestQuality = findQuality(stream); url = highestQuality ? stream.qualities[highestQuality]?.url : null; } else if (stream?.type === "hls") { url = stream.playlist; diff --git a/apps/expo/src/components/player/ScraperProcess.tsx b/apps/expo/src/components/player/ScraperProcess.tsx index ff8dcd3..2a4bf81 100644 --- a/apps/expo/src/components/player/ScraperProcess.tsx +++ b/apps/expo/src/components/player/ScraperProcess.tsx @@ -4,19 +4,14 @@ import { ScrollView } from "react-native-gesture-handler"; import { useRouter } from "expo-router"; import { View } from "tamagui"; -import type { - HlsBasedStream, - RunOutput, - ScrapeMedia, -} from "@movie-web/provider-utils"; +import type { RunOutput, ScrapeMedia } from "@movie-web/provider-utils"; import { - constructFullUrl, extractTracksFromHLS, - findHighestQuality, + filterAudioTracks, + findQuality, } from "@movie-web/provider-utils"; import type { ItemData } from "../item/item"; -import type { AudioTrack } from "./AudioTrackSelector"; import type { PlayerMeta } from "~/stores/player/slices/video"; import { useMeta } from "~/hooks/player/useMeta"; import { useScrape } from "~/hooks/player/useSourceScrape"; @@ -76,9 +71,9 @@ export const ScraperProcess = ({ if (!streamResult) return router.back(); if (download) { if (streamResult.stream.type === "file") { - const highestQuality = findHighestQuality(streamResult.stream); - const url = highestQuality - ? streamResult.stream.qualities[highestQuality]?.url + const quality = findQuality(streamResult.stream); + const url = quality + ? streamResult.stream.qualities[quality]?.url : null; if (!url) return; startDownload(url, "mp4", scrapeMedia).catch(console.error); @@ -89,6 +84,7 @@ export const ScraperProcess = ({ } return router.back(); } + setStream(streamResult.stream); if (streamResult.stream.type === "hls") { @@ -103,28 +99,9 @@ export const ScraperProcess = ({ if (tracks) setHlsTracks(tracks); if (tracks?.audio.length) { - const audioTracks: AudioTrack[] = tracks.audio.map((track) => ({ - uri: constructFullUrl( - (streamResult?.stream as HlsBasedStream).playlist, - track.uri, - ), - name: track.properties[0]?.attributes.name?.toString() ?? "Unknown", - language: - track.properties[0]?.attributes.language?.toString() ?? "Unknown", - active: Boolean(track.properties[0]?.attributes.default) ?? false, - })); - - const uniqueTracks = new Set(audioTracks.map((t) => t.language)); - - const filteredAudioTracks = audioTracks.filter((track) => { - if (uniqueTracks.has(track.language)) { - uniqueTracks.delete(track.language); - return true; - } - return false; - }); - - setAudioTracks(filteredAudioTracks); + setAudioTracks( + filterAudioTracks(tracks, streamResult.stream.playlist), + ); } } setPlayerStatus(PlayerStatus.READY); diff --git a/apps/expo/src/components/player/VideoPlayer.tsx b/apps/expo/src/components/player/VideoPlayer.tsx index 11e61a3..5d7ef26 100644 --- a/apps/expo/src/components/player/VideoPlayer.tsx +++ b/apps/expo/src/components/player/VideoPlayer.tsx @@ -12,12 +12,13 @@ import { useSafeAreaInsets } from "react-native-safe-area-context"; import { ResizeMode, Video } from "expo-av"; import * as Haptics from "expo-haptics"; import * as NavigationBar from "expo-navigation-bar"; +import * as Network from "expo-network"; import { useRouter } from "expo-router"; import * as StatusBar from "expo-status-bar"; import { Feather } from "@expo/vector-icons"; import { Spinner, useTheme, View } from "tamagui"; -import { findHighestQuality } from "@movie-web/provider-utils"; +import { findHLSQuality, findQuality } from "@movie-web/provider-utils"; import { useAudioTrack } from "~/hooks/player/useAudioTrack"; import { useBrightness } from "~/hooks/player/useBrightness"; @@ -32,6 +33,8 @@ import { import { useAudioTrackStore } from "~/stores/audio"; import { usePlayerStore } from "~/stores/player/store"; import { + DefaultQuality, + useNetworkSettingsStore, usePlayerSettingsStore, useWatchHistoryStore, } from "~/stores/settings"; @@ -76,6 +79,8 @@ export const VideoPlayer = () => { const { gestureControls, autoPlay } = usePlayerSettingsStore(); const { updateWatchHistory, removeFromWatchHistory, getWatchHistoryItem } = useWatchHistoryStore(); + const { wifiDefaultQuality, mobileDataDefaultQuality } = + useNetworkSettingsStore(); const updateResizeMode = (newMode: ResizeMode) => { setResizeMode(newMode); @@ -158,15 +163,22 @@ export const VideoPlayer = () => { } setIsLoading(true); + const { type: networkType } = await Network.getNetworkStateAsync(); + const defaultQuality = + networkType === Network.NetworkStateType.WIFI + ? wifiDefaultQuality + : mobileDataDefaultQuality; + const highest = defaultQuality === DefaultQuality.Highest; + let url = null; if (stream.type === "hls") { - url = stream.playlist; + url = await findHLSQuality(stream.playlist, stream.headers, highest); } if (stream.type === "file") { - const highestQuality = findHighestQuality(stream); - url = highestQuality ? stream.qualities[highestQuality]?.url : null; + const chosenQuality = findQuality(stream, highest); + url = chosenQuality ? stream.qualities[chosenQuality]?.url : null; } if (!url) { @@ -219,6 +231,8 @@ export const VideoPlayer = () => { updateWatchHistory, videoRef?.props.positionMillis, videoSrc?.uri, + wifiDefaultQuality, + mobileDataDefaultQuality, ]); const onVideoLoadStart = () => { diff --git a/apps/expo/src/hooks/useDownloadManager.tsx b/apps/expo/src/hooks/useDownloadManager.tsx index 61cf8e6..70aba2d 100644 --- a/apps/expo/src/hooks/useDownloadManager.tsx +++ b/apps/expo/src/hooks/useDownloadManager.tsx @@ -184,11 +184,11 @@ export const useDownloadManager = () => { lastTimestamp = currentTime; }; - const fileUri = - FileSystem.cacheDirectory + "movie-web" - ? FileSystem.cacheDirectory + "movie-web" + url.split("/").pop() - : null; - if (!fileUri) { + const fileUri = `${FileSystem.cacheDirectory}movie-web${url.split("/").pop()}`; + if ( + !(await FileSystem.getInfoAsync(`${FileSystem.cacheDirectory}movie-web`)) + .exists + ) { console.error("Cache directory is unavailable"); return; } @@ -238,7 +238,7 @@ export const useDownloadManager = () => { const totalSegments = segments.length; let segmentsDownloaded = 0; - const segmentDir = FileSystem.cacheDirectory + "movie-web/segments/"; + const segmentDir = `${FileSystem.cacheDirectory}movie-web/segments/`; await ensureDirExists(segmentDir); const updateProgress = () => { diff --git a/apps/expo/src/stores/settings/index.ts b/apps/expo/src/stores/settings/index.ts index 56fd35e..279c327 100644 --- a/apps/expo/src/stores/settings/index.ts +++ b/apps/expo/src/stores/settings/index.ts @@ -223,13 +223,18 @@ export const useWatchHistoryStore = create< ), ); +export enum DefaultQuality { + Lowest = "Lowest", + Highest = "Highest", +} + interface NetworkSettingsStoreState { allowMobileData: boolean; setAllowMobileData: (enabled: boolean) => void; - wifiDefaultQuality: string; - setWifiDefaultQuality: (quality: string) => void; - mobileDataDefaultQuality: string; - setMobileDataDefaultQuality: (quality: string) => void; + wifiDefaultQuality: DefaultQuality; + setWifiDefaultQuality: (quality: DefaultQuality) => void; + mobileDataDefaultQuality: DefaultQuality; + setMobileDataDefaultQuality: (quality: DefaultQuality) => void; } export const useNetworkSettingsStore = create< @@ -240,9 +245,9 @@ export const useNetworkSettingsStore = create< (set) => ({ allowMobileData: false, setAllowMobileData: (enabled) => set({ allowMobileData: enabled }), - wifiDefaultQuality: "Highest", + wifiDefaultQuality: DefaultQuality.Highest, setWifiDefaultQuality: (quality) => set({ wifiDefaultQuality: quality }), - mobileDataDefaultQuality: "Lowest", + mobileDataDefaultQuality: DefaultQuality.Lowest, setMobileDataDefaultQuality: (quality) => set({ mobileDataDefaultQuality: quality }), }), diff --git a/packages/provider-utils/src/util.ts b/packages/provider-utils/src/util.ts index 5979244..d8f1726 100644 --- a/packages/provider-utils/src/util.ts +++ b/packages/provider-utils/src/util.ts @@ -2,7 +2,8 @@ import type { AppendToResponse, MovieDetails, TvShowDetails } from "tmdb-ts"; import type { ScrapeMedia } from "@movie-web/providers"; -import { providers } from "./video"; +import type { HLSTracks } from "./video"; +import { constructFullUrl, providers } from "./video"; export function getMetaData() { return [...providers.listSources(), ...providers.listEmbeds()]; @@ -59,3 +60,31 @@ export function transformSearchResultToScrapeMedia( throw new Error("Invalid type parameter"); } + +interface AudioTrack { + uri: string; + name: string; + language: string; + active?: boolean; +} + +export function filterAudioTracks(tracks: HLSTracks, playlist: string) { + const audioTracks: AudioTrack[] = tracks.audio.map((track) => ({ + uri: constructFullUrl(playlist, track.uri), + name: track.properties[0]?.attributes.name?.toString() ?? "Unknown", + language: track.properties[0]?.attributes.language?.toString() ?? "Unknown", + active: Boolean(track.properties[0]?.attributes.default) ?? false, + })); + + const uniqueTracks = new Set(audioTracks.map((t) => t.language)); + + const filteredAudioTracks = audioTracks.filter((track) => { + if (uniqueTracks.has(track.language)) { + uniqueTracks.delete(track.language); + return true; + } + return false; + }); + + return filteredAudioTracks; +} diff --git a/packages/provider-utils/src/video.ts b/packages/provider-utils/src/video.ts index 0cb2dba..e345f26 100644 --- a/packages/provider-utils/src/video.ts +++ b/packages/provider-utils/src/video.ts @@ -149,8 +149,9 @@ export async function getVideoStreamFromEmbed({ } } -export function findHighestQuality( +export function findQuality( stream: FileBasedStream, + highest = true, ): Qualities | undefined { const qualityOrder: Qualities[] = [ "4k", @@ -160,6 +161,9 @@ export function findHighestQuality( "360", "unknown", ]; + if (!highest) { + qualityOrder.reverse(); + } for (const quality of qualityOrder) { if (stream.qualities[quality]) { return quality; @@ -193,9 +197,10 @@ export async function extractTracksFromHLS( } } -export async function extractSegmentsFromHLS( +export async function findHLSQuality( playlistUrl: string, - headers: Record, + headers?: Record, + highest = true, ) { try { const response = await fetch(playlistUrl, { headers }).then((res) => @@ -220,17 +225,29 @@ export async function extractSegmentsFromHLS( return widthB * heightB - widthA * heightA; }); - const highestQuality = sortedStreams[0]; - if (!highestQuality) return null; + const chosenQuality = sortedStreams[highest ? 0 : sortedStreams.length - 1]; + if (!chosenQuality) return null; - const highestQualityUri = constructFullUrl(playlistUrl, highestQuality.uri); - const highestQualityResponse = await fetch(highestQualityUri, { - headers, - }).then((res) => res.text()); - const highestQualityPlaylist = hls.parse(highestQualityResponse); + return chosenQuality.uri; + } catch (e) { + return null; + } +} - return highestQualityPlaylist.segments.map((segment) => - constructFullUrl(highestQualityUri, segment.uri), +export async function extractSegmentsFromHLS( + playlistUrl: string, + headers: Record, +) { + try { + const highestQualityUrl = await findHLSQuality(playlistUrl, headers); + if (!highestQualityUrl) return null; + const response = await fetch(highestQualityUrl, { headers }).then((res) => + res.text(), + ); + const playlist = hls.parse(response); + + return playlist.segments.map((segment) => + constructFullUrl(highestQualityUrl, segment.uri), ); } catch (e) { return null; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b64df86..a1e91f7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: link:tooling/prettier '@turbo/gen': specifier: ^1.11.3 - version: 1.12.2(@types/node@20.12.2)(typescript@5.4.3) + version: 1.12.2(@types/node@20.12.7)(typescript@5.4.3) prettier: specifier: ^3.1.1 version: 3.2.4 @@ -28,7 +28,7 @@ importers: dependencies: '@expo/metro-config': specifier: ^0.17.3 - version: 0.17.3(@react-native/babel-preset@0.73.21) + version: 0.17.3(@react-native/babel-preset@0.75.0-main) '@movie-web/api': specifier: '*' version: link:../../packages/api @@ -79,7 +79,7 @@ importers: version: 0.7.0 expo: specifier: ~50.0.14 - version: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + version: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) expo-alternate-app-icons: specifier: ^0.1.7 version: 0.1.7(expo@50.0.14)(react-native@0.73.6)(react@18.2.0) @@ -446,6 +446,11 @@ packages: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} + /@babel/compat-data@7.24.4: + resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} + engines: {node: '>=6.9.0'} + dev: false + /@babel/core@7.23.9: resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} engines: {node: '>=6.9.0'} @@ -516,6 +521,24 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 + /@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.23.9): + resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.9 + '@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.24.1(@babel/core@7.23.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: false + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.9): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} @@ -541,6 +564,21 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.23.9): + resolution: {integrity: sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.24.0 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} @@ -570,6 +608,13 @@ packages: dependencies: '@babel/types': 7.23.9 + /@babel/helper-module-imports@7.24.3: + resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: false + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} @@ -619,6 +664,18 @@ packages: '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 + /@babel/helper-replace-supers@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: false + /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} @@ -689,6 +746,14 @@ packages: dependencies: '@babel/types': 7.24.0 + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.24.0 + dev: false + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} @@ -768,6 +833,29 @@ packages: '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.23.9) dev: false + /@babel/plugin-proposal-export-default-from@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-+0hrgGGV3xyYIjOrD/bUZk/iUwOIGuoANfRfVg1cPhYBxF+TIXSEcc42DqzBICmWsnAQ+SfKedY0bj8QD+LuMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-export-default-from': 7.24.1(@babel/core@7.23.9) + dev: false + + /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.23.9): + resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} + engines: {node: '>=6.9.0'} + 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. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) + dev: false + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.9): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} @@ -893,6 +981,16 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: false + /@babel/plugin-syntax-export-default-from@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.9): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: @@ -911,6 +1009,16 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: false + /@babel/plugin-syntax-flow@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} @@ -1031,6 +1139,16 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: false + /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.9): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} @@ -1083,6 +1201,18 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) + /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) + dev: false + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} @@ -1101,6 +1231,16 @@ packages: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.23.9): + resolution: {integrity: sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} @@ -1138,6 +1278,23 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 + /@babel/plugin-transform-classes@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@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.24.0 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.23.9) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: false + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} @@ -1148,6 +1305,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.23.9 + /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/template': 7.24.0 + dev: false + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} @@ -1157,6 +1325,16 @@ packages: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} @@ -1217,6 +1395,17 @@ packages: '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.9) dev: false + /@babel/plugin-transform-flow-strip-types@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.23.9) + dev: false + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.9): resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} engines: {node: '>=6.9.0'} @@ -1238,6 +1427,18 @@ packages: '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} @@ -1257,6 +1458,16 @@ packages: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-transform-literals@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} @@ -1297,6 +1508,18 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 + /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-simple-access': 7.22.5 + dev: false + /@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.23.9): resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==} engines: {node: '>=6.9.0'} @@ -1421,6 +1644,16 @@ packages: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} @@ -1431,6 +1664,17 @@ packages: '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} @@ -1443,6 +1687,19 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) + /@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) + dev: false + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} @@ -1462,6 +1719,16 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: false + /@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.9): resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} engines: {node: '>=6.9.0'} @@ -1482,6 +1749,16 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: false + /@babel/plugin-transform-react-jsx-self@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} engines: {node: '>=6.9.0'} @@ -1492,6 +1769,16 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: false + /@babel/plugin-transform-react-jsx-source@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} engines: {node: '>=6.9.0'} @@ -1553,6 +1840,23 @@ packages: - supports-color dev: false + /@babel/plugin-transform-runtime@7.24.3(@babel/core@7.23.9): + resolution: {integrity: sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 + babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.23.9) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.23.9) + babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.23.9) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} @@ -1582,6 +1886,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + /@babel/plugin-transform-spread@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} @@ -1591,6 +1906,16 @@ packages: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} @@ -1632,6 +1957,19 @@ packages: '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) dev: false + /@babel/plugin-transform-typescript@7.24.4(@babel/core@7.23.9): + resolution: {integrity: sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.23.9) + dev: false + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} @@ -1661,6 +1999,17 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.23.9): + resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + dev: false + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} @@ -2180,7 +2529,7 @@ packages: safe-json-stringify: 1.2.0 dev: false - /@expo/cli@0.17.8(@react-native/babel-preset@0.73.21)(expo-modules-autolinking@1.10.3): + /@expo/cli@0.17.8(@react-native/babel-preset@0.75.0-main)(expo-modules-autolinking@1.10.3): resolution: {integrity: sha512-yfkoghCltbGPDbRI71Qu3puInjXx4wO82+uhW82qbWLvosfIN7ep5Gr0Lq54liJpvlUG6M0IXM1GiGqcCyP12w==} hasBin: true dependencies: @@ -2192,7 +2541,7 @@ packages: '@expo/env': 0.2.2 '@expo/image-utils': 0.4.1 '@expo/json-file': 8.3.0 - '@expo/metro-config': 0.17.6(@react-native/babel-preset@0.73.21) + '@expo/metro-config': 0.17.6(@react-native/babel-preset@0.75.0-main) '@expo/osascript': 2.1.0 '@expo/package-manager': 1.4.2 '@expo/plist': 0.1.0 @@ -2407,7 +2756,7 @@ packages: write-file-atomic: 2.4.3 dev: false - /@expo/metro-config@0.17.3(@react-native/babel-preset@0.73.21): + /@expo/metro-config@0.17.3(@react-native/babel-preset@0.75.0-main): resolution: {integrity: sha512-YW8ixbaz6yL7/Mg1rJJejiAAVQQKjGY1wXvT2Dh487r/r9/j1yE1YRS/oRY1yItYzbnHvO0p0jMnEGfiFYL3Tg==} peerDependencies: '@react-native/babel-preset': '*' @@ -2420,7 +2769,7 @@ packages: '@expo/env': 0.2.1 '@expo/json-file': 8.3.0 '@expo/spawn-async': 1.7.2 - '@react-native/babel-preset': 0.73.21(@babel/core@7.23.9)(@babel/preset-env@7.23.9) + '@react-native/babel-preset': 0.75.0-main(@babel/core@7.23.9)(@babel/preset-env@7.23.9) babel-preset-fbjs: 3.4.0(@babel/core@7.23.9) chalk: 4.1.2 debug: 4.3.4 @@ -2437,7 +2786,7 @@ packages: - supports-color dev: false - /@expo/metro-config@0.17.6(@react-native/babel-preset@0.73.21): + /@expo/metro-config@0.17.6(@react-native/babel-preset@0.75.0-main): resolution: {integrity: sha512-WaC1C+sLX/Wa7irwUigLhng3ckmXIEQefZczB8DfYmleV6uhfWWo2kz/HijFBpV7FKs2cW6u8J/aBQpFkxlcqg==} peerDependencies: '@react-native/babel-preset': '*' @@ -2450,7 +2799,7 @@ packages: '@expo/env': 0.2.2 '@expo/json-file': 8.3.0 '@expo/spawn-async': 1.7.2 - '@react-native/babel-preset': 0.73.21(@babel/core@7.23.9)(@babel/preset-env@7.23.9) + '@react-native/babel-preset': 0.75.0-main(@babel/core@7.23.9)(@babel/preset-env@7.23.9) babel-preset-fbjs: 3.4.0(@babel/core@7.23.9) chalk: 4.1.2 debug: 4.3.4 @@ -3252,6 +3601,16 @@ packages: - supports-color dev: false + /@react-native/babel-plugin-codegen@0.75.0-main(@babel/preset-env@7.23.9): + resolution: {integrity: sha512-gEl+bl+orntqNA3yGETGeHLNzDnZuQfO074BreX/l80WnZbx00/BJ57IkZ372j6I+gjki+3dYeRQOp82m/sUWQ==} + engines: {node: '>=18'} + dependencies: + '@react-native/codegen': 0.75.0-main(@babel/preset-env@7.23.9) + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + dev: false + /@react-native/babel-preset@0.73.21(@babel/core@7.23.9)(@babel/preset-env@7.23.9): resolution: {integrity: sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==} engines: {node: '>=18'} @@ -3305,6 +3664,60 @@ packages: - supports-color dev: false + /@react-native/babel-preset@0.75.0-main(@babel/core@7.23.9)(@babel/preset-env@7.23.9): + resolution: {integrity: sha512-yTyft0jSbTEfTfDUUfllJqKWLl3rNMiVMFjuWzMigikKAlSwKKUC/DxTEUfMwekFU05TjDyEOtigOTrm2yuoRQ==} + engines: {node: '>=18'} + peerDependencies: + '@babel/core': '*' + dependencies: + '@babel/core': 7.23.9 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.23.9) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.9) + '@babel/plugin-proposal-export-default-from': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.23.9) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.9) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.9) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.9) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.23.9) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-export-default-from': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.23.9) + '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.9) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.23.9) + '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.23.9) + '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.23.9) + '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.23.9) + '@babel/template': 7.24.0 + '@react-native/babel-plugin-codegen': 0.75.0-main(@babel/preset-env@7.23.9) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.23.9) + react-refresh: 0.14.0 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + dev: false + /@react-native/codegen@0.73.3(@babel/preset-env@7.23.9): resolution: {integrity: sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==} engines: {node: '>=18'} @@ -3323,6 +3736,24 @@ packages: - supports-color dev: false + /@react-native/codegen@0.75.0-main(@babel/preset-env@7.23.9): + resolution: {integrity: sha512-vcIu7x7o/3xn9UQdOPqA6B/jtxDHB+xTIDlVe7nym+0ua/OIOwYoVscTb0NtHuEjGKO1G5CTWNhl34BFhIs0+g==} + engines: {node: '>=18'} + peerDependencies: + '@babel/preset-env': ^7.1.6 + dependencies: + '@babel/parser': 7.24.4 + '@babel/preset-env': 7.23.9(@babel/core@7.23.9) + glob: 7.2.3 + hermes-parser: 0.20.1 + invariant: 2.2.4 + jscodeshift: 0.14.0(@babel/preset-env@7.23.9) + mkdirp: 0.5.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: false + /@react-native/community-cli-plugin@0.73.17(@babel/core@7.23.9)(@babel/preset-env@7.23.9): resolution: {integrity: sha512-F3PXZkcHg+1ARIr6FRQCQiB7ZAA+MQXGmq051metRscoLvgYJwj7dgC8pvgy0kexzUkHu5BNKrZeySzUft3xuQ==} engines: {node: '>=18'} @@ -5116,7 +5547,7 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@turbo/gen@1.12.2(@types/node@20.12.2)(typescript@5.4.3): + /@turbo/gen@1.12.2(@types/node@20.12.7)(typescript@5.4.3): resolution: {integrity: sha512-XmdaB4J3JvDs6/L+JkCHTf/s74+O4xKZC0HDQxvV+cyicvYocPcR5NTOuH5gdG81roR9tVQWhkAza2hgGOlSyw==} hasBin: true dependencies: @@ -5128,7 +5559,7 @@ packages: minimatch: 9.0.3 node-plop: 0.26.3 proxy-agent: 6.3.1 - ts-node: 10.9.2(@types/node@20.12.2)(typescript@5.4.3) + ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.3) update-check: 1.5.4 validate-npm-package-name: 5.0.0 transitivePeerDependencies: @@ -5277,8 +5708,8 @@ packages: undici-types: 5.26.5 dev: false - /@types/node@20.12.2: - resolution: {integrity: sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==} + /@types/node@20.12.7: + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} dependencies: undici-types: 5.26.5 dev: true @@ -5889,6 +6320,19 @@ packages: resolve: 1.22.8 dev: true + /babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.23.9): + resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.24.4 + '@babel/core': 7.23.9 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.23.9) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.9): resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} peerDependencies: @@ -5901,6 +6345,18 @@ packages: transitivePeerDependencies: - supports-color + /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.23.9): + resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.23.9) + core-js-compat: 3.36.1 + transitivePeerDependencies: + - supports-color + dev: false + /babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.23.9): resolution: {integrity: sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==} peerDependencies: @@ -5922,6 +6378,17 @@ packages: transitivePeerDependencies: - supports-color + /babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.23.9): + resolution: {integrity: sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.23.9) + transitivePeerDependencies: + - supports-color + dev: false + /babel-plugin-react-native-web@0.18.12: resolution: {integrity: sha512-4djr9G6fMdwQoD6LQ7hOKAm39+y12flWgovAqS1k5O8f42YQ3A1FFMyV5kKfetZuGhZO5BmNmOdRRZQ1TixtDw==} dev: false @@ -6166,6 +6633,17 @@ packages: node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.3) + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001608 + electron-to-chromium: 1.4.733 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) + dev: false + /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: @@ -6218,7 +6696,7 @@ packages: react: '*' react-native: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) react: 18.2.0 react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) sf-symbols-typescript: 1.0.0 @@ -6318,6 +6796,10 @@ packages: /caniuse-lite@1.0.30001583: resolution: {integrity: sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==} + /caniuse-lite@1.0.30001608: + resolution: {integrity: sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA==} + dev: false + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -6707,6 +7189,12 @@ packages: dependencies: browserslist: 4.22.3 + /core-js-compat@3.36.1: + resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} + dependencies: + browserslist: 4.23.0 + dev: false + /core-js-pure@3.35.1: resolution: {integrity: sha512-zcIdi/CL3MWbBJYo5YCeVAAx+Sy9yJE9I3/u9LkFABwbeaPhTMRWraM8mYFp9jW5Z50hOy7FVzCc8dCrpZqtIQ==} requiresBuild: true @@ -7196,6 +7684,10 @@ packages: /electron-to-chromium@1.4.656: resolution: {integrity: sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q==} + /electron-to-chromium@1.4.733: + resolution: {integrity: sha512-gUI9nhI2iBGF0OaYYLKOaOtliFMl+Bt1rY7VmEjwxOxqoYLub/D9xmduPEhbw2imE6gYkJKhIE5it+KE2ulVxQ==} + dev: false + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: @@ -7769,7 +8261,7 @@ packages: react: '*' react-native: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) react: 18.2.0 react-native: 0.73.6(@babel/core@7.23.9)(@babel/preset-env@7.23.9)(react@18.2.0) dev: false @@ -7779,7 +8271,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) dev: false /expo-asset@9.0.2(expo@50.0.14): @@ -7801,7 +8293,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) dev: false /expo-brightness@11.8.0(expo@50.0.14): @@ -7809,7 +8301,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) dev: false /expo-build-properties@0.11.1(expo@50.0.14): @@ -7818,7 +8310,7 @@ packages: expo: '*' dependencies: ajv: 8.12.0 - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) semver: 7.5.4 dev: false @@ -7828,7 +8320,7 @@ packages: expo: '*' dependencies: '@expo/config': 8.5.4 - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) transitivePeerDependencies: - supports-color dev: false @@ -7838,7 +8330,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) dev: false /expo-font@11.10.3(expo@50.0.14): @@ -7846,7 +8338,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) fontfaceobserver: 2.3.0 dev: false @@ -7855,7 +8347,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) dev: false /expo-keep-awake@12.8.2(expo@50.0.14): @@ -7863,7 +8355,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) dev: false /expo-linear-gradient@12.7.2(expo@50.0.14): @@ -7871,7 +8363,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) dev: false /expo-linking@6.2.2(expo@50.0.14): @@ -7889,7 +8381,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) dev: false /expo-modules-autolinking@1.10.3: @@ -7919,7 +8411,7 @@ packages: dependencies: '@react-native/normalize-color': 2.1.0 debug: 4.3.4 - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) transitivePeerDependencies: - supports-color dev: false @@ -7929,7 +8421,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) dev: false /expo-router@3.4.8(expo-constants@15.4.5)(expo-linking@6.2.2)(expo-modules-autolinking@1.10.3)(expo-status-bar@1.11.1)(expo@50.0.14)(react-dom@18.2.0)(react-native-reanimated@3.6.2)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.6)(react@18.2.0): @@ -7958,7 +8450,7 @@ packages: '@react-navigation/bottom-tabs': 6.5.11(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.6)(react@18.2.0) '@react-navigation/native': 6.1.9(react-native@0.73.6)(react@18.2.0) '@react-navigation/native-stack': 6.9.17(@react-navigation/native@6.1.9)(react-native-safe-area-context@4.8.2)(react-native-screens@3.29.0)(react-native@0.73.6)(react@18.2.0) - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) expo-constants: 15.4.5(expo@50.0.14) expo-linking: 6.2.2(expo@50.0.14) expo-splash-screen: 0.26.4(expo-modules-autolinking@1.10.3)(expo@50.0.14) @@ -7982,7 +8474,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) dev: false /expo-splash-screen@0.26.4(expo-modules-autolinking@1.10.3)(expo@50.0.14): @@ -7991,7 +8483,7 @@ packages: expo: '*' dependencies: '@expo/prebuild-config': 6.7.4(expo-modules-autolinking@1.10.3) - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) transitivePeerDependencies: - encoding - expo-modules-autolinking @@ -8009,7 +8501,7 @@ packages: dependencies: '@react-native/normalize-color': 2.1.0 debug: 4.3.4 - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) transitivePeerDependencies: - supports-color dev: false @@ -8020,19 +8512,19 @@ packages: expo: '*' dependencies: compare-urls: 2.0.0 - expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main) url: 0.11.3 dev: false - /expo@50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21): + /expo@50.0.14(@babel/core@7.23.9)(@react-native/babel-preset@0.75.0-main): resolution: {integrity: sha512-yLPdxCMVAbmeEIpzzyAuJ79wvr6ToDDtQmuLDMAgWtjqP8x3CGddXxUe07PpKEQgzwJabdHvCLP5Bv94wMFIjQ==} hasBin: true dependencies: '@babel/runtime': 7.23.9 - '@expo/cli': 0.17.8(@react-native/babel-preset@0.73.21)(expo-modules-autolinking@1.10.3) + '@expo/cli': 0.17.8(@react-native/babel-preset@0.75.0-main)(expo-modules-autolinking@1.10.3) '@expo/config': 8.5.4 '@expo/config-plugins': 7.8.4 - '@expo/metro-config': 0.17.6(@react-native/babel-preset@0.73.21) + '@expo/metro-config': 0.17.6(@react-native/babel-preset@0.75.0-main) '@expo/vector-icons': 14.0.0 babel-preset-expo: 10.0.1(@babel/core@7.23.9) expo-asset: 9.0.2(expo@50.0.14) @@ -8742,6 +9234,10 @@ packages: resolution: {integrity: sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==} dev: false + /hermes-estree@0.20.1: + resolution: {integrity: sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==} + dev: false + /hermes-parser@0.15.0: resolution: {integrity: sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==} dependencies: @@ -8754,6 +9250,12 @@ packages: hermes-estree: 0.18.2 dev: false + /hermes-parser@0.20.1: + resolution: {integrity: sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==} + dependencies: + hermes-estree: 0.20.1 + dev: false + /hermes-profile-transformer@0.0.6: resolution: {integrity: sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==} engines: {node: '>=8'} @@ -13131,7 +13633,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: false - /ts-node@10.9.2(@types/node@20.12.2)(typescript@5.4.3): + /ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -13150,7 +13652,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.12.2 + '@types/node': 20.12.7 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 @@ -13429,6 +13931,17 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /update-browserslist-db@1.0.13(browserslist@4.23.0): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.0 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: false + /update-check@1.5.4: resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} dependencies: diff --git a/tooling/eslint/base.js b/tooling/eslint/base.js index 8c54454..f13dbeb 100644 --- a/tooling/eslint/base.js +++ b/tooling/eslint/base.js @@ -32,6 +32,8 @@ const config = { "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-unsafe-argument": "off", "@typescript-eslint/no-unsafe-enum-comparison": "off", + "@typescript-eslint/no-useless-template-literals": "error", + "prefer-template": "error", }, ignorePatterns: [ "**/*.config.js",