From 7fa9bc6dc9395ba0de55594af62ede22ca5040d5 Mon Sep 17 00:00:00 2001 From: jamsch <12927717+jamsch@users.noreply.github.com> Date: Tue, 26 Nov 2024 10:21:30 +1300 Subject: [PATCH] feat: ios long form file transcription (#62) * feat: ios long form file transcription * add changeset * remove debug prints * update example to use on-device recognition on iOS * fix(example): recording expo-av * feat: use input sample rate, add debug playback function * remove debug logging --- .changeset/brown-flowers-build.md | 5 + README.md | 10 +- example/App.tsx | 56 +-- example/ios/Podfile.lock | 540 +++++++++++++------------- example/package-lock.json | 368 +++++++++--------- example/package.json | 6 +- ios/ExpoSpeechRecognitionModule.swift | 2 - ios/ExpoSpeechRecognizer.swift | 286 +++++++++----- package-lock.json | 211 ++++------ 9 files changed, 777 insertions(+), 707 deletions(-) create mode 100644 .changeset/brown-flowers-build.md diff --git a/.changeset/brown-flowers-build.md b/.changeset/brown-flowers-build.md new file mode 100644 index 0000000..8346cd4 --- /dev/null +++ b/.changeset/brown-flowers-build.md @@ -0,0 +1,5 @@ +--- +"expo-speech-recognition": minor +--- + +Implemented long form file-based transcriptions for iOS diff --git a/README.md b/README.md index 8a875c7..90d3d60 100644 --- a/README.md +++ b/README.md @@ -485,7 +485,7 @@ function AudioPlayer(props: { source: string }) { > [!IMPORTANT] > This feature is available on Android 13+ and iOS. If the device does not support the feature, you'll receive an `error` event with the code `audio-capture`. -Instead of using the microphone, you can configure the `audioSource.uri` option to transcribe audio files. +Instead of using the microphone, you can configure the `audioSource.uri` option to transcribe audio files. For long-form audio files, you will likely want to use on-device recognition instead of network-based recognition which you can opt-in via `requiresOnDeviceRecognition`. For Android, you should first check if the user has the speech model installed with `getSupportedLocales()`. ### Supported input audio formats @@ -500,8 +500,6 @@ The following audio formats have been verified on a Samsung Galaxy S23 Ultra on #### iOS -> Due to a limitation in the underlying `SFSpeechURLRecognitionRequest` API, file-based transcription will only transcribe the **first 1 minute of the audio file**. - The following audio formats have been verified on an iPhone 15 Pro Max on iOS 17.5: - 16000hz 16-bit 1-channel PCM WAV ([example file](https://github.com/jamsch/expo-speech-recognition/blob/main/example/assets/audio-remote/remote-en-us-sentence-16000hz-pcm_s16le.wav)) @@ -524,6 +522,8 @@ function TranscribeAudioFile() { ExpoSpeechRecognitionModule.start({ lang: "en-US", interimResults: true, + // Recommended: true on iOS, false on Android, unless the speech model is installed, which you can check with `getSupportedLocales()` + requiresOnDeviceRecognition: Platform.OS === "ios", audioSource: { /** Local file URI */ uri: "file:///path/to/audio.wav", @@ -534,7 +534,7 @@ function TranscribeAudioFile() { /** [Android only] Audio sampling rate in Hz. */ sampleRate: 16000, /** - * [Android only] The delay between chunks of audio to stream to the speech recognition service. + * The delay between chunks of audio to stream to the speech recognition service. * Use this setting to avoid being rate-limited when using network-based recognition. * If you're using on-device recognition, you may want to increase this value to avoid unprocessed audio chunks. * Default: 50ms for network-based recognition, 15ms for on-device recognition @@ -545,7 +545,7 @@ function TranscribeAudioFile() { }; useSpeechRecognitionEvent("result", (ev) => { - // Note: multiple final results will likely be returned on Android + // Note: multiple final results will likely be returned // so you'll need to concatenate previous final results setTranscription(ev.results[0]?.transcript || ""); }); diff --git a/example/App.tsx b/example/App.tsx index 78cdf7f..901e9a1 100644 --- a/example/App.tsx +++ b/example/App.tsx @@ -998,12 +998,13 @@ function TranscribeLocalAudioFile() { ExpoSpeechRecognitionModule.start({ lang: "en-US", interimResults: true, - requiresOnDeviceRecognition: true, + requiresOnDeviceRecognition: Platform.OS === "ios", audioSource: { uri: localUri, audioChannels: 1, audioEncoding: AudioEncodingAndroid.ENCODING_PCM_16BIT, sampleRate: 16000, + // chunkDelayMillis: 50, }, }); }; @@ -1188,29 +1189,38 @@ function RecordUsingExpoAvDemo() { const handleStart = async () => { setIsRecording(true); + try { + await Audio.setAudioModeAsync({ + allowsRecordingIOS: true, + playsInSilentModeIOS: true, + }); + const { recording } = await Audio.Recording.createAsync({ + isMeteringEnabled: true, + android: { + bitRate: 32000, + extension: ".m4a", + outputFormat: AndroidOutputFormat.MPEG_4, + audioEncoder: AndroidAudioEncoder.AAC, + numberOfChannels: 1, + sampleRate: 16000, + }, + ios: { + ...Audio.RecordingOptionsPresets.HIGH_QUALITY.ios, + numberOfChannels: 1, + bitRate: 16000, + extension: ".wav", + outputFormat: IOSOutputFormat.LINEARPCM, + }, + web: { + mimeType: "audio/wav", + bitsPerSecond: 128000, + }, + }); - const { recording } = await Audio.Recording.createAsync({ - isMeteringEnabled: true, - android: { - bitRate: 32000, - extension: ".m4a", - outputFormat: AndroidOutputFormat.MPEG_4, - audioEncoder: AndroidAudioEncoder.AAC, - numberOfChannels: 1, - sampleRate: 16000, - }, - ios: { - ...Audio.RecordingOptionsPresets.HIGH_QUALITY.ios, - extension: ".wav", - outputFormat: IOSOutputFormat.LINEARPCM, - }, - web: { - mimeType: "audio/wav", - bitsPerSecond: 128000, - }, - }); - - recordingRef.current = recording; + recordingRef.current = recording; + } catch (e) { + console.log("Error starting recording", e); + } }; const handleStop = async () => { diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 019b096..ea1baf2 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -6,17 +6,17 @@ PODS: - ReactCommon/turbomodule/core - EXConstants (17.0.3): - ExpoModulesCore - - Expo (52.0.7): + - Expo (52.0.11): - ExpoModulesCore - ExpoAsset (11.0.1): - ExpoModulesCore - - ExpoFileSystem (18.0.3): + - ExpoFileSystem (18.0.4): - ExpoModulesCore - ExpoFont (13.0.1): - ExpoModulesCore - ExpoKeepAwake (14.0.1): - ExpoModulesCore - - ExpoModulesCore (2.0.3): + - ExpoModulesCore (2.0.6): - DoubleConversion - glog - hermes-engine @@ -39,11 +39,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - ExpoSpeechRecognition (0.2.25): + - ExpoSpeechRecognition (1.0.1): - ExpoModulesCore - - ExpoSplashScreen (0.29.11): + - ExpoSplashScreen (0.29.13): - ExpoModulesCore - - FBLazyVector (0.76.2) + - FBLazyVector (0.76.3) - fmt (9.1.0) - glog (0.3.5) - hermes-engine (0.76.2): @@ -65,32 +65,32 @@ PODS: - DoubleConversion - fmt (= 9.1.0) - glog - - RCTDeprecation (0.76.2) - - RCTRequired (0.76.2) - - RCTTypeSafety (0.76.2): - - FBLazyVector (= 0.76.2) - - RCTRequired (= 0.76.2) - - React-Core (= 0.76.2) - - React (0.76.2): - - React-Core (= 0.76.2) - - React-Core/DevSupport (= 0.76.2) - - React-Core/RCTWebSocket (= 0.76.2) - - React-RCTActionSheet (= 0.76.2) - - React-RCTAnimation (= 0.76.2) - - React-RCTBlob (= 0.76.2) - - React-RCTImage (= 0.76.2) - - React-RCTLinking (= 0.76.2) - - React-RCTNetwork (= 0.76.2) - - React-RCTSettings (= 0.76.2) - - React-RCTText (= 0.76.2) - - React-RCTVibration (= 0.76.2) - - React-callinvoker (0.76.2) - - React-Core (0.76.2): + - RCTDeprecation (0.76.3) + - RCTRequired (0.76.3) + - RCTTypeSafety (0.76.3): + - FBLazyVector (= 0.76.3) + - RCTRequired (= 0.76.3) + - React-Core (= 0.76.3) + - React (0.76.3): + - React-Core (= 0.76.3) + - React-Core/DevSupport (= 0.76.3) + - React-Core/RCTWebSocket (= 0.76.3) + - React-RCTActionSheet (= 0.76.3) + - React-RCTAnimation (= 0.76.3) + - React-RCTBlob (= 0.76.3) + - React-RCTImage (= 0.76.3) + - React-RCTLinking (= 0.76.3) + - React-RCTNetwork (= 0.76.3) + - React-RCTSettings (= 0.76.3) + - React-RCTText (= 0.76.3) + - React-RCTVibration (= 0.76.3) + - React-callinvoker (0.76.3) + - React-Core (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.76.2) + - React-Core/Default (= 0.76.3) - React-cxxreact - React-featureflags - React-hermes @@ -102,7 +102,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (0.76.2): + - React-Core/CoreModulesHeaders (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -119,7 +119,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (0.76.2): + - React-Core/Default (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -135,13 +135,13 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (0.76.2): + - React-Core/DevSupport (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.76.2) - - React-Core/RCTWebSocket (= 0.76.2) + - React-Core/Default (= 0.76.3) + - React-Core/RCTWebSocket (= 0.76.3) - React-cxxreact - React-featureflags - React-hermes @@ -153,7 +153,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.76.2): + - React-Core/RCTActionSheetHeaders (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -170,7 +170,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (0.76.2): + - React-Core/RCTAnimationHeaders (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -187,7 +187,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (0.76.2): + - React-Core/RCTBlobHeaders (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -204,7 +204,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (0.76.2): + - React-Core/RCTImageHeaders (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -221,7 +221,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTLinkingHeaders (0.76.2): + - React-Core/RCTLinkingHeaders (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -238,7 +238,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTNetworkHeaders (0.76.2): + - React-Core/RCTNetworkHeaders (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -255,7 +255,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTSettingsHeaders (0.76.2): + - React-Core/RCTSettingsHeaders (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -272,7 +272,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTTextHeaders (0.76.2): + - React-Core/RCTTextHeaders (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -289,7 +289,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTVibrationHeaders (0.76.2): + - React-Core/RCTVibrationHeaders (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -306,12 +306,12 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTWebSocket (0.76.2): + - React-Core/RCTWebSocket (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.76.2) + - React-Core/Default (= 0.76.3) - React-cxxreact - React-featureflags - React-hermes @@ -323,37 +323,37 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-CoreModules (0.76.2): + - React-CoreModules (0.76.3): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.76.2) - - React-Core/CoreModulesHeaders (= 0.76.2) - - React-jsi (= 0.76.2) + - RCTTypeSafety (= 0.76.3) + - React-Core/CoreModulesHeaders (= 0.76.3) + - React-jsi (= 0.76.3) - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.76.2) + - React-RCTImage (= 0.76.3) - ReactCodegen - ReactCommon - SocketRocket (= 0.7.1) - - React-cxxreact (0.76.2): + - React-cxxreact (0.76.3): - boost - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.2) - - React-debug (= 0.76.2) - - React-jsi (= 0.76.2) + - React-callinvoker (= 0.76.3) + - React-debug (= 0.76.3) + - React-jsi (= 0.76.3) - React-jsinspector - - React-logger (= 0.76.2) - - React-perflogger (= 0.76.2) - - React-runtimeexecutor (= 0.76.2) - - React-timing (= 0.76.2) - - React-debug (0.76.2) - - React-defaultsnativemodule (0.76.2): + - React-logger (= 0.76.3) + - React-perflogger (= 0.76.3) + - React-runtimeexecutor (= 0.76.3) + - React-timing (= 0.76.3) + - React-debug (0.76.3) + - React-defaultsnativemodule (0.76.3): - DoubleConversion - glog - hermes-engine @@ -378,7 +378,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-domnativemodule (0.76.2): + - React-domnativemodule (0.76.3): - DoubleConversion - glog - hermes-engine @@ -400,7 +400,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-Fabric (0.76.2): + - React-Fabric (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -411,21 +411,21 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.76.2) - - React-Fabric/attributedstring (= 0.76.2) - - React-Fabric/componentregistry (= 0.76.2) - - React-Fabric/componentregistrynative (= 0.76.2) - - React-Fabric/components (= 0.76.2) - - React-Fabric/core (= 0.76.2) - - React-Fabric/dom (= 0.76.2) - - React-Fabric/imagemanager (= 0.76.2) - - React-Fabric/leakchecker (= 0.76.2) - - React-Fabric/mounting (= 0.76.2) - - React-Fabric/observers (= 0.76.2) - - React-Fabric/scheduler (= 0.76.2) - - React-Fabric/telemetry (= 0.76.2) - - React-Fabric/templateprocessor (= 0.76.2) - - React-Fabric/uimanager (= 0.76.2) + - React-Fabric/animations (= 0.76.3) + - React-Fabric/attributedstring (= 0.76.3) + - React-Fabric/componentregistry (= 0.76.3) + - React-Fabric/componentregistrynative (= 0.76.3) + - React-Fabric/components (= 0.76.3) + - React-Fabric/core (= 0.76.3) + - React-Fabric/dom (= 0.76.3) + - React-Fabric/imagemanager (= 0.76.3) + - React-Fabric/leakchecker (= 0.76.3) + - React-Fabric/mounting (= 0.76.3) + - React-Fabric/observers (= 0.76.3) + - React-Fabric/scheduler (= 0.76.3) + - React-Fabric/telemetry (= 0.76.3) + - React-Fabric/templateprocessor (= 0.76.3) + - React-Fabric/uimanager (= 0.76.3) - React-featureflags - React-graphics - React-jsi @@ -435,7 +435,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.76.2): + - React-Fabric/animations (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -455,7 +455,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.76.2): + - React-Fabric/attributedstring (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -475,7 +475,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.76.2): + - React-Fabric/componentregistry (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -495,7 +495,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.76.2): + - React-Fabric/componentregistrynative (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -515,7 +515,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.76.2): + - React-Fabric/components (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -526,9 +526,9 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.76.2) - - React-Fabric/components/root (= 0.76.2) - - React-Fabric/components/view (= 0.76.2) + - React-Fabric/components/legacyviewmanagerinterop (= 0.76.3) + - React-Fabric/components/root (= 0.76.3) + - React-Fabric/components/view (= 0.76.3) - React-featureflags - React-graphics - React-jsi @@ -538,7 +538,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.76.2): + - React-Fabric/components/legacyviewmanagerinterop (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -558,7 +558,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.76.2): + - React-Fabric/components/root (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -578,7 +578,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.76.2): + - React-Fabric/components/view (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -599,7 +599,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.76.2): + - React-Fabric/core (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -619,7 +619,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (0.76.2): + - React-Fabric/dom (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -639,7 +639,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.76.2): + - React-Fabric/imagemanager (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -659,7 +659,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.76.2): + - React-Fabric/leakchecker (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -679,7 +679,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.76.2): + - React-Fabric/mounting (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -699,7 +699,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (0.76.2): + - React-Fabric/observers (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -710,7 +710,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.76.2) + - React-Fabric/observers/events (= 0.76.3) - React-featureflags - React-graphics - React-jsi @@ -720,7 +720,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.76.2): + - React-Fabric/observers/events (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -740,7 +740,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.76.2): + - React-Fabric/scheduler (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -762,7 +762,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.76.2): + - React-Fabric/telemetry (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -782,7 +782,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.76.2): + - React-Fabric/templateprocessor (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -802,7 +802,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.76.2): + - React-Fabric/uimanager (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -813,7 +813,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.76.2) + - React-Fabric/uimanager/consistency (= 0.76.3) - React-featureflags - React-graphics - React-jsi @@ -824,7 +824,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.76.2): + - React-Fabric/uimanager/consistency (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -845,7 +845,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (0.76.2): + - React-FabricComponents (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -857,8 +857,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.76.2) - - React-FabricComponents/textlayoutmanager (= 0.76.2) + - React-FabricComponents/components (= 0.76.3) + - React-FabricComponents/textlayoutmanager (= 0.76.3) - React-featureflags - React-graphics - React-jsi @@ -870,7 +870,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (0.76.2): + - React-FabricComponents/components (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -882,15 +882,15 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.76.2) - - React-FabricComponents/components/iostextinput (= 0.76.2) - - React-FabricComponents/components/modal (= 0.76.2) - - React-FabricComponents/components/rncore (= 0.76.2) - - React-FabricComponents/components/safeareaview (= 0.76.2) - - React-FabricComponents/components/scrollview (= 0.76.2) - - React-FabricComponents/components/text (= 0.76.2) - - React-FabricComponents/components/textinput (= 0.76.2) - - React-FabricComponents/components/unimplementedview (= 0.76.2) + - React-FabricComponents/components/inputaccessory (= 0.76.3) + - React-FabricComponents/components/iostextinput (= 0.76.3) + - React-FabricComponents/components/modal (= 0.76.3) + - React-FabricComponents/components/rncore (= 0.76.3) + - React-FabricComponents/components/safeareaview (= 0.76.3) + - React-FabricComponents/components/scrollview (= 0.76.3) + - React-FabricComponents/components/text (= 0.76.3) + - React-FabricComponents/components/textinput (= 0.76.3) + - React-FabricComponents/components/unimplementedview (= 0.76.3) - React-featureflags - React-graphics - React-jsi @@ -902,7 +902,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (0.76.2): + - React-FabricComponents/components/inputaccessory (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -925,7 +925,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (0.76.2): + - React-FabricComponents/components/iostextinput (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -948,7 +948,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (0.76.2): + - React-FabricComponents/components/modal (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -971,7 +971,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (0.76.2): + - React-FabricComponents/components/rncore (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -994,7 +994,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (0.76.2): + - React-FabricComponents/components/safeareaview (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1017,7 +1017,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (0.76.2): + - React-FabricComponents/components/scrollview (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1040,7 +1040,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (0.76.2): + - React-FabricComponents/components/text (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1063,7 +1063,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (0.76.2): + - React-FabricComponents/components/textinput (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1086,7 +1086,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (0.76.2): + - React-FabricComponents/components/unimplementedview (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1109,7 +1109,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (0.76.2): + - React-FabricComponents/textlayoutmanager (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1132,26 +1132,26 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (0.76.2): + - React-FabricImage (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.76.2) - - RCTTypeSafety (= 0.76.2) + - RCTRequired (= 0.76.3) + - RCTTypeSafety (= 0.76.3) - React-Fabric - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.76.2) + - React-jsiexecutor (= 0.76.3) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.76.2) - - React-featureflagsnativemodule (0.76.2): + - React-featureflags (0.76.3) + - React-featureflagsnativemodule (0.76.3): - DoubleConversion - glog - hermes-engine @@ -1172,7 +1172,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-graphics (0.76.2): + - React-graphics (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1180,19 +1180,19 @@ PODS: - React-jsi - React-jsiexecutor - React-utils - - React-hermes (0.76.2): + - React-hermes (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.76.2) + - React-cxxreact (= 0.76.3) - React-jsi - - React-jsiexecutor (= 0.76.2) + - React-jsiexecutor (= 0.76.3) - React-jsinspector - - React-perflogger (= 0.76.2) + - React-perflogger (= 0.76.3) - React-runtimeexecutor - - React-idlecallbacksnativemodule (0.76.2): + - React-idlecallbacksnativemodule (0.76.3): - DoubleConversion - glog - hermes-engine @@ -1214,7 +1214,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-ImageManager (0.76.2): + - React-ImageManager (0.76.3): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1223,47 +1223,47 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.76.2): + - React-jserrorhandler (0.76.3): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-cxxreact - React-debug - React-jsi - - React-jsi (0.76.2): + - React-jsi (0.76.3): - boost - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.76.2): + - React-jsiexecutor (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.76.2) - - React-jsi (= 0.76.2) + - React-cxxreact (= 0.76.3) + - React-jsi (= 0.76.3) - React-jsinspector - - React-perflogger (= 0.76.2) - - React-jsinspector (0.76.2): + - React-perflogger (= 0.76.3) + - React-jsinspector (0.76.3): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - React-featureflags - React-jsi - - React-perflogger (= 0.76.2) - - React-runtimeexecutor (= 0.76.2) - - React-jsitracing (0.76.2): + - React-perflogger (= 0.76.3) + - React-runtimeexecutor (= 0.76.3) + - React-jsitracing (0.76.3): - React-jsi - - React-logger (0.76.2): + - React-logger (0.76.3): - glog - - React-Mapbuffer (0.76.2): + - React-Mapbuffer (0.76.3): - glog - React-debug - - React-microtasksnativemodule (0.76.2): + - React-microtasksnativemodule (0.76.3): - DoubleConversion - glog - hermes-engine @@ -1284,8 +1284,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-nativeconfig (0.76.2) - - React-NativeModulesApple (0.76.2): + - React-nativeconfig (0.76.3) + - React-NativeModulesApple (0.76.3): - glog - hermes-engine - React-callinvoker @@ -1296,16 +1296,16 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.76.2): + - React-perflogger (0.76.3): - DoubleConversion - RCT-Folly (= 2024.01.01.00) - - React-performancetimeline (0.76.2): + - React-performancetimeline (0.76.3): - RCT-Folly (= 2024.01.01.00) - React-cxxreact - React-timing - - React-RCTActionSheet (0.76.2): - - React-Core/RCTActionSheetHeaders (= 0.76.2) - - React-RCTAnimation (0.76.2): + - React-RCTActionSheet (0.76.3): + - React-Core/RCTActionSheetHeaders (= 0.76.3) + - React-RCTAnimation (0.76.3): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTAnimationHeaders @@ -1313,7 +1313,7 @@ PODS: - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTAppDelegate (0.76.2): + - React-RCTAppDelegate (0.76.3): - RCT-Folly (= 2024.01.01.00) - RCTRequired - RCTTypeSafety @@ -1338,7 +1338,7 @@ PODS: - React-utils - ReactCodegen - ReactCommon - - React-RCTBlob (0.76.2): + - React-RCTBlob (0.76.3): - DoubleConversion - fmt (= 9.1.0) - hermes-engine @@ -1351,7 +1351,7 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTFabric (0.76.2): + - React-RCTFabric (0.76.3): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) @@ -1374,7 +1374,7 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.76.2): + - React-RCTImage (0.76.3): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTImageHeaders @@ -1383,14 +1383,14 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTLinking (0.76.2): - - React-Core/RCTLinkingHeaders (= 0.76.2) - - React-jsi (= 0.76.2) + - React-RCTLinking (0.76.3): + - React-Core/RCTLinkingHeaders (= 0.76.3) + - React-jsi (= 0.76.3) - React-NativeModulesApple - ReactCodegen - ReactCommon - - ReactCommon/turbomodule/core (= 0.76.2) - - React-RCTNetwork (0.76.2): + - ReactCommon/turbomodule/core (= 0.76.3) + - React-RCTNetwork (0.76.3): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders @@ -1398,7 +1398,7 @@ PODS: - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTSettings (0.76.2): + - React-RCTSettings (0.76.3): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders @@ -1406,24 +1406,24 @@ PODS: - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTText (0.76.2): - - React-Core/RCTTextHeaders (= 0.76.2) + - React-RCTText (0.76.3): + - React-Core/RCTTextHeaders (= 0.76.3) - Yoga - - React-RCTVibration (0.76.2): + - React-RCTVibration (0.76.3): - RCT-Folly (= 2024.01.01.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-rendererconsistency (0.76.2) - - React-rendererdebug (0.76.2): + - React-rendererconsistency (0.76.3) + - React-rendererdebug (0.76.3): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - React-debug - - React-rncore (0.76.2) - - React-RuntimeApple (0.76.2): + - React-rncore (0.76.3) + - React-RuntimeApple (0.76.3): - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-callinvoker @@ -1442,7 +1442,7 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - React-RuntimeCore (0.76.2): + - React-RuntimeCore (0.76.3): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) @@ -1456,9 +1456,9 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.76.2): - - React-jsi (= 0.76.2) - - React-RuntimeHermes (0.76.2): + - React-runtimeexecutor (0.76.3): + - React-jsi (= 0.76.3) + - React-RuntimeHermes (0.76.3): - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-featureflags @@ -1469,7 +1469,7 @@ PODS: - React-nativeconfig - React-RuntimeCore - React-utils - - React-runtimescheduler (0.76.2): + - React-runtimescheduler (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -1484,14 +1484,14 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - React-timing (0.76.2) - - React-utils (0.76.2): + - React-timing (0.76.3) + - React-utils (0.76.3): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - React-debug - - React-jsi (= 0.76.2) - - ReactCodegen (0.76.2): + - React-jsi (= 0.76.3) + - ReactCodegen (0.76.3): - DoubleConversion - glog - hermes-engine @@ -1511,46 +1511,46 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (0.76.2): - - ReactCommon/turbomodule (= 0.76.2) - - ReactCommon/turbomodule (0.76.2): + - ReactCommon (0.76.3): + - ReactCommon/turbomodule (= 0.76.3) + - ReactCommon/turbomodule (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.2) - - React-cxxreact (= 0.76.2) - - React-jsi (= 0.76.2) - - React-logger (= 0.76.2) - - React-perflogger (= 0.76.2) - - ReactCommon/turbomodule/bridging (= 0.76.2) - - ReactCommon/turbomodule/core (= 0.76.2) - - ReactCommon/turbomodule/bridging (0.76.2): + - React-callinvoker (= 0.76.3) + - React-cxxreact (= 0.76.3) + - React-jsi (= 0.76.3) + - React-logger (= 0.76.3) + - React-perflogger (= 0.76.3) + - ReactCommon/turbomodule/bridging (= 0.76.3) + - ReactCommon/turbomodule/core (= 0.76.3) + - ReactCommon/turbomodule/bridging (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.2) - - React-cxxreact (= 0.76.2) - - React-jsi (= 0.76.2) - - React-logger (= 0.76.2) - - React-perflogger (= 0.76.2) - - ReactCommon/turbomodule/core (0.76.2): + - React-callinvoker (= 0.76.3) + - React-cxxreact (= 0.76.3) + - React-jsi (= 0.76.3) + - React-logger (= 0.76.3) + - React-perflogger (= 0.76.3) + - ReactCommon/turbomodule/core (0.76.3): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.2) - - React-cxxreact (= 0.76.2) - - React-debug (= 0.76.2) - - React-featureflags (= 0.76.2) - - React-jsi (= 0.76.2) - - React-logger (= 0.76.2) - - React-perflogger (= 0.76.2) - - React-utils (= 0.76.2) + - React-callinvoker (= 0.76.3) + - React-cxxreact (= 0.76.3) + - React-debug (= 0.76.3) + - React-featureflags (= 0.76.3) + - React-jsi (= 0.76.3) + - React-logger (= 0.76.3) + - React-perflogger (= 0.76.3) + - React-utils (= 0.76.3) - RNReanimated (3.16.1): - DoubleConversion - glog @@ -1879,77 +1879,77 @@ SPEC CHECKSUMS: DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 EXAV: 9773c9799767c9925547b05e41a26a0240bb8ef2 EXConstants: dd2fe64c6cdb1383b694c309a63028a8e9f2be6d - Expo: 46cbe74ce0d0f4a4d7b726e90693eb8dfcec6de0 + Expo: 148aac4ce0da148c63447d09ae41ddb153f35506 ExpoAsset: 8138f2a9ec55ae1ad7c3871448379f7d97692d15 - ExpoFileSystem: cc31b7a48031ab565f9eb5c2b61aa08d774a271a + ExpoFileSystem: dc2679a2b5d4c465ca881129074da95faee943d5 ExpoFont: 7522d869d84ee2ee8093ee997fef5b86f85d856b ExpoKeepAwake: 783e68647b969b210a786047c3daa7b753dcac1f - ExpoModulesCore: f12deb734bfa4efc1f1783eafc324c933a985a48 - ExpoSpeechRecognition: f61156226f963808aeadcde6d463133e162f138a - ExpoSplashScreen: a1c1b3a9648ab738be13fb109c42a85b32e08e5a - FBLazyVector: bc70dcb22ad30ce734a7cce7210791dc737e230f + ExpoModulesCore: bb3f481a7912159f2289a653e4195146170f0a00 + ExpoSpeechRecognition: ca7a3fd9db927d3b5cd560759fcc02b350bb809d + ExpoSplashScreen: 43692d041bf848883410ed9d8836871ca5cf4d6a + FBLazyVector: be7314029d6ec6b90f0f75ce1195b8130ed9ac4f fmt: 10c6e61f4be25dc963c36bd73fc7b1705fe975be glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a hermes-engine: 3852e37f6158a2fcfad23e31215ed495da3a6a40 RCT-Folly: bf5c0376ffe4dd2cf438dcf86db385df9fdce648 - RCTDeprecation: d575d28132f93e5deef4849d5afffb4ac4e63226 - RCTRequired: e2e5df1df76aac8685aabfebca389e6bec64792b - RCTTypeSafety: 30e36ceafa26979860e13fb3f234fb61692924c2 - React: 10ad41b51f981992714011b6a4e081234c28dc2e - React-callinvoker: 58b51494f8b2cca07a27fc6f69273239c30a1e70 - React-Core: 54860c16fb5873a6f00dd44d8979bbb648b34c7c - React-CoreModules: 443101f113a7b5d51b93e061574dcadf7850f8cc - React-cxxreact: 5407ecb854a755de34c0e6b03965d3a51c28c933 - React-debug: 252c723eb205cc508aa9690a16dff46293c30ed8 - React-defaultsnativemodule: 1fb982daba4ac5bb3052ae262a919a0d117f3b1b - React-domnativemodule: 914401fb13804b7828020d7b3a89afa72ff22564 - React-Fabric: 58696d9eaee305bb5a5af26071966dcfb941f9eb - React-FabricComponents: a037b977430eceae4bac539934497bacc8de3971 - React-FabricImage: 2658c3e383195f69e7c83e4f75519bee17c3169a - React-featureflags: 7dc483869b3a940dcd92c7942c5e3492ad6afe68 - React-featureflagsnativemodule: 7a50dda8a6d3883139c47b4bda797156737240db - React-graphics: 066863eb87b142f0603fed08c71bac452238ac3e - React-hermes: 8f31f252aff98a4cb711ccf6644cccfe35d8edd1 - React-idlecallbacksnativemodule: c3f68fe97e379c4c1b6c4ba25e5d450cbe931e25 - React-ImageManager: 36240f8ab7181551574ca443da507272dbbf7014 - React-jserrorhandler: 1aa045c492222751dc476bcb973f787e82f952b9 - React-jsi: b96853ac12c1dab5fe3ea131f959fda0bbaf1151 - React-jsiexecutor: e38748a0e9d899f63dec562f93ac06c7acbc813d - React-jsinspector: 91b3c73d2afb7627af7872cedb0b74a0f00f57d1 - React-jsitracing: a340047c9fd31a36b222569c402e472e20557805 - React-logger: 81d58ca6f1d93fca9a770bda6cc1c4fbfcc99c9c - React-Mapbuffer: 726951e68f4bb1c2513d322f2548798b2a3d628d - React-microtasksnativemodule: 7a69a9b8fded72ea3cf81923ecf75cad5558ed26 - React-nativeconfig: 470fce6d871c02dc5eff250a362d56391b7f52d6 - React-NativeModulesApple: 6297fc3136c1fd42884795c51d7207de6312b606 - React-perflogger: f2c94413cfad44817c96cab33753831e73f0d0dd - React-performancetimeline: d6e493713e6aab3cc8b7c1c07e97160e22dd79cc - React-RCTActionSheet: 2eb26cbf384f3d3b2cb2e23be850a956d83f77ab - React-RCTAnimation: 59463699a92edc6705ce5306bb789d6a0ca4df0b - React-RCTAppDelegate: 4d9efca7caa477b106e3d55af339d0e071441536 - React-RCTBlob: 0883f5363069ad30f628c970fcb413a619e42804 - React-RCTFabric: 4c761af601a1fe0061b15df97af9fb77403362a2 - React-RCTImage: 78884b7ea6ef4f7bb9655614bf09a40054f282ce - React-RCTLinking: b9beba7465fd9a1ed7a88a4e7fc403d26e17ab95 - React-RCTNetwork: 701d9c050077596b15a11b6b573ed95c309d2315 - React-RCTSettings: e700a82e3e923c10060b8f65297f9d321b93d8eb - React-RCTText: e782ce1c3f9d915daf50d97157f8c226e8f3d206 - React-RCTVibration: 2a19c56be78cb7afce9f4f3471aacfb063f32a00 - React-rendererconsistency: b389e324712bf0869529823216e922836ed9b737 - React-rendererdebug: 9f5629032c0937c62b21dcaf96b374a149bf8a44 - React-rncore: 2cf6b2348ee5d5431c4735180364b207ecf47123 - React-RuntimeApple: 84d648b9a87c34041d6628dde50d1acf54e5bf89 - React-RuntimeCore: 79290b2eb17a25c1b23c4d5dde13d43c20467eef - React-runtimeexecutor: 69e27948ee2127400297c7de50b809a7cd127a15 - React-RuntimeHermes: 5fe2082f98187410c1815c532f72348fbe1d0517 - React-runtimescheduler: 95b7087f459699756c1b7feb3f4637066c337b62 - React-timing: 97673939f96f79031d2a5a0a92285618475149ec - React-utils: ed6cb7ba089ac0856aa104df12691e99abbf14e1 - ReactCodegen: 93b271af49774429f34d7fd561197020d86436e2 - ReactCommon: 208cb02e3c0bb8a727b3e1a1782202bcfa5d9631 + RCTDeprecation: 2c5e1000b04ab70b53956aa498bf7442c3c6e497 + RCTRequired: 5f785a001cf68a551c5f5040fb4c415672dbb481 + RCTTypeSafety: 6b98db8965005d32449605c0d005ecb4fee8a0f7 + React: 8077bf7c185afb515be82518507e16f71a247a5e + React-callinvoker: 519eee9520727805e2867a6d8dad4ebbeed543db + React-Core: e364ceda7d086c7d14adeec0eb880a90073e3dde + React-CoreModules: 291be650024d9db086c95fd1d7e7d9607c6de62b + React-cxxreact: 5cf17d13ca0fc0734e1bb0ed9615d1d1fc45ef78 + React-debug: 931ca94abd6b1bcab539e356e20df788afecae8f + React-defaultsnativemodule: 6afc2dd3619bac12dc54c1ee939bf14f9aa96b42 + React-domnativemodule: f140d46f6f3c3f1efc987c98b464fcbece0cc93a + React-Fabric: e1774fe4b579e34c2c5721e9351c8ce869e7b5f0 + React-FabricComponents: 528ff9f96d150379ed404221d70cc7019ca76865 + React-FabricImage: 31680b7ddc740e040277176fbd6541fcf0fd44af + React-featureflags: 7c7a74b65ee5a228f520b387ebfe0e8d9cecc622 + React-featureflagsnativemodule: dd3450366b1c9557975e457ce6baa151ccee84da + React-graphics: 7f0d3e06d356e8476bd8ba95d90762fc01138ebc + React-hermes: f83fafe6a1c845dace7abad4a5d7366cbb42ab96 + React-idlecallbacksnativemodule: 14ce331438e2bca7d464a8a211b14543aff4dc91 + React-ImageManager: 2b9274ea973f43597a554a182d7ef525836172c6 + React-jserrorhandler: 3b521485275d295cfc6ec6bfa921a1d608693ecf + React-jsi: fd23c1d759feb709784fd4c835b510b90a94dd12 + React-jsiexecutor: 74628d57accc03d4b5df53db813ef6dcd704c9ae + React-jsinspector: 89a1e27e97c762de81bd4b9cb1314750304bba38 + React-jsitracing: 11b6646d7b2ecdc7a475f65b2cb12d3805964195 + React-logger: 26155dc23db5c9038794db915f80bd2044512c2e + React-Mapbuffer: ad1ba0205205a16dbff11b8ade6d1b3959451658 + React-microtasksnativemodule: e771eb9eb6ace5884ee40a293a0e14a9d7a4343c + React-nativeconfig: aeed6e2a8ac02b2df54476afcc7c663416c12bf7 + React-NativeModulesApple: c5b7813da94136f50ef084fa1ac077332dcfc658 + React-perflogger: 6afb7eebf7d9521cc70481688ccddf212970e9d3 + React-performancetimeline: 81884d35896b22d51832e7c8748c8330ec73c491 + React-RCTActionSheet: c940a35d71686941ac2b96dd07bde11ea0f0c34f + React-RCTAnimation: e1dbb4e530d6f58437ab2fae372de3788ecdffab + React-RCTAppDelegate: f9825950ac2c52ae1cf46b648bb362b86b62fe41 + React-RCTBlob: 9cdac4721a76e2d132fb1760eafd0a8f150d1c96 + React-RCTFabric: c0aa01a448bcebb1326d068ed7545eb11561e663 + React-RCTImage: f09f5165807e1a69a2bbac6c7168a8ed57ed4e26 + React-RCTLinking: 4ea06b79cba7e15d8af4d86b1dcede6bd29a47fd + React-RCTNetwork: 43a38148c7a4a2380e76b08f07f02ee8eaac8965 + React-RCTSettings: cc60bb6b38eed0683696b5ddf45b0a4a1441147b + React-RCTText: fbe5e6e886beefd5d432790bc50b7aa2b6504264 + React-RCTVibration: 061dbf7a0a1e77bfc1c4672e7be6884dc12f18bf + React-rendererconsistency: 52b471890a1946991f2db81aa6867b14d93f4ea5 + React-rendererdebug: 3f63479f704e266a3bf104c897315a885c72859b + React-rncore: 33ea67bfd2eeaa4f4a0c9e0e8bd55e9b7ccb9faa + React-RuntimeApple: bcd91a191637ab5895593135de74ac54bf88df5d + React-RuntimeCore: 3a42a7f12f5f6cc4cb0e22446540165d204d7a15 + React-runtimeexecutor: db3f17084ee7b71ab84912c527d428cc3a137841 + React-RuntimeHermes: 91bcd6aeec4bab20cebd33cb8984e3825ccdc77e + React-runtimescheduler: 92a5a092ded9a9aaac765ac940d26b52bac48901 + React-timing: 54693ad0872f64127f7cb41675b1be4fd28ea4dc + React-utils: 2bcaf4f4dfe361344bce2fae428603d518488630 + ReactCodegen: ae99a130606068ed40d1d9c0d5f25fda142a0647 + ReactCommon: 89c87b343deacc8610b099ac764848f0ce937e3e RNReanimated: 77242c6d67416988a2fd9f5cf574bb3e60016362 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: c5b0e913b5b3b4cde588227c1402e747797061f3 + Yoga: f6dc1b6029519815d5516a1241821c6a9074af6d PODFILE CHECKSUM: b669beec91e46e34d5851bf1e1865a105e50d754 diff --git a/example/package-lock.json b/example/package-lock.json index 039424d..2686021 100644 --- a/example/package-lock.json +++ b/example/package-lock.json @@ -11,16 +11,16 @@ "@expo/metro-runtime": "~4.0.0", "@types/dom-speech-recognition": "^0.0.4", "babel-plugin-module-resolver": "^5.0.2", - "expo": "~52.0.7", + "expo": "~52.0.11", "expo-asset": "~11.0.1", "expo-av": "~15.0.1", "expo-build-properties": "~0.13.1", "expo-file-system": "~18.0.3", - "expo-splash-screen": "~0.29.11", + "expo-splash-screen": "~0.29.13", "expo-status-bar": "~2.0.0", "react": "18.3.1", "react-dom": "18.3.1", - "react-native": "0.76.2", + "react-native": "0.76.3", "react-native-reanimated": "~3.16.1", "react-native-web": "~0.19.13" }, @@ -2090,16 +2090,16 @@ } }, "node_modules/@expo/cli": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.21.5.tgz", - "integrity": "sha512-hd0pC5ntZxon7IijOsqp5wPOMGtaQNvTPOc74EQc+WS+Cldd7cMNSKKVUI2X7Lrn2Zcje9ne/WgGCnMTjdcVgA==", + "version": "0.21.8", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.21.8.tgz", + "integrity": "sha512-gU+NlL/XS9r7LEfLhjDDKuv3jEtOh+rVnk/k7Lp8WrUwaMCoEGfmQpSqLXetFCCC4UFXSaj1cdMGoy2UBw4rew==", "license": "MIT", "dependencies": { "@0no-co/graphql.web": "^1.0.8", "@babel/runtime": "^7.20.0", "@expo/code-signing-certificates": "^0.0.5", "@expo/config": "~10.0.4", - "@expo/config-plugins": "~9.0.3", + "@expo/config-plugins": "~9.0.10", "@expo/devcert": "^1.1.2", "@expo/env": "~0.4.0", "@expo/image-utils": "^0.6.0", @@ -2108,11 +2108,11 @@ "@expo/osascript": "^2.0.31", "@expo/package-manager": "^1.5.0", "@expo/plist": "^0.2.0", - "@expo/prebuild-config": "^8.0.16", + "@expo/prebuild-config": "^8.0.17", "@expo/rudder-sdk-node": "^1.1.1", "@expo/spawn-async": "^1.7.2", "@expo/xcpretty": "^4.3.0", - "@react-native/dev-middleware": "0.76.2", + "@react-native/dev-middleware": "0.76.3", "@urql/core": "^5.0.6", "@urql/exchange-retry": "^1.3.0", "accepts": "^1.3.8", @@ -2329,13 +2329,13 @@ } }, "node_modules/@expo/config": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.4.tgz", - "integrity": "sha512-pkvdPqKTaP6+Qvc8aTmDLQ9Dfwp98P1GO37MFKwsF5XormfN/9/eN8HfIRoM6d3uSIVKCcWW3X2yAEbNmOyfXw==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.5.tgz", + "integrity": "sha512-wq48h3HlAPq5v/gMprarAiVY1aEXNBVJ+Em0vrHcYFO8UyxzR6oIao2E4Ed3VWHqhTzPXkMPH4hKCKlzFVBFwQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~9.0.0", + "@expo/config-plugins": "~9.0.10", "@expo/config-types": "^52.0.0", "@expo/json-file": "^9.0.0", "deepmerge": "^4.3.1", @@ -2350,9 +2350,9 @@ } }, "node_modules/@expo/config-plugins": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.9.tgz", - "integrity": "sha512-pbgbY3SwCMwkijhfe163J05BrTx4MqzeaV+nVgUMs7vRcjHY1tfM57Pdv6SPtgeDvZ8fvdXFXXzkJva+a7C9Bw==", + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.10.tgz", + "integrity": "sha512-4piPSylJ8z3to+YZpl/6M2mLxASOdIFANA8FYihsTf9kWlyimV9L/+MGgPXJcieaHXYZZqOryf8hQFVeg/68+A==", "license": "MIT", "dependencies": { "@expo/config-types": "^52.0.0", @@ -3405,9 +3405,10 @@ } }, "node_modules/@expo/spawn-async/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4120,30 +4121,30 @@ } }, "node_modules/@react-native/assets-registry": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.2.tgz", - "integrity": "sha512-0CTWv/FqJzU1vsyx2JpCkyLSUOePU7DdKgFvtHdwOxFpOw3aBecszqZDGJADYV9WSZQlq6RV0HmIaWycGYCOMA==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.3.tgz", + "integrity": "sha512-7Fnc3lzCFFpnoyL1egua6d/qUp0KiIpeSLbfOMln4nI2g2BMzyFHdPjJnpLV2NehmS0omOOkrfRqK5u1F/MXzA==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.2.tgz", - "integrity": "sha512-a1IfRho/ZUVbvzSu3JWkxsvqyEI7IXApPQikhGWw4e24QYsIYHdlIULs3rb0840lqpO1dbbuudfO7lmkpkbkMg==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.3.tgz", + "integrity": "sha512-mZ7jmIIg4bUnxCqY3yTOkoHvvzsDyrZgfnIKiTGm5QACrsIGa5eT3pMFpMm2OpxGXRDrTMsYdPXE2rCyDX52VQ==", "license": "MIT", "dependencies": { - "@react-native/codegen": "0.76.2" + "@react-native/codegen": "0.76.3" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.2.tgz", - "integrity": "sha512-/kbxZqy70mGONv23uZg7lm7ZCE4dO5dgMzVPz6QsveXIRHQBRLsSC+9w2iZEnYWpLayoWFmTbq8ZG+4W32D3bA==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.3.tgz", + "integrity": "sha512-zi2nPlQf9q2fmfPyzwWEj6DU96v8ziWtEfG7CTAX2PG/Vjfsr94vn/wWrCdhBVvLRQ6Kvd/MFAuDYpxmQwIiVQ==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -4187,7 +4188,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.76.2", + "@react-native/babel-plugin-codegen": "0.76.3", "babel-plugin-syntax-hermes-parser": "^0.25.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" @@ -4200,9 +4201,9 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.2.tgz", - "integrity": "sha512-rIgdI5mHHnNTzAeDYH+ivKMIcv6vr04Ol+TmX77n1HjJkzMhQqSHWcX+Pq9oiu7l2zKkymadrw6OPD8VPgre8g==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.3.tgz", + "integrity": "sha512-oJCH/jbYeGmFJql8/y76gqWCCd74pyug41yzYAjREso1Z7xL88JhDyKMvxEnfhSdMOZYVl479N80xFiXPy3ZYA==", "license": "MIT", "dependencies": { "@babel/parser": "^7.25.3", @@ -4222,13 +4223,13 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.2.tgz", - "integrity": "sha512-ZRL8oTGSMwXqTsVkRL9AVW8C/AZRnxCcFfhestsx//SrQt3J/hbtDOHTIGkkt5AEA0zEvb/UAAyIAN/wuN4llw==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.3.tgz", + "integrity": "sha512-vgsLixHS24jR0d0QqPykBWFaC+V8x9cM3cs4oYXw3W199jgBNGP9MWcUJLazD2vzrT/lUTVBVg0rBeB+4XR6fg==", "license": "MIT", "dependencies": { - "@react-native/dev-middleware": "0.76.2", - "@react-native/metro-babel-transformer": "0.76.2", + "@react-native/dev-middleware": "0.76.3", + "@react-native/metro-babel-transformer": "0.76.3", "chalk": "^4.0.0", "execa": "^5.1.1", "invariant": "^2.2.4", @@ -4301,9 +4302,9 @@ "license": "MIT" }, "node_modules/@react-native/community-cli-plugin/node_modules/cross-spawn": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", - "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -4476,22 +4477,22 @@ } }, "node_modules/@react-native/debugger-frontend": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.2.tgz", - "integrity": "sha512-FIcz24Oya2wIO7rZD3dxVyK8t5ZD6Fojl9o7lrjnTWqMedcevRTtdSOIAf4ypksYH/x7HypovE2Zp8U65Xv0Mw==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.3.tgz", + "integrity": "sha512-pMHQ3NpPB28RxXciSvm2yD+uDx3pkhzfuWkc7VFgOduyzPSIr0zotUiOJzsAtrj8++bPbOsAraCeQhCqoOTWQw==", "license": "BSD-3-Clause", "engines": { "node": ">=18" } }, "node_modules/@react-native/dev-middleware": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.2.tgz", - "integrity": "sha512-qiowXpxofLk0lpIZps7fyyp9NiKlqBwh0R0yVub5l4EJcqjLonjsznYAHbusnPW9kb9MQSdovGPNv5b8RadJww==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.3.tgz", + "integrity": "sha512-b+2IpW40z1/S5Jo5JKrWPmucYU/PzeGyGBZZ/SJvmRnBDaP3txb9yIqNZAII1EWsKNhedh8vyRO5PSuJ9Juqzw==", "license": "MIT", "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.76.2", + "@react-native/debugger-frontend": "0.76.3", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", @@ -4531,31 +4532,31 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.2.tgz", - "integrity": "sha512-KC5/uAeLoeD1dOjymx6gnNFHGGLB22xNYjrjrJNK5r0bw2O2KXp4rpB5VCT/2H5B48cVC0xPB7RIKOFrDHr5bQ==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.3.tgz", + "integrity": "sha512-t0aYZ8ND7+yc+yIm6Yp52bInneYpki6RSIFZ9/LMUzgMKvEB62ptt/7sfho9QkKHCNxE1DJSWIqLIGi/iHHkyg==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.2.tgz", - "integrity": "sha512-OXunyNn33fa7gQ6iU5rQcYZQsO7OkJIAr/TgVdoHxpOB4i+ZGsfv6df3JKriBVT1ZZm6ZTlKyIa4QpLq3p0dmw==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.3.tgz", + "integrity": "sha512-pubJFArMMrdZiytH+W95KngcSQs+LsxOBsVHkwgMnpBfRUxXPMK4fudtBwWvhnwN76Oe+WhxSq7vOS5XgoPhmw==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.2.tgz", - "integrity": "sha512-OIYhmWfN+HDyQLzoEg+2P0h7OopYk4djggg0M+k5e1a+g2dFNJILO/BsDobM8uLA8hAzClAJyJLZbPo5jeqdMA==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.3.tgz", + "integrity": "sha512-b2zQPXmW7avw/7zewc9nzMULPIAjsTwN03hskhxHUJH5pzUf7pIklB3FrgYPZrRhJgzHiNl3tOPu7vqiKzBYPg==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.76.2", + "@react-native/babel-preset": "0.76.3", "hermes-parser": "0.23.1", "nullthrows": "^1.1.1" }, @@ -4573,9 +4574,9 @@ "license": "MIT" }, "node_modules/@react-native/virtualized-lists": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.2.tgz", - "integrity": "sha512-FzXvkHgKvJGf0pSuLy6878cxJ6mxWKgZsH9s2kO4LWJocI8Bi3ViDx7IGAWYuvN+Fnue5TKaqGPhfD+4XrKtYQ==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.3.tgz", + "integrity": "sha512-wTGv9pVh3vAOWb29xFm+J9VRe9dUcUcb9FyaMLT/Hxa88W4wqa5ZMe1V9UvrrBiA1G5DKjv8/1ZcDsJhyugVKA==", "license": "MIT", "dependencies": { "invariant": "^2.2.4", @@ -5277,9 +5278,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-12.0.1.tgz", - "integrity": "sha512-9T2o+aeKnHOtQhk/undQbibJv02bdCgfs68ZwgAdueljDBcs2oVfq41qG9XThYwa6Dn7CdfnoEUsIyFqBwjcVw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-12.0.2.tgz", + "integrity": "sha512-WLApoPw4sOnwwJY+tzp270ndUNfq6xXcZEQUjEQJr8YyDd6uacz7/4iyt2Wl4wEQTabm9DYIZ3GVuNkZzL0M1g==", "license": "MIT", "dependencies": { "@babel/plugin-proposal-decorators": "^7.12.9", @@ -5288,7 +5289,7 @@ "@babel/plugin-transform-parameters": "^7.22.15", "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.0", - "@react-native/babel-preset": "0.76.2", + "@react-native/babel-preset": "0.76.3", "babel-plugin-react-native-web": "~0.19.13", "react-refresh": "^0.14.2" }, @@ -5514,9 +5515,10 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5789,9 +5791,10 @@ } }, "node_modules/cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", "engines": { "node": ">=6" }, @@ -5823,6 +5826,15 @@ "node": ">=8" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -5864,7 +5876,8 @@ "node_modules/command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "license": "MIT" }, "node_modules/commander": { "version": "7.2.0", @@ -5892,6 +5905,7 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -5900,16 +5914,17 @@ } }, "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", + "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", + "license": "MIT", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", + "negotiator": "~0.6.4", "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "engines": { @@ -5920,6 +5935,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -5927,7 +5943,37 @@ "node_modules/compression/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", @@ -6009,9 +6055,9 @@ } }, "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "license": "MIT", "dependencies": { "nice-try": "^1.0.4", @@ -6082,12 +6128,6 @@ } } }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -6122,6 +6162,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -6129,14 +6170,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -6405,26 +6438,26 @@ } }, "node_modules/expo": { - "version": "52.0.7", - "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.7.tgz", - "integrity": "sha512-AXN+FmYF8jR+IUJCuETO9iuMZ2DdGpL175kvHveBM/cS4MQsF7oe1MTnCRLyXQ92BDUZlqjWqWTX1sY3ysPoZw==", + "version": "52.0.11", + "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.11.tgz", + "integrity": "sha512-flUffjURDVufsMpoHrgsp+QDvR6xG/hjeMbzeSyFUcPP64uh3Av1/EJ4uUXhmHYV6/8YbHMwEgUbmko85vBtKQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "0.21.5", - "@expo/config": "~10.0.4", - "@expo/config-plugins": "9.0.9", + "@expo/cli": "0.21.8", + "@expo/config": "~10.0.5", + "@expo/config-plugins": "~9.0.10", "@expo/fingerprint": "0.11.2", "@expo/metro-config": "0.19.4", "@expo/vector-icons": "^14.0.0", - "babel-preset-expo": "~12.0.1", + "babel-preset-expo": "~12.0.2", "expo-asset": "~11.0.1", "expo-constants": "~17.0.3", - "expo-file-system": "~18.0.3", + "expo-file-system": "~18.0.4", "expo-font": "~13.0.1", "expo-keep-awake": "~14.0.1", "expo-modules-autolinking": "2.0.2", - "expo-modules-core": "2.0.3", + "expo-modules-core": "2.0.6", "fbemitter": "^3.0.0", "web-streams-polyfill": "^3.3.2", "whatwg-url-without-unicode": "8.0.0-3" @@ -6524,9 +6557,9 @@ } }, "node_modules/expo-file-system": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.0.3.tgz", - "integrity": "sha512-HKe0dGW3FWYFi1F3THVnTRueTG7j0onmEpUJKRB4UbjeHD2723cn/EutcG216wvrJeebe8w3+00F8Z4xk+9Jrw==", + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.0.4.tgz", + "integrity": "sha512-aAWEDwnu0XHOBYvQ9Q0+QIa+483vYJaC4IDsXyWQ73Rtsg273NZh5kYowY+cAocvoSmA99G6htrLBn11ax2bTQ==", "license": "MIT", "dependencies": { "web-streams-polyfill": "^3.3.2" @@ -6676,21 +6709,21 @@ } }, "node_modules/expo-modules-core": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.0.3.tgz", - "integrity": "sha512-S/Ozg6NhLkMc7k+qSLzOtjCexuimkYXHM/PCZtbn53nkuNYyaLpfVfrsJsRWxLIMe8ftbm6cDrKlN5mJ6lNODg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.0.6.tgz", + "integrity": "sha512-IsFDn8TqhmnxNUWxkhyVqJ07x/vLlaUN1f2R4eYaP9NFoSWb0c2bTf99a03NGxnfuQ9G7Jrzu+VafSHzCKUxxQ==", "license": "MIT", "dependencies": { "invariant": "^2.2.4" } }, "node_modules/expo-splash-screen": { - "version": "0.29.11", - "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.29.11.tgz", - "integrity": "sha512-lDURVc7y+INe78cC2c0GFErmHxtiXLGmUCMJEdZqZraGDq8HUcYiZgLkr2vlKNEKZ/ZuUlExJIqwgo7I/mCSYA==", + "version": "0.29.13", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.29.13.tgz", + "integrity": "sha512-OTaW6v2ErKTlguFDNi4PN+qrEFRA4TIEyFag4204CiFIpAB+13PqQiW4Ovt29aYlLERIjWD++PyoHeSdLSiZwg==", "license": "MIT", "dependencies": { - "@expo/prebuild-config": "^8.0.16" + "@expo/prebuild-config": "^8.0.17" }, "peerDependencies": { "expo": "*" @@ -7024,6 +7057,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -8154,6 +8188,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -8170,6 +8205,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", "engines": { "node": ">=6" } @@ -9038,6 +9074,18 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -9208,9 +9256,10 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/mz": { "version": "2.7.0", @@ -9410,6 +9459,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -9585,9 +9635,9 @@ } }, "node_modules/password-prompt/node_modules/cross-spawn": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", - "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -10016,6 +10066,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -10187,19 +10238,19 @@ "license": "MIT" }, "node_modules/react-native": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.2.tgz", - "integrity": "sha512-mkEBKGOmJxhfq8IOsvmk0QuTzlBt9vS+uo0gwbqfUmEDqoC359v80zhUf94WimYBrBkpRQWFbEu5iqMDHrYzlQ==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.3.tgz", + "integrity": "sha512-0TUhgmlouRNf6yuDIIAdbQl0g1VsONgCMsLs7Et64hjj5VLMCA7np+4dMrZvGZ3wRNqzgeyT9oWJsUm49AcwSQ==", "license": "MIT", "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native/assets-registry": "0.76.2", - "@react-native/codegen": "0.76.2", - "@react-native/community-cli-plugin": "0.76.2", - "@react-native/gradle-plugin": "0.76.2", - "@react-native/js-polyfills": "0.76.2", - "@react-native/normalize-colors": "0.76.2", - "@react-native/virtualized-lists": "0.76.2", + "@react-native/assets-registry": "0.76.3", + "@react-native/codegen": "0.76.3", + "@react-native/community-cli-plugin": "0.76.3", + "@react-native/gradle-plugin": "0.76.3", + "@react-native/js-polyfills": "0.76.3", + "@react-native/normalize-colors": "0.76.3", + "@react-native/virtualized-lists": "0.76.3", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -10297,9 +10348,9 @@ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, "node_modules/react-native/node_modules/@react-native/normalize-colors": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.2.tgz", - "integrity": "sha512-ICoOpaTLPsFQjNLSM00NgQr6wal300cZZonHVSDXKntX+BfkLeuCHRtr/Mn+klTtW+/1v2/2FRm9dXjvyGf9Dw==", + "version": "0.76.3", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.3.tgz", + "integrity": "sha512-Yrpmrh4IDEupUUM/dqVxhAN8QW1VEUR3Qrk2lzJC1jB2s46hDe0hrMP2vs12YJqlzshteOthjwXQlY0TgIzgbg==", "license": "MIT" }, "node_modules/react-native/node_modules/ansi-styles": { @@ -10684,7 +10735,8 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" }, "node_modules/sax": { "version": "1.3.0", @@ -10767,24 +10819,6 @@ "node": ">= 0.8" } }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/send/node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -10842,24 +10876,6 @@ "node": ">= 0.8" } }, - "node_modules/serve-static/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/serve-static/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/serve-static/node_modules/send": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", @@ -10982,7 +10998,8 @@ "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", @@ -11205,6 +11222,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -11229,6 +11247,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "license": "MIT", "engines": { "node": ">=6" } @@ -11848,6 +11867,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", "engines": { "node": ">= 4.0.0" } @@ -11934,6 +11954,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -11957,6 +11978,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } diff --git a/example/package.json b/example/package.json index 84e09f5..22e7274 100644 --- a/example/package.json +++ b/example/package.json @@ -13,16 +13,16 @@ "@expo/metro-runtime": "~4.0.0", "@types/dom-speech-recognition": "^0.0.4", "babel-plugin-module-resolver": "^5.0.2", - "expo": "~52.0.7", + "expo": "~52.0.11", "expo-asset": "~11.0.1", "expo-av": "~15.0.1", "expo-build-properties": "~0.13.1", "expo-file-system": "~18.0.3", - "expo-splash-screen": "~0.29.11", + "expo-splash-screen": "~0.29.13", "expo-status-bar": "~2.0.0", "react": "18.3.1", "react-dom": "18.3.1", - "react-native": "0.76.2", + "react-native": "0.76.3", "react-native-reanimated": "~3.16.1", "react-native-web": "~0.19.13" }, diff --git a/ios/ExpoSpeechRecognitionModule.swift b/ios/ExpoSpeechRecognitionModule.swift index 7d9d110..8506de5 100644 --- a/ios/ExpoSpeechRecognitionModule.swift +++ b/ios/ExpoSpeechRecognitionModule.swift @@ -92,8 +92,6 @@ public class ExpoSpeechRecognitionModule: Module { // Fired when the speech recognition service has begun listening to incoming audio with // intent to recognize grammars associated with the current SpeechRecognition "start", - // Called when there's results (as a string array, not API compliant) - "result", // Called when the language detection (and switching) results are available. "languagedetection", // Fired when the input volume changes diff --git a/ios/ExpoSpeechRecognizer.swift b/ios/ExpoSpeechRecognizer.swift index 1fefebc..4bbd97f 100644 --- a/ios/ExpoSpeechRecognizer.swift +++ b/ios/ExpoSpeechRecognizer.swift @@ -199,6 +199,8 @@ actor ExpoSpeechRecognizer: ObservableObject { // Reset the speech recognizer before starting reset(andEmitEnd: false) + self.options = options + self.request = nil self.outputFileUrl = nil self.speechStartHandler = speechStartHandler @@ -214,118 +216,166 @@ actor ExpoSpeechRecognizer: ObservableObject { recognizer: recognizer ) self.request = request - - // Check if options.audioSource is set, if it is, then it is sourced from a file let isSourcedFromFile = options.audioSource?.uri != nil - if isSourcedFromFile { - // If we're doing file-based recognition we don't need to create an audio engine - self.audioEngine = nil + // Check if options.audioSource is set, if it is, then it is sourced from a file + if let audioSource = options.audioSource?.uri { + try prepareFileRecognition(request: request, url: URL(string: audioSource)!) } else { - // Set up the audio session to get the correct audio format - try Self.setupAudioSession(options.iosCategory) - - self.audioEngine = AVAudioEngine() + try prepareMicrophoneRecognition(request: request, options: options) + } - guard let audioEngine = self.audioEngine else { - print("expo-speech-recognition: ERROR - Failed to create AVAudioEngine") - throw RecognizerError.invalidAudioSource - } + startRecognitionTask( + with: request, + recognizer: recognizer, + resultHandler: resultHandler, + errorHandler: errorHandler, + continuous: options.continuous, + canEmitInterimResults: options.interimResults, + isSourcedFromFile: isSourcedFromFile + ) - let inputNode = audioEngine.inputNode - // Note: accessing `inputNode.outputFormat(forBus: 0)` may crash the thread with the error: - // `required condition is false: format.sampleRate == hwFormat.sampleRate` - // (under the hood it calls `AVAudioEngineImpl::UpdateInputNode` -> `AVAudioNode setOutputFormat:forBus:0`) - let audioFormat = Self.getAudioFormat(forEngine: audioEngine) + // Emit the "start" event to indicate that speech recognition has started + startHandler() - // Check if the microphone is busy - guard !Self.audioInputIsBusy(audioFormat) else { - print( - "expo-speech-recognition: ERROR - input is busy \(audioFormat)" - ) - throw RecognizerError.audioInputBusy - } + // If user has opted in to recording, emit an "audiostart" event with the path + audioStartHandler(outputFileUrl?.path) + } catch { + errorHandler(error) + reset(andEmitEnd: true) + } + } - let mixerNode = AVAudioMixerNode() - audioEngine.attach(mixerNode) - audioEngine.connect(inputNode, to: mixerNode, format: audioFormat) - - // Feature: file recording - if options.recordingOptions?.persist == true { - guard - let fileAudioFormat = Self.getFileAudioFormat( - options: options, - engine: audioEngine - ) - else { - print( - "expo-speech-recognition: ERROR - Failed to create AVAudioFormat from given sample rate" - ) - throw RecognizerError.invalidAudioSource - } - - let outputUrl = prepareFileWriter( - outputDirectory: options.recordingOptions?.outputDirectory, - outputFileName: options.recordingOptions?.outputFileName, - audioFormat: fileAudioFormat - ) - self.outputFileUrl = outputUrl - } + private func startRecognitionTask( + with request: SFSpeechRecognitionRequest, + recognizer: SFSpeechRecognizer, + resultHandler: @escaping (SFSpeechRecognitionResult) -> Void, + errorHandler: @escaping (Error) -> Void, + continuous: Bool, + canEmitInterimResults: Bool, + isSourcedFromFile: Bool + ) { + let audioEngine = self.audioEngine + let shouldRunTimers = !continuous && !isSourcedFromFile - // Set up audio recording & sink to recognizer/file - try Self.prepareEngine( + self.task = recognizer.recognitionTask( + with: request, + resultHandler: { [weak self] result, error in + self?.recognitionHandler( audioEngine: audioEngine, - mixerNode: mixerNode, - options: options, - request: request, - audioFileRef: self.audioFileRef, - volumeChangeHandler: { volume in - Task { @MainActor in - self.volumeChangeHandler?(volume) - } - } + result: result, + error: error, + resultHandler: resultHandler, + errorHandler: errorHandler, + continuous: continuous, + shouldRunTimers: shouldRunTimers, + canEmitInterimResults: canEmitInterimResults, + isSourcedFromFile: isSourcedFromFile ) } + ) + } - // Run timers on non-continuous mode, as long as the audio source is the mic - let shouldRunTimers = !options.continuous && !isSourcedFromFile - let audioEngine = self.audioEngine + private func prepareFileRecognition(request: SFSpeechRecognitionRequest, url: URL) throws { + self.audioEngine = nil - self.task = recognizer.recognitionTask( - with: request, - resultHandler: { [weak self] result, error in - // Speech start event - if result != nil && error == nil { - Task { [weak self] in - await self?.handleSpeechStart() - } - } - - // Handle the result - self?.recognitionHandler( - audioEngine: audioEngine, - result: result, - error: error, - resultHandler: resultHandler, - errorHandler: errorHandler, - continuous: options.continuous, - shouldRunTimers: shouldRunTimers, - canEmitInterimResults: options.interimResults + guard let request = self.request as? SFSpeechAudioBufferRecognitionRequest else { + throw RecognizerError.invalidAudioSource + } + + let chunkDelayMillis: Int + if let options = self.options, let specifiedDelay = options.audioSource?.chunkDelayMillis { + chunkDelayMillis = specifiedDelay + } else if self.options?.requiresOnDeviceRecognition == true { + chunkDelayMillis = 15 // On-device recognition + } else { + chunkDelayMillis = 50 // Network-based recognition + } + let chunkDelayNs = UInt64(chunkDelayMillis) * 1_000_000 + // var playbackBuffers = [AVAudioPCMBuffer]() + + Task.detached(priority: .userInitiated) { + do { + let file = try AVAudioFile(forReading: url) + let bufferCapacity: AVAudioFrameCount = 4096 + let inputBuffer = AVAudioPCMBuffer( + pcmFormat: file.processingFormat, frameCapacity: bufferCapacity + )! + + while file.framePosition < file.length { + let framesToRead = min( + bufferCapacity, AVAudioFrameCount(file.length - file.framePosition) ) - }) + try file.read(into: inputBuffer, frameCount: framesToRead) + request.append(inputBuffer) + // playbackBuffers.append(inputBuffer.copy() as! AVAudioPCMBuffer) + try await Task.sleep(nanoseconds: chunkDelayNs) + } - if shouldRunTimers { - invalidateAndScheduleTimer() + print("[expo-speech-recognition]: Audio streaming ended") + request.endAudio() + // await self.playBack(playbackBuffers: playbackBuffers) + } catch { + print("[expo-speech-recognition]: Error feeding audio file: \(error)") + request.endAudio() } + } + } - // Emit the "start" event to indicate that speech recognition has started - startHandler() + private func prepareMicrophoneRecognition( + request: SFSpeechRecognitionRequest, + options: SpeechRecognitionOptions + ) throws { + try Self.setupAudioSession(options.iosCategory) + self.audioEngine = AVAudioEngine() - // If user has opted in to recording, emit an "audiostart" event with the path - audioStartHandler(outputFileUrl?.path) - } catch { - errorHandler(error) - reset(andEmitEnd: true) + guard let audioEngine = self.audioEngine else { + print("expo-speech-recognition: ERROR - Failed to create AVAudioEngine") + throw RecognizerError.invalidAudioSource + } + + let inputNode = audioEngine.inputNode + let audioFormat = Self.getAudioFormat(forEngine: audioEngine) + + guard !Self.audioInputIsBusy(audioFormat) else { + print("expo-speech-recognition: ERROR - input is busy \(audioFormat)") + throw RecognizerError.audioInputBusy + } + + let mixerNode = AVAudioMixerNode() + audioEngine.attach(mixerNode) + audioEngine.connect(inputNode, to: mixerNode, format: audioFormat) + + if options.recordingOptions?.persist == true { + guard let fileAudioFormat = Self.getFileAudioFormat(options: options, engine: audioEngine) + else { + print( + "expo-speech-recognition: ERROR - Failed to create AVAudioFormat from given sample rate") + throw RecognizerError.invalidAudioSource + } + + self.outputFileUrl = prepareFileWriter( + outputDirectory: options.recordingOptions?.outputDirectory, + outputFileName: options.recordingOptions?.outputFileName, + audioFormat: fileAudioFormat + ) + } + + try Self.prepareEngine( + audioEngine: audioEngine, + mixerNode: mixerNode, + options: options, + request: request, + audioFileRef: self.audioFileRef, + volumeChangeHandler: { volume in + Task { @MainActor in + self.volumeChangeHandler?(volume) + } + } + ) + + if !options.continuous { + invalidateAndScheduleTimer() } } @@ -447,15 +497,10 @@ actor ExpoSpeechRecognizer: ObservableObject { } private static func prepareRequest( - options: SpeechRecognitionOptions, recognizer: SFSpeechRecognizer + options: SpeechRecognitionOptions, + recognizer: SFSpeechRecognizer ) -> SFSpeechRecognitionRequest { - - let request: SFSpeechRecognitionRequest - if let audioSource = options.audioSource { - request = SFSpeechURLRecognitionRequest(url: URL(string: audioSource.uri)!) - } else { - request = SFSpeechAudioBufferRecognitionRequest() - } + let request = SFSpeechAudioBufferRecognitionRequest() // We also force-enable partial results on non-continuous mode, // which will allow us to re-schedule timers when text is detected @@ -694,7 +739,8 @@ actor ExpoSpeechRecognizer: ObservableObject { errorHandler: @escaping (Error) -> Void, continuous: Bool, shouldRunTimers: Bool, - canEmitInterimResults: Bool + canEmitInterimResults: Bool, + isSourcedFromFile: Bool ) { // When a final result is returned, we should expect the task to be idle or stopping let receivedFinalResult = result?.isFinal ?? false @@ -730,7 +776,9 @@ actor ExpoSpeechRecognizer: ObservableObject { } } - if (receivedFinalLikeResult && !continuous) || receivedError || receivedFinalResult { + if receivedError || (receivedFinalLikeResult && !continuous && !isSourcedFromFile) + || receivedFinalResult + { Task { @MainActor in await reset() } @@ -773,6 +821,36 @@ actor ExpoSpeechRecognizer: ObservableObject { } } } + + /* + private var playbackEngine: AVAudioEngine? + private var playerNode: AVAudioPlayerNode? + /// Playback audio from an array of AVAudioPCMBuffers + /// For testing purposes only + func playBack(playbackBuffers: [AVAudioPCMBuffer]) { + guard !playbackBuffers.isEmpty else { return } + + playbackEngine = AVAudioEngine() + playerNode = AVAudioPlayerNode() + + guard let playbackEngine = playbackEngine, let playerNode = playerNode else { return } + + playbackEngine.attach(playerNode) + let outputFormat = playbackBuffers[0].format + playbackEngine.connect(playerNode, to: playbackEngine.mainMixerNode, format: outputFormat) + + for buffer in playbackBuffers { + playerNode.scheduleBuffer(buffer, completionHandler: nil) + } + + do { + try playbackEngine.start() + playerNode.play() + } catch { + print("Failed to start playback engine: \(error)") + } + } + */ } extension SFSpeechRecognizer { diff --git a/package-lock.json b/package-lock.json index f10aecc..c3a3742 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "expo-speech-recognition", - "version": "0.2.25", + "version": "1.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "expo-speech-recognition", - "version": "0.2.25", + "version": "1.0.1", "license": "MIT", "devDependencies": { "@changesets/cli": "^2.27.9", @@ -2329,15 +2329,15 @@ "peer": true }, "node_modules/@changesets/apply-release-plan": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.5.tgz", - "integrity": "sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.6.tgz", + "integrity": "sha512-TKhVLtiwtQOgMAC0fCJfmv93faiViKSDqr8oMEqrnNs99gtSC1sZh/aEMS9a+dseU1ESZRCK+ofLgGY7o0fw/Q==", "dev": true, "license": "MIT", "dependencies": { - "@changesets/config": "^3.0.3", + "@changesets/config": "^3.0.4", "@changesets/get-version-range-type": "^0.4.0", - "@changesets/git": "^3.0.1", + "@changesets/git": "^3.0.2", "@changesets/should-skip-package": "^0.1.1", "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", @@ -2382,9 +2382,9 @@ } }, "node_modules/@changesets/assemble-release-plan": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.4.tgz", - "integrity": "sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.5.tgz", + "integrity": "sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2407,23 +2407,23 @@ } }, "node_modules/@changesets/cli": { - "version": "2.27.9", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.9.tgz", - "integrity": "sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==", + "version": "2.27.10", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.10.tgz", + "integrity": "sha512-PfeXjvs9OfQJV8QSFFHjwHX3QnUL9elPEQ47SgkiwzLgtKGyuikWjrdM+lO9MXzOE22FO9jEGkcs4b+B6D6X0Q==", "dev": true, "license": "MIT", "dependencies": { - "@changesets/apply-release-plan": "^7.0.5", - "@changesets/assemble-release-plan": "^6.0.4", + "@changesets/apply-release-plan": "^7.0.6", + "@changesets/assemble-release-plan": "^6.0.5", "@changesets/changelog-git": "^0.2.0", - "@changesets/config": "^3.0.3", + "@changesets/config": "^3.0.4", "@changesets/errors": "^0.2.0", "@changesets/get-dependents-graph": "^2.1.2", - "@changesets/get-release-plan": "^4.0.4", - "@changesets/git": "^3.0.1", + "@changesets/get-release-plan": "^4.0.5", + "@changesets/git": "^3.0.2", "@changesets/logger": "^0.1.1", "@changesets/pre": "^2.0.1", - "@changesets/read": "^0.6.1", + "@changesets/read": "^0.6.2", "@changesets/should-skip-package": "^0.1.1", "@changesets/types": "^6.0.0", "@changesets/write": "^0.3.2", @@ -2439,7 +2439,7 @@ "picocolors": "^1.1.0", "resolve-from": "^5.0.0", "semver": "^7.5.3", - "spawndamnit": "^2.0.0", + "spawndamnit": "^3.0.1", "term-size": "^2.1.0" }, "bin": { @@ -2478,9 +2478,9 @@ } }, "node_modules/@changesets/config": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.0.3.tgz", - "integrity": "sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.0.4.tgz", + "integrity": "sha512-+DiIwtEBpvvv1z30f8bbOsUQGuccnZl9KRKMM/LxUHuDu5oEjmN+bJQ1RIBKNJjfYMQn8RZzoPiX0UgPaLQyXw==", "dev": true, "license": "MIT", "dependencies": { @@ -2490,7 +2490,7 @@ "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", "fs-extra": "^7.0.1", - "micromatch": "^4.0.2" + "micromatch": "^4.0.8" } }, "node_modules/@changesets/config/node_modules/fs-extra": { @@ -2532,16 +2532,16 @@ } }, "node_modules/@changesets/get-release-plan": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.4.tgz", - "integrity": "sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.5.tgz", + "integrity": "sha512-E6wW7JoSMcctdVakut0UB76FrrN3KIeJSXvB+DHMFo99CnC3ZVnNYDCVNClMlqAhYGmLmAj77QfApaI3ca4Fkw==", "dev": true, "license": "MIT", "dependencies": { - "@changesets/assemble-release-plan": "^6.0.4", - "@changesets/config": "^3.0.3", + "@changesets/assemble-release-plan": "^6.0.5", + "@changesets/config": "^3.0.4", "@changesets/pre": "^2.0.1", - "@changesets/read": "^0.6.1", + "@changesets/read": "^0.6.2", "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3" } @@ -2554,17 +2554,17 @@ "license": "MIT" }, "node_modules/@changesets/git": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.1.tgz", - "integrity": "sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.2.tgz", + "integrity": "sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==", "dev": true, "license": "MIT", "dependencies": { "@changesets/errors": "^0.2.0", "@manypkg/get-packages": "^1.1.3", "is-subdir": "^1.1.1", - "micromatch": "^4.0.2", - "spawndamnit": "^2.0.0" + "micromatch": "^4.0.8", + "spawndamnit": "^3.0.1" } }, "node_modules/@changesets/logger": { @@ -2617,13 +2617,13 @@ } }, "node_modules/@changesets/read": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.1.tgz", - "integrity": "sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.2.tgz", + "integrity": "sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==", "dev": true, "license": "MIT", "dependencies": { - "@changesets/git": "^3.0.1", + "@changesets/git": "^3.0.2", "@changesets/logger": "^0.1.1", "@changesets/parse": "^0.4.0", "@changesets/types": "^6.0.0", @@ -8438,9 +8438,10 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -9883,9 +9884,9 @@ } }, "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, "license": "MIT", "dependencies": { @@ -15619,13 +15620,6 @@ "dev": true, "license": "MIT" }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true, - "license": "ISC" - }, "node_modules/psl": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.10.0.tgz", @@ -16467,9 +16461,10 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -16493,6 +16488,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -16500,12 +16496,14 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/send/node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -16517,6 +16515,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -16528,6 +16527,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -16553,19 +16553,29 @@ } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/server-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", @@ -16807,82 +16817,29 @@ } }, "node_modules/spawndamnit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz", - "integrity": "sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/spawndamnit/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", + "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", "dev": true, - "license": "MIT", + "license": "SEE LICENSE IN LICENSE", "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "cross-spawn": "^7.0.5", + "signal-exit": "^4.0.1" } }, - "node_modules/spawndamnit/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "node_modules/spawndamnit/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/spawndamnit/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spawndamnit/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spawndamnit/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" + "node": ">=14" }, - "bin": { - "which": "bin/which" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/spawndamnit/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true, - "license": "ISC" - }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",