diff --git a/.kilocode/rules/kilo-rule.md b/.kilocode/rules/kilo-rule.md index 4866c6b..b62e813 100644 --- a/.kilocode/rules/kilo-rule.md +++ b/.kilocode/rules/kilo-rule.md @@ -5,3 +5,5 @@ - 遇到比较复杂的页面,尽量使用可以复用的组件 - 不要尝试使用 `npm run ios` 命令 + + diff --git a/app/(tabs)/personal.tsx b/app/(tabs)/personal.tsx index 291e7e9..9ec8464 100644 --- a/app/(tabs)/personal.tsx +++ b/app/(tabs)/personal.tsx @@ -11,7 +11,7 @@ import { log } from '@/utils/logger'; import { getNotificationEnabled, setNotificationEnabled as saveNotificationEnabled } from '@/utils/userPreferences'; import { Ionicons } from '@expo/vector-icons'; import { useFocusEffect } from '@react-navigation/native'; -import { isLiquidGlassAvailable } from 'expo-glass-effect'; +import { GlassView, isLiquidGlassAvailable } from 'expo-glass-effect'; import { Image } from 'expo-image'; import { LinearGradient } from 'expo-linear-gradient'; import React, { useEffect, useMemo, useRef, useState } from 'react'; @@ -216,9 +216,17 @@ export default function PersonalScreen() { 会员编号: {userProfile.memberNumber} )} - pushIfAuthedElseLogin('/profile/edit')}> - {isLoggedIn ? '编辑' : '登录'} - + {isLgAvaliable ? ( + pushIfAuthedElseLogin('/profile/edit')}> + + {isLoggedIn ? '编辑' : '登录'} + + + ) : ( + pushIfAuthedElseLogin('/profile/edit')}> + {isLoggedIn ? '编辑' : '登录'} + + )} @@ -494,8 +502,16 @@ const styles = StyleSheet.create({ paddingVertical: 8, borderRadius: 16, }, + editButtonGlass: { + backgroundColor: '#ffffff', + paddingHorizontal: 16, + paddingVertical: 8, + borderRadius: 16, + justifyContent: 'center', + alignItems: 'center', + }, editButtonText: { - color: '#FFFFFF', + color: 'rgba(147, 112, 219, 1)', fontSize: 14, fontWeight: '600', }, diff --git a/app/_layout.tsx b/app/_layout.tsx index 4039b59..4bde564 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -13,6 +13,7 @@ import { notificationService } from '@/services/notifications'; import { setupQuickActions } from '@/services/quickActions'; import { initializeWaterRecordBridge } from '@/services/waterRecordBridge'; import { WaterRecordSource } from '@/services/waterRecords'; +import { workoutMonitorService } from '@/services/workoutMonitor'; import { store } from '@/store'; import { fetchMyProfile, setPrivacyAgreed } from '@/store/userSlice'; import { createWaterRecordAction } from '@/store/waterSlice'; @@ -102,6 +103,18 @@ function Bootstrapper({ children }: { children: React.ReactNode }) { initializeWaterRecordBridge(); console.log('喝水记录 Bridge 初始化成功'); + // 初始化锻炼监听服务 + const initializeWorkoutMonitoring = async () => { + try { + await workoutMonitorService.initialize(); + console.log('锻炼监听服务初始化成功'); + } catch (error) { + console.warn('锻炼监听服务初始化失败:', error); + } + }; + + initializeWorkoutMonitoring(); + // 检查并同步Widget数据更改 const widgetSync = await syncPendingWidgetChanges(); if (widgetSync.hasPendingChanges && widgetSync.pendingRecords) { @@ -204,6 +217,7 @@ export default function RootLayout() { + diff --git a/app/workout/notification-settings.tsx b/app/workout/notification-settings.tsx new file mode 100644 index 0000000..8e4ddf1 --- /dev/null +++ b/app/workout/notification-settings.tsx @@ -0,0 +1,339 @@ +import { HeaderBar } from '@/components/ui/HeaderBar'; +import { + getWorkoutNotificationPreferences, + resetWorkoutNotificationPreferences, + saveWorkoutNotificationPreferences, + WorkoutNotificationPreferences +} from '@/utils/workoutPreferences'; +import { useRouter } from 'expo-router'; +import React, { useEffect, useState } from 'react'; +import { + Alert, + ScrollView, + StyleSheet, + Switch, + Text, + TouchableOpacity, + View, +} from 'react-native'; + +const WORKOUT_TYPES = [ + { key: 'running', label: '跑步' }, + { key: 'cycling', label: '骑行' }, + { key: 'swimming', label: '游泳' }, + { key: 'yoga', label: '瑜伽' }, + { key: 'functionalstrengthtraining', label: '功能性力量训练' }, + { key: 'traditionalstrengthtraining', label: '传统力量训练' }, + { key: 'highintensityintervaltraining', label: '高强度间歇训练' }, + { key: 'walking', label: '步行' }, + { key: 'other', label: '其他运动' }, +]; + +export default function WorkoutNotificationSettingsScreen() { + const router = useRouter(); + const [preferences, setPreferences] = useState({ + enabled: true, + startTimeHour: 8, + endTimeHour: 22, + enabledWorkoutTypes: [], + }); + const [loading, setLoading] = useState(true); + + useEffect(() => { + loadPreferences(); + }, []); + + const loadPreferences = async () => { + try { + const prefs = await getWorkoutNotificationPreferences(); + setPreferences(prefs); + } catch (error) { + console.error('加载偏好设置失败:', error); + Alert.alert('错误', '加载设置失败,请重试'); + } finally { + setLoading(false); + } + }; + + const savePreferences = async (newPreferences: Partial) => { + try { + await saveWorkoutNotificationPreferences(newPreferences); + setPreferences(prev => ({ ...prev, ...newPreferences })); + } catch (error) { + console.error('保存偏好设置失败:', error); + Alert.alert('错误', '保存设置失败,请重试'); + } + }; + + const handleEnabledToggle = (enabled: boolean) => { + savePreferences({ enabled }); + }; + + const handleTimeRangeChange = (type: 'start' | 'end', hour: number) => { + if (type === 'start') { + savePreferences({ startTimeHour: hour }); + } else { + savePreferences({ endTimeHour: hour }); + } + }; + + const handleWorkoutTypeToggle = (workoutType: string) => { + const currentTypes = preferences.enabledWorkoutTypes; + let newTypes: string[]; + + if (currentTypes.includes(workoutType)) { + newTypes = currentTypes.filter(type => type !== workoutType); + } else { + newTypes = [...currentTypes, workoutType]; + } + + savePreferences({ enabledWorkoutTypes: newTypes }); + }; + + const handleReset = () => { + Alert.alert( + '重置设置', + '确定要重置所有锻炼通知设置为默认值吗?', + [ + { text: '取消', style: 'cancel' }, + { + text: '重置', + style: 'destructive', + onPress: async () => { + try { + await resetWorkoutNotificationPreferences(); + await loadPreferences(); + Alert.alert('成功', '设置已重置为默认值'); + } catch (error) { + Alert.alert('错误', '重置设置失败'); + } + }, + }, + ] + ); + }; + + const formatHour = (hour: number) => { + return `${hour.toString().padStart(2, '0')}:00`; + }; + + const TimeSelector = ({ + label, + value, + onValueChange + }: { + label: string; + value: number; + onValueChange: (hour: number) => void; + }) => ( + + {label} + + onValueChange(Math.max(0, value - 1))} + disabled={value === 0} + > + - + + {formatHour(value)} + onValueChange(Math.min(23, value + 1))} + disabled={value === 23} + > + + + + + + ); + + if (loading) { + return ( + + router.back()} /> + + 加载中... + + + ); + } + + return ( + + router.back()} /> + + + {/* 主开关 */} + + + 锻炼完成通知 + + + + 当您完成锻炼时,发送个性化的鼓励通知 + + + + {preferences.enabled && ( + <> + {/* 时间范围设置 */} + + 通知时间范围 + + 只在指定时间段内发送通知,避免深夜打扰 + + + handleTimeRangeChange('start', hour)} + /> + + handleTimeRangeChange('end', hour)} + /> + + + {/* 锻炼类型设置 */} + + 锻炼类型 + + 选择要接收通知的锻炼类型,不选择表示接收所有类型 + + + {WORKOUT_TYPES.map((type) => ( + + {type.label} + handleWorkoutTypeToggle(type.key)} + trackColor={{ false: '#E5E5E5', true: '#4CAF50' }} + thumbColor="#FFFFFF" + /> + + ))} + + + )} + + {/* 重置按钮 */} + + + 重置为默认设置 + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#F8F9FA', + }, + loadingContainer: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + content: { + flex: 1, + padding: 16, + }, + section: { + backgroundColor: '#FFFFFF', + borderRadius: 12, + padding: 16, + marginBottom: 16, + }, + sectionTitle: { + fontSize: 18, + fontWeight: '600', + color: '#1A1A1A', + marginBottom: 8, + }, + sectionDescription: { + fontSize: 14, + color: '#666666', + marginBottom: 16, + lineHeight: 20, + }, + settingItem: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + paddingVertical: 12, + }, + settingLabel: { + fontSize: 16, + color: '#1A1A1A', + }, + settingDescription: { + fontSize: 14, + color: '#666666', + marginTop: -8, + marginBottom: 8, + lineHeight: 20, + }, + timeSelector: { + marginBottom: 16, + }, + timeLabel: { + fontSize: 16, + color: '#1A1A1A', + marginBottom: 8, + }, + timeButtons: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + }, + timeButton: { + width: 40, + height: 40, + borderRadius: 20, + backgroundColor: '#4CAF50', + justifyContent: 'center', + alignItems: 'center', + marginHorizontal: 16, + }, + timeButtonDisabled: { + backgroundColor: '#E5E5E5', + }, + timeButtonText: { + fontSize: 18, + fontWeight: '600', + color: '#FFFFFF', + }, + timeValue: { + fontSize: 16, + fontWeight: '600', + color: '#1A1A1A', + minWidth: 60, + textAlign: 'center', + }, + resetButton: { + backgroundColor: '#F44336', + paddingVertical: 12, + paddingHorizontal: 24, + borderRadius: 8, + alignItems: 'center', + }, + resetButtonText: { + color: '#FFFFFF', + fontSize: 16, + fontWeight: '600', + }, +}); \ No newline at end of file diff --git a/components/statistic/.HealthDataCard.tsx.swp b/components/statistic/.HealthDataCard.tsx.swp new file mode 100644 index 0000000..08a718a Binary files /dev/null and b/components/statistic/.HealthDataCard.tsx.swp differ diff --git a/components/weight/WeightHistoryCard.tsx b/components/weight/WeightHistoryCard.tsx index a7ce895..83578c1 100644 --- a/components/weight/WeightHistoryCard.tsx +++ b/components/weight/WeightHistoryCard.tsx @@ -6,6 +6,7 @@ import { useColorScheme } from '@/hooks/useColorScheme'; import { fetchWeightHistory } from '@/store/userSlice'; import { BMI_CATEGORIES } from '@/utils/bmi'; import { Ionicons } from '@expo/vector-icons'; +import { GlassView, isLiquidGlassAvailable } from 'expo-glass-effect'; import { Image } from 'expo-image'; import { LinearGradient } from 'expo-linear-gradient'; import React, { useEffect, useState } from 'react'; @@ -33,7 +34,7 @@ export function WeightHistoryCard() { const weightHistory = useAppSelector((s) => s.user.weightHistory); const [showBMIModal, setShowBMIModal] = useState(false); - + const isLgAvaliable = isLiquidGlassAvailable(); const { pushIfAuthedElseLogin, isLoggedIn } = useAuthGuard(); const colorScheme = useColorScheme(); @@ -133,16 +134,30 @@ export function WeightHistoryCard() { style={styles.iconSquare} /> 体重记录 - { - e.stopPropagation(); - navigateToCoach(); - }} - activeOpacity={0.8} - > - - + {isLgAvaliable ? ( + { + e.stopPropagation(); + navigateToCoach(); + }} + activeOpacity={0.8} + > + + + + + ) : ( + { + e.stopPropagation(); + navigateToCoach(); + }} + activeOpacity={0.8} + > + + + )} {/* 默认显示图表 */} @@ -352,6 +367,14 @@ const styles = StyleSheet.create({ alignItems: 'center', justifyContent: 'center', }, + addButtonGlass: { + width: 28, + height: 28, + borderRadius: 14, + alignItems: 'center', + justifyContent: 'center', + backgroundColor: 'rgba(147, 112, 219, 0.3)', + }, emptyContent: { alignItems: 'center', }, diff --git a/docs/workout-monitoring-feature.md b/docs/workout-monitoring-feature.md new file mode 100644 index 0000000..f038297 --- /dev/null +++ b/docs/workout-monitoring-feature.md @@ -0,0 +1,171 @@ +# 锻炼结束监听和推送通知功能 + +## 功能概述 + +这个功能实现了在 iOS 设备上监听用户锻炼结束事件,并在锻炼完成后自动发送个性化的鼓励推送通知。当用户完成锻炼(如跑步30分钟)时,系统会自动获取锻炼数据并分析,然后发送包含锻炼详情的鼓励消息。 + +## 技术架构 + +### iOS 原生层 +- **HKObserverQuery**: 使用 HealthKit 的观察者查询监听锻炼数据变化 +- **后台执行**: 配置应用在后台执行查询的能力 +- **事件桥接**: 通过 React Native 桥接将原生事件传递到 JS 层 + +### JavaScript 服务层 +- **WorkoutMonitorService**: 锻炼监听服务,处理原生事件 +- **WorkoutNotificationService**: 锻炼通知服务,分析和发送通知 +- **WorkoutPreferences**: 用户偏好设置管理 + +### 通知系统 +- **个性化内容**: 基于锻炼类型、持续时间、消耗卡路里等生成定制消息 +- **智能时机**: 避免深夜打扰,尊重用户偏好设置 +- **用户控制**: 完整的开关和类型筛选功能 + +## 文件结构 + +``` +ios/OutLive/ +├── HealthKitManager.swift # iOS 原生 HealthKit 管理器(已扩展) +├── HealthKitManager.m # Objective-C 桥接文件(已扩展) + +services/ +├── workoutMonitor.ts # 锻炼监听服务 +├── workoutNotificationService.ts # 锻炼通知服务 +└── notifications.ts # 通知服务(已扩展) + +utils/ +├── workoutPreferences.ts # 锻炼通知偏好设置 +└── workoutTestHelper.ts # 测试工具 + +app/workout/ +└── notification-settings.tsx # 通知设置页面 + +app/_layout.tsx # 应用入口(已集成) +``` + +## 功能特性 + +### 1. 实时监听 +- 使用 `HKObserverQuery` 实现真正的实时监听 +- 当 HealthKit 中有新的锻炼数据时立即触发 +- 支持后台执行,即使应用在后台也能监听 + +### 2. 智能分析 +- 复用现有的锻炼数据分析功能 +- 支持心率区间分析、METs 计算、强度评估 +- 基于锻炼类型生成个性化鼓励内容 + +### 3. 个性化通知 +不同锻炼类型的专属消息: +- **跑步**: "🏃‍♂️ 跑步完成!太棒了!您刚刚完成了30分钟的跑步,消耗了约250千卡热量。平均心率140次/分。坚持运动让身体更健康!💪" +- **瑜伽**: "🧘‍♀️ 瑜伽完成!45分钟的瑜伽练习完成!提升了柔韧性和内心平静。继续保持这份宁静!🌸" +- **HIIT**: "🔥 HIIT训练完成!高强度间歇训练20分钟完成!消耗了约200千卡热量。心肺功能得到有效提升,您的努力值得称赞!⚡" + +### 4. 用户控制 +- **功能开关**: 允许用户启用/禁用锻炼结束通知 +- **时间段设置**: 限制通知发送时间(如 8:00-22:00) +- **锻炼类型筛选**: 允许用户选择关心的锻炼类型 +- **通知频率控制**: 避免短时间内重复通知 + +## 使用方法 + +### 用户设置 +1. 打开应用 +2. 进入设置页面(可通过锻炼历史页面访问) +3. 配置锻炼通知偏好: + - 启用/禁用功能 + - 设置通知时间范围 + - 选择要接收通知的锻炼类型 + +### 开发者测试 +```typescript +import { WorkoutTestHelper } from '@/utils/workoutTestHelper'; + +// 测试通知功能 +await WorkoutTestHelper.testWorkoutNotifications(); + +// 测试偏好设置 +await WorkoutTestHelper.testPreferences(); + +// 模拟锻炼完成 +await WorkoutTestHelper.simulateWorkoutCompletion(); + +// 运行完整测试套件 +await WorkoutTestHelper.runFullTestSuite(); +``` + +## 权限要求 + +### iOS 权限 +1. **HealthKit 权限**: 需要读取锻炼数据 +2. **通知权限**: 需要发送推送通知 +3. **后台执行权限**: 需要在后台监听数据变化 + +### 配置文件 +在 `app.json` 中已配置必要的后台模式: +```json +"UIBackgroundModes": [ + "processing", + "fetch", + "remote-notification" +] +``` + +## 技术细节 + +### 防抖处理 +- 使用 5 秒延迟避免短时间内重复处理 +- 确保 HealthKit 数据完全更新后再处理 + +### 错误处理 +- 完善的错误捕获和日志记录 +- 权限检查和用户友好提示 + +### 性能优化 +- 使用 HealthKit 原生后台查询,最小化电池消耗 +- 智能判断锻炼结束时机,避免频繁查询 + +## 故障排除 + +### 常见问题 + +1. **通知未发送** + - 检查通知权限是否已授予 + - 检查锻炼通知是否在设置中启用 + - 检查当前时间是否在允许的时间范围内 + +2. **监听不工作** + - 确保 HealthKit 权限已授予 + - 检查应用是否有后台执行权限 + - 重启应用重新初始化监听服务 + +3. **重复通知** + - 系统有防重复机制,记录已处理的锻炼ID + - 如果出现问题,可以清除应用数据重新开始 + +### 调试方法 +1. 使用 `WorkoutTestHelper` 进行测试 +2. 查看控制台日志了解详细执行过程 +3. 检查 iOS 设备的设置中的通知权限 + +## 未来扩展 + +1. **更多锻炼类型支持**: 添加更多运动类型的个性化消息 +2. **成就系统**: 基于锻炼历史生成成就和里程碑 +3. **社交分享**: 允许用户分享锻炼成就 +4. **智能建议**: 基于锻炼数据提供个性化建议 + +## 注意事项 + +1. **电池使用**: 虽然使用了优化的后台查询,但仍会消耗一定电量 +2. **隐私保护**: 所有数据仅在本地处理,不会上传到服务器 +3. **兼容性**: 仅支持 iOS,需要 iOS 16.0+ +4. **测试环境**: 在模拟器上可能无法完全测试,建议使用真机 + +## 更新日志 + +### v1.0.0 +- 初始版本发布 +- 支持基本的锻炼结束监听和通知 +- 完整的用户偏好设置 +- 测试工具和文档 \ No newline at end of file diff --git a/ios/OutLive/HealthKitManager.m b/ios/OutLive/HealthKitManager.m index b467506..c293ee9 100644 --- a/ios/OutLive/HealthKitManager.m +++ b/ios/OutLive/HealthKitManager.m @@ -82,4 +82,11 @@ RCT_EXTERN_METHOD(getRecentWorkouts:(NSDictionary *)options resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter) +// Workout Observer Methods +RCT_EXTERN_METHOD(startWorkoutObserver:(RCTPromiseResolveBlock)resolver + rejecter:(RCTPromiseRejectBlock)rejecter) + +RCT_EXTERN_METHOD(stopWorkoutObserver:(RCTPromiseResolveBlock)resolver + rejecter:(RCTPromiseRejectBlock)rejecter) + @end \ No newline at end of file diff --git a/ios/OutLive/HealthKitManager.swift b/ios/OutLive/HealthKitManager.swift index a587636..ffbf86a 100644 --- a/ios/OutLive/HealthKitManager.swift +++ b/ios/OutLive/HealthKitManager.swift @@ -10,17 +10,14 @@ import React import HealthKit @objc(HealthKitManager) -class HealthKitManager: NSObject, RCTBridgeModule { +class HealthKitManager: RCTEventEmitter { private let healthStore = HKHealthStore() - static func moduleName() -> String! { + override static func moduleName() -> String! { return "HealthKitManager" } - static func requiresMainQueueSetup() -> Bool { - return true - } // MARK: - Types We Care About @@ -1703,4 +1700,95 @@ class HealthKitManager: NSObject, RCTBridgeModule { return description.lowercased() } +// MARK: - Workout Observer Methods + +private var workoutObserverQuery: HKObserverQuery? + +@objc +func startWorkoutObserver( + _ resolver: @escaping RCTPromiseResolveBlock, + rejecter: @escaping RCTPromiseRejectBlock +) { + guard HKHealthStore.isHealthDataAvailable() else { + rejecter("HEALTHKIT_NOT_AVAILABLE", "HealthKit is not available on this device", nil) + return + } + + // 如果已经有观察者在运行,先停止它 + if let existingQuery = workoutObserverQuery { + healthStore.stop(existingQuery) + workoutObserverQuery = nil + } + + // 创建锻炼数据观察者 + let workoutType = ReadTypes.workoutType + + workoutObserverQuery = HKObserverQuery(sampleType: workoutType, predicate: nil) { [weak self] (query, completionHandler, error) in + if let error = error { + print("Workout observer error: \(error.localizedDescription)") + completionHandler() + return + } + + print("Workout data updated, sending event to React Native") + // 发送事件到 React Native + self?.sendWorkoutUpdateEvent() + completionHandler() + } + + // 启用后台传递 + healthStore.enableBackgroundDelivery(for: workoutType, frequency: .immediate) { (success, error) in + if let error = error { + print("Failed to enable background delivery for workouts: \(error.localizedDescription)") + } else { + print("Background delivery for workouts enabled successfully") + } + } + + // 执行查询 + healthStore.execute(workoutObserverQuery!) + + resolver(["success": true]) +} + +@objc +func stopWorkoutObserver( + _ resolver: @escaping RCTPromiseResolveBlock, + rejecter: @escaping RCTPromiseRejectBlock +) { + if let query = workoutObserverQuery { + healthStore.stop(query) + workoutObserverQuery = nil + + // 禁用后台传递 + healthStore.disableBackgroundDelivery(for: ReadTypes.workoutType) { (success, error) in + if let error = error { + print("Failed to disable background delivery for workouts: \(error.localizedDescription)") + } + } + + resolver(["success": true]) + } else { + resolver(["success": true]) // 即使没有查询在运行也返回成功 + } +} + +private func sendWorkoutUpdateEvent() { + // 使用 RCTEventEmitter 发送事件 + sendEvent(withName: "workoutUpdate", body: [ + "timestamp": Date().timeIntervalSince1970, + "type": "workout_completed" + ]) +} + +// MARK: - RCTEventEmitter Overrides + +override func supportedEvents() -> [String]! { + return ["workoutUpdate"] +} + +override static func requiresMainQueueSetup() -> Bool { + return true +} + } // end class diff --git a/ios/OutLive/Info.plist b/ios/OutLive/Info.plist index 94bc391..0a61884 100644 --- a/ios/OutLive/Info.plist +++ b/ios/OutLive/Info.plist @@ -77,7 +77,7 @@ UIBackgroundModes - processing + fetch UILaunchStoryboardName SplashScreen diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 139078a..ec8d926 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -6,9 +6,9 @@ PODS: - EXImageLoader (6.0.0): - ExpoModulesCore - React-Core - - EXNotifications (0.32.11): + - EXNotifications (0.32.12): - ExpoModulesCore - - Expo (54.0.10): + - Expo (54.0.13): - ExpoModulesCore - hermes-engine - RCTRequired @@ -45,18 +45,18 @@ PODS: - ExpoModulesCore - ZXingObjC/OneD - ZXingObjC/PDF417 - - ExpoFileSystem (19.0.15): + - ExpoFileSystem (19.0.17): - ExpoModulesCore - - ExpoFont (14.0.8): + - ExpoFont (14.0.9): - ExpoModulesCore - ExpoGlassEffect (0.1.4): - ExpoModulesCore - ExpoHaptics (15.0.7): - ExpoModulesCore - - ExpoHead (6.0.8): + - ExpoHead (6.0.12): - ExpoModulesCore - RNScreens - - ExpoImage (3.0.8): + - ExpoImage (3.0.9): - ExpoModulesCore - libavif/libdav1d - SDWebImage (~> 5.21.0) @@ -71,7 +71,7 @@ PODS: - ExpoModulesCore - ExpoLinking (8.0.8): - ExpoModulesCore - - ExpoModulesCore (3.0.18): + - ExpoModulesCore (3.0.21): - hermes-engine - RCTRequired - RCTTypeSafety @@ -106,7 +106,7 @@ PODS: - ExpoModulesCore - ExpoUI (0.2.0-beta.4): - ExpoModulesCore - - ExpoWebBrowser (15.0.7): + - ExpoWebBrowser (15.0.8): - ExpoModulesCore - EXTaskManager (14.0.7): - ExpoModulesCore @@ -156,8 +156,8 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - PurchasesHybridCommon (17.7.0): - - RevenueCat (= 5.39.0) + - PurchasesHybridCommon (17.10.0): + - RevenueCat (= 5.43.0) - RCTDeprecation (0.81.4) - RCTRequired (0.81.4) - RCTTypeSafety (0.81.4): @@ -1882,7 +1882,7 @@ PODS: - React-utils (= 0.81.4) - ReactNativeDependencies - ReactNativeDependencies (0.81.4) - - RevenueCat (5.39.0) + - RevenueCat (5.43.0) - RNCAsyncStorage (2.2.0): - hermes-engine - RCTRequired @@ -1971,7 +1971,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - RNDeviceInfo (14.0.4): + - RNDeviceInfo (14.1.1): - React-Core - RNGestureHandler (2.28.0): - hermes-engine @@ -1995,10 +1995,10 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - RNPurchases (9.4.3): - - PurchasesHybridCommon (= 17.7.0) + - RNPurchases (9.5.4): + - PurchasesHybridCommon (= 17.10.0) - React-Core - - RNReanimated (4.1.0): + - RNReanimated (4.1.3): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2020,10 +2020,10 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNReanimated/reanimated (= 4.1.0) + - RNReanimated/reanimated (= 4.1.3) - RNWorklets - Yoga - - RNReanimated/reanimated (4.1.0): + - RNReanimated/reanimated (4.1.3): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2045,10 +2045,10 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNReanimated/reanimated/apple (= 4.1.0) + - RNReanimated/reanimated/apple (= 4.1.3) - RNWorklets - Yoga - - RNReanimated/reanimated/apple (4.1.0): + - RNReanimated/reanimated/apple (4.1.3): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2143,7 +2143,7 @@ PODS: - ReactNativeDependencies - Sentry/HybridSDK (= 8.56.0) - Yoga - - RNSVG (15.13.0): + - RNSVG (15.14.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2164,9 +2164,9 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNSVG/common (= 15.13.0) + - RNSVG/common (= 15.14.0) - Yoga - - RNSVG/common (15.13.0): + - RNSVG/common (15.14.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2188,7 +2188,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - RNWorklets (0.5.1): + - RNWorklets (0.6.1): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2210,9 +2210,9 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNWorklets/worklets (= 0.5.1) + - RNWorklets/worklets (= 0.6.1) - Yoga - - RNWorklets/worklets (0.5.1): + - RNWorklets/worklets (0.6.1): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2234,9 +2234,9 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNWorklets/worklets/apple (= 0.5.1) + - RNWorklets/worklets/apple (= 0.6.1) - Yoga - - RNWorklets/worklets/apple (0.5.1): + - RNWorklets/worklets/apple (0.6.1): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2259,9 +2259,9 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - SDWebImage (5.21.2): - - SDWebImage/Core (= 5.21.2) - - SDWebImage/Core (5.21.2) + - SDWebImage (5.21.3): + - SDWebImage/Core (= 5.21.3) + - SDWebImage/Core (5.21.3) - SDWebImageAVIFCoder (0.11.1): - libavif/core (>= 0.11.0) - SDWebImage (~> 5.10) @@ -2646,31 +2646,31 @@ SPEC CHECKSUMS: EXApplication: 296622817d459f46b6c5fe8691f4aac44d2b79e7 EXConstants: a95804601ee4a6aa7800645f9b070d753b1142b3 EXImageLoader: 189e3476581efe3ad4d1d3fb4735b7179eb26f05 - EXNotifications: 7a2975f4e282b827a0bc78bb1d232650cb569bbd - Expo: c839a13691635386c0134f204dbbaed3cebff0a8 + EXNotifications: 7cff475adb5d7a255a9ea46bbd2589cb3b454506 + Expo: 6580dbf21d94626792b38a95cddb2fb369ec6b0c ExpoAppleAuthentication: bc9de6e9ff3340604213ab9031d4c4f7f802623e ExpoAsset: 9ba6fbd677fb8e241a3899ac00fa735bc911eadf ExpoBackgroundTask: e0d201d38539c571efc5f9cb661fae8ab36ed61b ExpoBlur: 2dd8f64aa31f5d405652c21d3deb2d2588b1852f ExpoCamera: e75f6807a2c047f3338bbadd101af4c71a1d13a5 - ExpoFileSystem: 5fb091ea11198e109ceef2bdef2e6e66523e62c4 - ExpoFont: 86ceec09ffed1c99cfee36ceb79ba149074901b5 + ExpoFileSystem: b79eadbda7b7f285f378f95f959cc9313a1c9c61 + ExpoFont: cf9d90ec1d3b97c4f513211905724c8171f82961 ExpoGlassEffect: 744bf0c58c26a1b0212dff92856be07b98d01d8c ExpoHaptics: 807476b0c39e9d82b7270349d6487928ce32df84 - ExpoHead: 5570e5edbe54fd8f88e51e8b94bf2931caaa7363 - ExpoImage: e88f500585913969b930e13a4be47277eb7c6de8 + ExpoHead: 7141e494b0773a8f0dc5ca3366ce91b1300f5a9d + ExpoImage: 6356eb13d3a076a991cf191e4bb22cca91a8f317 ExpoImagePicker: d251aab45a1b1857e4156fed88511b278b4eee1c ExpoKeepAwake: 1a2e820692e933c94a565ec3fbbe38ac31658ffe ExpoLinearGradient: a464898cb95153125e3b81894fd479bcb1c7dd27 ExpoLinking: f051f28e50ea9269ff539317c166adec81d9342d - ExpoModulesCore: c03ac4bc5a83469ca1222c3954a0499cd059addf + ExpoModulesCore: 3a6eb12a5f4d67b2f5fc7d0bc4777b18348f2d7a ExpoQuickActions: 31a70aa6a606128de4416a4830e09cfabfe6667f ExpoSplashScreen: cbb839de72110dea1851dd3e85080b7923af2540 ExpoSQLite: 7fa091ba5562474093fef09be644161a65e11b3f ExpoSymbols: 1ae04ce686de719b9720453b988d8bc5bf776c68 ExpoSystemUI: 6cd74248a2282adf6dec488a75fa532d69dee314 ExpoUI: 5e44b62e2589b7bc8a6123943105a230c693d000 - ExpoWebBrowser: 533bc2a1b188eec1c10e4926decf658f1687b5e5 + ExpoWebBrowser: d04a0d6247a0bea4519fbc2ea816610019ad83e0 EXTaskManager: cf225704fab8de8794a6f57f7fa41a90c0e2cd47 FBLazyVector: 9e0cd874afd81d9a4d36679daca991b58b260d42 hermes-engine: 35c763d57c9832d0eef764316ca1c4d043581394 @@ -2679,7 +2679,7 @@ SPEC CHECKSUMS: libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 lottie-ios: a881093fab623c467d3bce374367755c272bdd59 lottie-react-native: cbe3d931a7c24f7891a8e8032c2bb9b2373c4b9c - PurchasesHybridCommon: 6bc96162fb0c061e1980f474be618c088cfd1428 + PurchasesHybridCommon: b7b4eafb55fbaaac19b4c36d4082657a3f0d8490 RCTDeprecation: 7487d6dda857ccd4cb3dd6ecfccdc3170e85dcbc RCTRequired: 54128b7df8be566881d48c7234724a78cb9b6157 RCTTypeSafety: d2b07797a79e45d7b19e1cd2f53c79ab419fe217 @@ -2748,20 +2748,20 @@ SPEC CHECKSUMS: ReactCodegen: a15ad48730e9fb2a51a4c9f61fe1ed253dfcf10f ReactCommon: 149b6c05126f2e99f2ed0d3c63539369546f8cae ReactNativeDependencies: ed6d1e64802b150399f04f1d5728ec16b437251e - RevenueCat: 4743a5eee0004e1c03eabeb3498818f902a5d622 + RevenueCat: a51003d4cb33820cc504cf177c627832b462a98e RNCAsyncStorage: 3a4f5e2777dae1688b781a487923a08569e27fe4 RNCMaskedView: d2578d41c59b936db122b2798ba37e4722d21035 RNCPicker: ddce382c4b42ea2ee36dd588066f0c6d5a240707 RNDateTimePicker: 7dda2673bd2a6022ea8888fe669d735b2eac0b2d - RNDeviceInfo: d863506092aef7e7af3a1c350c913d867d795047 + RNDeviceInfo: bcce8752b5043a623fe3c26789679b473f705d3c RNGestureHandler: 2914750df066d89bf9d8f48a10ad5f0051108ac3 - RNPurchases: 1bc60e3a69af65d9cfe23967328421dd1df1763c - RNReanimated: 8d3a14606ad49f022c17d9e12a2d339e9e5ad9b0 + RNPurchases: 2569675abdc1dbc739f2eec0fa564a112cf860de + RNReanimated: 3895a29fdf77bbe2a627e1ed599a5e5d1df76c29 RNScreens: d8d6f1792f6e7ac12b0190d33d8d390efc0c1845 RNSentry: dbee413744aec703b8763b620b14ed7a1e2db095 - RNSVG: efc8a09e4ef50e7df0dbc9327752be127a2f610c - RNWorklets: 76fce72926e28e304afb44f0da23b2d24f2c1fa0 - SDWebImage: 9f177d83116802728e122410fb25ad88f5c7608a + RNSVG: 6c534e37eaaefe882b3f55294d0d607de20562dc + RNWorklets: 54d8dffb7f645873a58484658ddfd4bd1a9a0bc1 + SDWebImage: 16309af6d214ba3f77a7c6f6fdda888cb313a50a SDWebImageAVIFCoder: afe194a084e851f70228e4be35ef651df0fc5c57 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 diff --git a/package-lock.json b/package-lock.json index 1562af5..db8f8f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,22 +23,22 @@ "@sentry/react-native": "~7.1.0", "@types/lodash": "^4.17.20", "dayjs": "^1.11.18", - "expo": "^54.0.10", + "expo": "^54.0.13", "expo-apple-authentication": "~8.0.7", "expo-background-task": "~1.0.8", "expo-blur": "~15.0.7", "expo-camera": "~17.0.8", "expo-constants": "~18.0.9", - "expo-font": "~14.0.8", + "expo-font": "~14.0.9", "expo-glass-effect": "^0.1.4", "expo-haptics": "~15.0.7", - "expo-image": "~3.0.8", + "expo-image": "~3.0.9", "expo-image-picker": "~17.0.8", "expo-linear-gradient": "~15.0.7", "expo-linking": "~8.0.8", - "expo-notifications": "~0.32.11", + "expo-notifications": "~0.32.12", "expo-quick-actions": "^6.0.0", - "expo-router": "~6.0.8", + "expo-router": "~6.0.12", "expo-splash-screen": "~31.0.10", "expo-sqlite": "^16.0.8", "expo-status-bar": "~3.0.8", @@ -394,6 +394,7 @@ "version": "7.28.3", "resolved": "https://mirrors.tencent.com/npm/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.3", @@ -619,6 +620,7 @@ "version": "7.8.3", "resolved": "https://mirrors.tencent.com/npm/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1026,6 +1028,7 @@ "version": "7.27.1", "resolved": "https://mirrors.tencent.com/npm/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", @@ -1393,6 +1396,7 @@ "version": "7.27.1", "resolved": "https://mirrors.tencent.com/npm/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1405,7 +1409,7 @@ }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "license": "MIT", "peer": true, @@ -1536,17 +1540,17 @@ }, "node_modules/@babel/traverse--for-generate-function-map": { "name": "@babel/traverse", - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "version": "7.28.4", + "resolved": "https://mirrors.tencent.com/npm/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", + "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", + "@babel/types": "^7.28.4", "debug": "^4.3.1" }, "engines": { @@ -1578,40 +1582,6 @@ "node": ">=0.8.0" } }, - "node_modules/@emnapi/core": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", - "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.0.4", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", - "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", - "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.0", "resolved": "https://mirrors.tencent.com/npm/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", @@ -1670,19 +1640,22 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "version": "0.4.0", + "resolved": "https://mirrors.tencent.com/npm/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", + "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "version": "0.16.0", + "resolved": "https://mirrors.tencent.com/npm/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1717,9 +1690,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.35.0", - "resolved": "https://mirrors.tencent.com/npm/@eslint/js/-/js-9.35.0.tgz", - "integrity": "sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==", + "version": "9.37.0", + "resolved": "https://mirrors.tencent.com/npm/@eslint/js/-/js-9.37.0.tgz", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", "dev": true, "license": "MIT", "engines": { @@ -1740,13 +1713,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "version": "0.4.0", + "resolved": "https://mirrors.tencent.com/npm/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.2", + "@eslint/core": "^0.16.0", "levn": "^0.4.1" }, "engines": { @@ -1764,13 +1737,13 @@ } }, "node_modules/@expo/config": { - "version": "12.0.9", - "resolved": "https://mirrors.tencent.com/npm/@expo/config/-/config-12.0.9.tgz", - "integrity": "sha512-HiDVVaXYKY57+L1MxSF3TaYjX6zZlGBnuWnOKZG+7mtsLD+aNTtW4bZM0pZqZfoRumyOU0SfTCwT10BWtUUiJQ==", + "version": "12.0.10", + "resolved": "https://mirrors.tencent.com/npm/@expo/config/-/config-12.0.10.tgz", + "integrity": "sha512-lJMof5Nqakq1DxGYlghYB/ogSBjmv4Fxn1ovyDmcjlRsQdFCXgu06gEUogkhPtc9wBt9WlTTfqENln5HHyLW6w==", "license": "MIT", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~54.0.1", + "@expo/config-plugins": "~54.0.2", "@expo/config-types": "^54.0.8", "@expo/json-file": "^10.0.7", "deepmerge": "^4.3.1", @@ -1785,9 +1758,9 @@ } }, "node_modules/@expo/config-plugins": { - "version": "54.0.1", - "resolved": "https://mirrors.tencent.com/npm/@expo/config-plugins/-/config-plugins-54.0.1.tgz", - "integrity": "sha512-NyBChhiWFL6VqSgU+LzK4R1vC397tEG2XFewVt4oMr4Pnalq/mJxBANQrR+dyV1RHhSyhy06RNiJIkQyngVWeg==", + "version": "54.0.2", + "resolved": "https://mirrors.tencent.com/npm/@expo/config-plugins/-/config-plugins-54.0.2.tgz", + "integrity": "sha512-jD4qxFcURQUVsUFGMcbo63a/AnviK8WUGard+yrdQE3ZrB/aurn68SlApjirQQLEizhjI5Ar2ufqflOBlNpyPg==", "license": "MIT", "dependencies": { "@expo/config-types": "^54.0.8", @@ -2067,15 +2040,15 @@ } }, "node_modules/@expo/metro-config": { - "version": "54.0.5", - "resolved": "https://mirrors.tencent.com/npm/@expo/metro-config/-/metro-config-54.0.5.tgz", - "integrity": "sha512-Y+oYtLg8b3L4dHFImfu8+yqO+KOcBpLLjxN7wGbs7miP/BjntBQ6tKbPxyKxHz5UUa1s+buBzZlZhsFo9uqKMg==", + "version": "54.0.6", + "resolved": "https://mirrors.tencent.com/npm/@expo/metro-config/-/metro-config-54.0.6.tgz", + "integrity": "sha512-z3wufTr1skM03PI6Dr1ZsrvjAiGKf/w0VQvdZL+mEnKNqRA7Q4bhJDGk1+nzs+WWRWz4vS488uad9ERmSclBmg==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.20.0", "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", - "@expo/config": "~12.0.9", + "@expo/config": "~12.0.10", "@expo/env": "~2.0.7", "@expo/json-file": "~10.0.7", "@expo/metro": "~54.0.0", @@ -2116,7 +2089,6 @@ "version": "9.0.5", "resolved": "https://mirrors.tencent.com/npm/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2189,13 +2161,13 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "54.0.3", - "resolved": "https://mirrors.tencent.com/npm/@expo/prebuild-config/-/prebuild-config-54.0.3.tgz", - "integrity": "sha512-okf6Umaz1VniKmm+pA37QHBzB9XlRHvO1Qh3VbUezy07LTkz87kXUW7uLMmrA319WLavWSVORTXeR0jBRihObA==", + "version": "54.0.5", + "resolved": "https://mirrors.tencent.com/npm/@expo/prebuild-config/-/prebuild-config-54.0.5.tgz", + "integrity": "sha512-eCvbVUf01j1nSrs4mG/rWwY+SfgE30LM6JcElLrnNgNnaDWzt09E/c8n3ZeTLNKENwJaQQ1KIn2VE461/4VnWQ==", "license": "MIT", "dependencies": { - "@expo/config": "~12.0.9", - "@expo/config-plugins": "~54.0.1", + "@expo/config": "~12.0.10", + "@expo/config-plugins": "~54.0.2", "@expo/config-types": "^54.0.8", "@expo/image-utils": "^0.8.7", "@expo/json-file": "^10.0.7", @@ -2210,9 +2182,9 @@ } }, "node_modules/@expo/prebuild-config/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://mirrors.tencent.com/npm/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://mirrors.tencent.com/npm/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2233,19 +2205,6 @@ "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", "license": "MIT" }, - "node_modules/@expo/server": { - "version": "0.7.5", - "resolved": "https://mirrors.tencent.com/npm/@expo/server/-/server-0.7.5.tgz", - "integrity": "sha512-aNVcerBSJEcUspvXRWChEgFhix1gTNIcgFDevaU/A1+TkfbejNIjGX4rfLEpfyRzzdLIRuOkBNjD+uTYMzohyg==", - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">=20.16.0" - } - }, "node_modules/@expo/spawn-async": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", @@ -2280,7 +2239,7 @@ }, "node_modules/@expo/vector-icons": { "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-15.0.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/@expo/vector-icons/-/vector-icons-15.0.2.tgz", "integrity": "sha512-IiBjg7ZikueuHNf40wSGCf0zS73a3guJLdZzKnDUxsauB8VWPLMeWnRIupc+7cFhLUkqyvyo0jLNlcxG5xPOuQ==", "license": "MIT", "peerDependencies": { @@ -2451,7 +2410,7 @@ }, "node_modules/@isaacs/ttlcache": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", "license": "ISC", "engines": { @@ -2687,7 +2646,7 @@ }, "node_modules/@jridgewell/source-map": { "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "resolved": "https://mirrors.tencent.com/npm/@jridgewell/source-map/-/source-map-0.3.11.tgz", "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "license": "MIT", "dependencies": { @@ -2728,19 +2687,6 @@ "react-native": "*" } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, "node_modules/@native-html/css-processor": { "version": "1.11.0", "resolved": "https://mirrors.tencent.com/npm/@native-html/css-processor/-/css-processor-1.11.0.tgz", @@ -2779,6 +2725,7 @@ "version": "1.4.1", "resolved": "https://mirrors.tencent.com/npm/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -2792,6 +2739,7 @@ "version": "4.3.1", "resolved": "https://mirrors.tencent.com/npm/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -2806,6 +2754,7 @@ "version": "2.8.0", "resolved": "https://mirrors.tencent.com/npm/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -2819,6 +2768,7 @@ "version": "2.2.0", "resolved": "https://mirrors.tencent.com/npm/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -2887,50 +2837,6 @@ "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", "license": "MIT" }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.1.2", "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", @@ -2961,60 +2867,6 @@ } } }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.1.15", - "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", - "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-direction": { "version": "1.1.1", "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", @@ -3030,33 +2882,6 @@ } } }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.11", - "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-focus-guards": { "version": "1.1.3", "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", @@ -3072,31 +2897,6 @@ } } }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-id": { "version": "1.1.1", "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-id/-/react-id-1.1.1.tgz", @@ -3115,126 +2915,6 @@ } } }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.5", - "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.11", - "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", - "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-slot": { "version": "1.2.0", "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-slot/-/react-slot-1.2.0.tgz", @@ -3253,36 +2933,6 @@ } } }, - "node_modules/@radix-ui/react-tabs": { - "version": "1.1.13", - "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", - "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-use-callback-ref": { "version": "1.1.1", "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", @@ -3589,7 +3239,7 @@ }, "node_modules/@react-native/assets-registry": { "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.81.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/@react-native/assets-registry/-/assets-registry-0.81.4.tgz", "integrity": "sha512-AMcDadefBIjD10BRqkWw+W/VdvXEomR6aEZ0fhQRAv7igrBzb4PTn4vHKYg+sUK0e3wa74kcMy2DLc/HtnGcMA==", "license": "MIT", "engines": { @@ -3670,7 +3320,7 @@ }, "node_modules/@react-native/codegen": { "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.81.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/@react-native/codegen/-/codegen-0.81.4.tgz", "integrity": "sha512-LWTGUTzFu+qOQnvkzBP52B90Ym3stZT8IFCzzUrppz8Iwglg83FCtDZAR4yLHI29VY/x/+pkcWAMCl3739XHdw==", "license": "MIT", "dependencies": { @@ -3691,7 +3341,7 @@ }, "node_modules/@react-native/codegen/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "resolved": "https://mirrors.tencent.com/npm/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", @@ -3712,7 +3362,7 @@ }, "node_modules/@react-native/community-cli-plugin": { "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.81.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/@react-native/community-cli-plugin/-/community-cli-plugin-0.81.4.tgz", "integrity": "sha512-8mpnvfcLcnVh+t1ok6V9eozWo8Ut+TZhz8ylJ6gF9d6q9EGDQX6s8jenan5Yv/pzN4vQEKI4ib2pTf/FELw+SA==", "license": "MIT", "dependencies": { @@ -3741,9 +3391,9 @@ } }, "node_modules/@react-native/community-cli-plugin/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://mirrors.tencent.com/npm/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3754,7 +3404,7 @@ }, "node_modules/@react-native/debugger-frontend": { "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.81.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/@react-native/debugger-frontend/-/debugger-frontend-0.81.4.tgz", "integrity": "sha512-SU05w1wD0nKdQFcuNC9D6De0ITnINCi8MEnx9RsTD2e4wN83ukoC7FpXaPCYyP6+VjFt5tUKDPgP1O7iaNXCqg==", "license": "BSD-3-Clause", "engines": { @@ -3763,7 +3413,7 @@ }, "node_modules/@react-native/dev-middleware": { "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.81.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/@react-native/dev-middleware/-/dev-middleware-0.81.4.tgz", "integrity": "sha512-hu1Wu5R28FT7nHXs2wWXvQ++7W7zq5GPY83llajgPlYKznyPLAY/7bArc5rAzNB7b0kwnlaoPQKlvD/VP9LZug==", "license": "MIT", "dependencies": { @@ -3785,7 +3435,7 @@ }, "node_modules/@react-native/dev-middleware/node_modules/ws": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "resolved": "https://mirrors.tencent.com/npm/ws/-/ws-6.2.3.tgz", "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", "license": "MIT", "dependencies": { @@ -3794,7 +3444,7 @@ }, "node_modules/@react-native/gradle-plugin": { "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.81.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/@react-native/gradle-plugin/-/gradle-plugin-0.81.4.tgz", "integrity": "sha512-T7fPcQvDDCSusZFVSg6H1oVDKb/NnVYLnsqkcHsAF2C2KGXyo3J7slH/tJAwNfj/7EOA2OgcWxfC1frgn9TQvw==", "license": "MIT", "engines": { @@ -3803,7 +3453,7 @@ }, "node_modules/@react-native/js-polyfills": { "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.81.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/@react-native/js-polyfills/-/js-polyfills-0.81.4.tgz", "integrity": "sha512-sr42FaypKXJHMVHhgSbu2f/ZJfrLzgaoQ+HdpRvKEiEh2mhFf6XzZwecyLBvWqf2pMPZa+CpPfNPiejXjKEy8w==", "license": "MIT", "engines": { @@ -3837,16 +3487,16 @@ } }, "node_modules/@react-navigation/bottom-tabs": { - "version": "7.4.7", - "resolved": "https://mirrors.tencent.com/npm/@react-navigation/bottom-tabs/-/bottom-tabs-7.4.7.tgz", - "integrity": "sha512-SQ4KuYV9yr3SV/thefpLWhAD0CU2CrBMG1l0w/QKl3GYuGWdN5OQmdQdmaPZGtsjjVOb+N9Qo7Tf6210P4TlpA==", + "version": "7.4.8", + "resolved": "https://mirrors.tencent.com/npm/@react-navigation/bottom-tabs/-/bottom-tabs-7.4.8.tgz", + "integrity": "sha512-W85T9f5sPA2zNnkxBO0PF0Jg9CRAMYqD9hY20dAhuVM5I+qiCqhW7qLveK59mlbtdXuGmieit6FK3inKmXzL7A==", "license": "MIT", "dependencies": { - "@react-navigation/elements": "^2.6.4", + "@react-navigation/elements": "^2.6.5", "color": "^4.2.3" }, "peerDependencies": { - "@react-navigation/native": "^7.1.17", + "@react-navigation/native": "^7.1.18", "react": ">= 18.2.0", "react-native": "*", "react-native-safe-area-context": ">= 4.0.0", @@ -3855,7 +3505,7 @@ }, "node_modules/@react-navigation/core": { "version": "7.12.4", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-7.12.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/@react-navigation/core/-/core-7.12.4.tgz", "integrity": "sha512-xLFho76FA7v500XID5z/8YfGTvjQPw7/fXsq4BIrVSqetNe/o/v+KAocEw4ots6kyv3XvSTyiWKh2g3pN6xZ9Q==", "license": "MIT", "dependencies": { @@ -3872,9 +3522,9 @@ } }, "node_modules/@react-navigation/elements": { - "version": "2.6.4", - "resolved": "https://mirrors.tencent.com/npm/@react-navigation/elements/-/elements-2.6.4.tgz", - "integrity": "sha512-O3X9vWXOEhAO56zkQS7KaDzL8BvjlwZ0LGSteKpt1/k6w6HONG+2Wkblrb057iKmehTkEkQMzMLkXiuLmN5x9Q==", + "version": "2.6.5", + "resolved": "https://mirrors.tencent.com/npm/@react-navigation/elements/-/elements-2.6.5.tgz", + "integrity": "sha512-HOaekvFeoqKyaSKP2hakL7OUnw0jIhk/1wMjcovUKblT76LMTumZpriqsc30m/Vnyy1a8zgp4VsuA1xftcalgQ==", "license": "MIT", "dependencies": { "color": "^4.2.3", @@ -3883,7 +3533,7 @@ }, "peerDependencies": { "@react-native-masked-view/masked-view": ">= 0.2.0", - "@react-navigation/native": "^7.1.17", + "@react-navigation/native": "^7.1.18", "react": ">= 18.2.0", "react-native": "*", "react-native-safe-area-context": ">= 4.0.0" @@ -3895,9 +3545,9 @@ } }, "node_modules/@react-navigation/native": { - "version": "7.1.17", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-7.1.17.tgz", - "integrity": "sha512-uEcYWi1NV+2Qe1oELfp9b5hTYekqWATv2cuwcOAg5EvsIsUPtzFrKIasgUXLBRGb9P7yR5ifoJ+ug4u6jdqSTQ==", + "version": "7.1.18", + "resolved": "https://mirrors.tencent.com/npm/@react-navigation/native/-/native-7.1.18.tgz", + "integrity": "sha512-DZgd6860dxcq3YX7UzIXeBr6m3UgXvo9acxp5jiJyIZXdR00Br9JwVkO7e0bUeTA2d3Z8dsmtAR84Y86NnH64Q==", "license": "MIT", "dependencies": { "@react-navigation/core": "^7.12.4", @@ -3912,16 +3562,16 @@ } }, "node_modules/@react-navigation/native-stack": { - "version": "7.3.26", - "resolved": "https://mirrors.tencent.com/npm/@react-navigation/native-stack/-/native-stack-7.3.26.tgz", - "integrity": "sha512-EjaBWzLZ76HJGOOcWCFf+h/M+Zg7M1RalYioDOb6ZdXHz7AwYNidruT3OUAQgSzg3gVLqvu5OYO0jFsNDPCZxQ==", + "version": "7.3.27", + "resolved": "https://mirrors.tencent.com/npm/@react-navigation/native-stack/-/native-stack-7.3.27.tgz", + "integrity": "sha512-bbbud0pT63tGh706hQD/A3Z9gF1O2HtQ0dJqaiYzHzPy9wSOi82i721530tJkmccevAemUrZbEeEC5mxVo1DzQ==", "license": "MIT", "dependencies": { - "@react-navigation/elements": "^2.6.4", + "@react-navigation/elements": "^2.6.5", "warn-once": "^0.1.1" }, "peerDependencies": { - "@react-navigation/native": "^7.1.17", + "@react-navigation/native": "^7.1.18", "react": ">= 18.2.0", "react-native": "*", "react-native-safe-area-context": ">= 4.0.0", @@ -3930,7 +3580,7 @@ }, "node_modules/@react-navigation/routers": { "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-7.5.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/@react-navigation/routers/-/routers-7.5.1.tgz", "integrity": "sha512-pxipMW/iEBSUrjxz2cDD7fNwkqR4xoi0E/PcfTQGCcdJwLoaxzab5kSadBLj1MTJyT0YRrOXL9umHpXtp+Dv4w==", "license": "MIT", "dependencies": { @@ -3964,24 +3614,24 @@ } }, "node_modules/@revenuecat/purchases-js": { - "version": "1.14.0", - "resolved": "https://mirrors.tencent.com/npm/@revenuecat/purchases-js/-/purchases-js-1.14.0.tgz", - "integrity": "sha512-SotJ9MznBZoq91nSxLl1Oqw42k6A3JU0d73/WFbppv1IG770Q8KhuAUo1SgZC62ERCuCHme5fEdER1ZI4x8y7A==", + "version": "1.15.0", + "resolved": "https://mirrors.tencent.com/npm/@revenuecat/purchases-js/-/purchases-js-1.15.0.tgz", + "integrity": "sha512-bBzDwTvrwkpW9vFmK7u5tWf2aT1PAHbK7KMr9cXkMpaZy8ct39IP/4hIQLWPAEQBlTc7GvoRhgnDpwLMwJTDpg==", "license": "MIT" }, "node_modules/@revenuecat/purchases-js-hybrid-mappings": { - "version": "17.7.0", - "resolved": "https://mirrors.tencent.com/npm/@revenuecat/purchases-js-hybrid-mappings/-/purchases-js-hybrid-mappings-17.7.0.tgz", - "integrity": "sha512-254jmgsCxn7Om49gdRQmh8rNVPsEjpMcKmrIwiR8D4Yfcch4bWUK23bDNvFR29Ygen9ctBkGc+CklmmKNQMQYw==", + "version": "17.10.0", + "resolved": "https://mirrors.tencent.com/npm/@revenuecat/purchases-js-hybrid-mappings/-/purchases-js-hybrid-mappings-17.10.0.tgz", + "integrity": "sha512-oSofBs7oGxX2N9/CyWpAcvlXvUe8VdS5J2J4SWHWCeCohgkOI4xsAPrbisXYPiNaILLFt/slD1mqL3sawzLBug==", "license": "MIT", "dependencies": { - "@revenuecat/purchases-js": "1.14.0" + "@revenuecat/purchases-js": "1.15.0" } }, "node_modules/@revenuecat/purchases-typescript-internal": { - "version": "17.7.0", - "resolved": "https://mirrors.tencent.com/npm/@revenuecat/purchases-typescript-internal/-/purchases-typescript-internal-17.7.0.tgz", - "integrity": "sha512-CGyNcupvNEnyiZTRsD98VOLRxsp6cr1NYIL8XKDO2EoSDBaDuDXyHTADbPEf0lRW2qYqwmQKZFJ61Vwl+0YiWw==", + "version": "17.10.0", + "resolved": "https://mirrors.tencent.com/npm/@revenuecat/purchases-typescript-internal/-/purchases-typescript-internal-17.10.0.tgz", + "integrity": "sha512-ILcAS3ixsij/06sy5ZtA62R3oscYVB+0fGCMmfgta3zrY5gM5dBto5YzSerSL57icSJhz2RbHYlGsUknQzJ1pQ==", "license": "MIT" }, "node_modules/@rtsao/scc": { @@ -4109,128 +3759,6 @@ "node": ">=10" } }, - "node_modules/@sentry/cli-linux-arm": { - "version": "2.53.0", - "resolved": "https://mirrors.tencent.com/npm/@sentry/cli-linux-arm/-/cli-linux-arm-2.53.0.tgz", - "integrity": "sha512-NdRzQ15Ht83qG0/Lyu11ciy/Hu/oXbbtJUgwzACc7bWvHQA8xEwTsehWexqn1529Kfc5EjuZ0Wmj3MHmp+jOWw==", - "cpu": [ - "arm" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "linux", - "freebsd", - "android" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-linux-arm64": { - "version": "2.53.0", - "resolved": "https://mirrors.tencent.com/npm/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.53.0.tgz", - "integrity": "sha512-xY/CZ1dVazsSCvTXzKpAgXaRqfljVfdrFaYZRUaRPf1ZJRGa3dcrivoOhSIeG/p5NdYtMvslMPY9Gm2MT0M83A==", - "cpu": [ - "arm64" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "linux", - "freebsd", - "android" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-linux-i686": { - "version": "2.53.0", - "resolved": "https://mirrors.tencent.com/npm/@sentry/cli-linux-i686/-/cli-linux-i686-2.53.0.tgz", - "integrity": "sha512-0REmBibGAB4jtqt9S6JEsFF4QybzcXHPcHtJjgMi5T0ueh952uG9wLzjSxQErCsxTKF+fL8oG0Oz5yKBuCwCCQ==", - "cpu": [ - "x86", - "ia32" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "linux", - "freebsd", - "android" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-linux-x64": { - "version": "2.53.0", - "resolved": "https://mirrors.tencent.com/npm/@sentry/cli-linux-x64/-/cli-linux-x64-2.53.0.tgz", - "integrity": "sha512-9UGJL+Vy5N/YL1EWPZ/dyXLkShlNaDNrzxx4G7mTS9ywjg+BIuemo6rnN7w43K1NOjObTVO6zY0FwumJ1pCyLg==", - "cpu": [ - "x64" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "linux", - "freebsd", - "android" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-win32-arm64": { - "version": "2.53.0", - "resolved": "https://mirrors.tencent.com/npm/@sentry/cli-win32-arm64/-/cli-win32-arm64-2.53.0.tgz", - "integrity": "sha512-G1kjOjrjMBY20rQcJV2GA8KQE74ufmROCDb2GXYRfjvb1fKAsm4Oh8N5+Tqi7xEHdjQoLPkE4CNW0aH68JSUDQ==", - "cpu": [ - "arm64" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-win32-i686": { - "version": "2.53.0", - "resolved": "https://mirrors.tencent.com/npm/@sentry/cli-win32-i686/-/cli-win32-i686-2.53.0.tgz", - "integrity": "sha512-qbGTZUzesuUaPtY9rPXdNfwLqOZKXrJRC1zUFn52hdo6B+Dmv0m/AHwRVFHZP53Tg1NCa8bDei2K/uzRN0dUZw==", - "cpu": [ - "x86", - "ia32" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-win32-x64": { - "version": "2.53.0", - "resolved": "https://mirrors.tencent.com/npm/@sentry/cli-win32-x64/-/cli-win32-x64-2.53.0.tgz", - "integrity": "sha512-1TXYxYHtwgUq5KAJt3erRzzUtPqg7BlH9T7MdSPHjJatkrr/kwZqnVe2H6Arr/5NH891vOlIeSPHBdgJUAD69g==", - "cpu": [ - "x64" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, "node_modules/@sentry/cli/node_modules/agent-base": { "version": "6.0.2", "resolved": "https://mirrors.tencent.com/npm/agent-base/-/agent-base-6.0.2.tgz", @@ -4357,17 +3885,6 @@ "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", "license": "MIT" }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", - "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -4493,9 +4010,9 @@ } }, "node_modules/@types/react": { - "version": "19.1.13", - "resolved": "https://mirrors.tencent.com/npm/@types/react/-/react-19.1.13.tgz", - "integrity": "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==", + "version": "19.1.17", + "resolved": "https://mirrors.tencent.com/npm/@types/react/-/react-19.1.17.tgz", + "integrity": "sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==", "license": "MIT", "dependencies": { "csstype": "^3.0.2" @@ -4822,34 +4339,6 @@ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "license": "ISC" }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@unrs/resolver-binding-darwin-arm64": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", @@ -4864,233 +4353,6 @@ "darwin" ] }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@urql/core": { "version": "5.2.0", "resolved": "https://mirrors.tencent.com/npm/@urql/core/-/core-5.2.0.tgz", @@ -5137,7 +4399,7 @@ }, "node_modules/accepts": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "resolved": "https://mirrors.tencent.com/npm/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", "dependencies": { @@ -5172,7 +4434,7 @@ }, "node_modules/agent-base": { "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/agent-base/-/agent-base-7.1.4.tgz", "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", "engines": { @@ -5661,9 +4923,9 @@ } }, "node_modules/babel-plugin-react-compiler": { - "version": "19.1.0-rc.3", - "resolved": "https://mirrors.tencent.com/npm/babel-plugin-react-compiler/-/babel-plugin-react-compiler-19.1.0-rc.3.tgz", - "integrity": "sha512-mjRn69WuTz4adL0bXGx8Rsyk1086zFJeKmes6aK0xPuK3aaXmDJdLHqwKKMrpm6KAI1MCoUK72d2VeqQbu8YIA==", + "version": "1.0.0", + "resolved": "https://mirrors.tencent.com/npm/babel-plugin-react-compiler/-/babel-plugin-react-compiler-1.0.0.tgz", + "integrity": "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==", "license": "MIT", "dependencies": { "@babel/types": "^7.26.0" @@ -5720,9 +4982,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "54.0.3", - "resolved": "https://mirrors.tencent.com/npm/babel-preset-expo/-/babel-preset-expo-54.0.3.tgz", - "integrity": "sha512-zC6g96Mbf1bofnCI8yI0VKAp8/ER/gpfTsWOpQvStbHU+E4jFZ294n3unW8Hf6nNP4NoeNq9Zc6Prp0vwhxbow==", + "version": "54.0.4", + "resolved": "https://mirrors.tencent.com/npm/babel-preset-expo/-/babel-preset-expo-54.0.4.tgz", + "integrity": "sha512-0/1/xh2m/G4FSvIbJYcu5TGPfDrHRqmIDoAFm6zWSEuWyCDagZ8gjjTTJqxdNJHvsKQl65PzeXd6Q5k6tF57wA==", "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", @@ -5741,7 +5003,7 @@ "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.0", "@react-native/babel-preset": "0.81.4", - "babel-plugin-react-compiler": "^19.1.0-rc.2", + "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-native-web": "~0.21.0", "babel-plugin-syntax-hermes-parser": "^0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", @@ -5810,6 +5072,14 @@ ], "license": "MIT" }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.16", + "resolved": "https://mirrors.tencent.com/npm/baseline-browser-mapping/-/baseline-browser-mapping-2.8.16.tgz", + "integrity": "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/better-opn": { "version": "3.0.2", "resolved": "https://mirrors.tencent.com/npm/better-opn/-/better-opn-3.0.2.tgz", @@ -5826,6 +5096,7 @@ "version": "8.4.2", "resolved": "https://mirrors.tencent.com/npm/open/-/open-8.4.2.tgz", "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -5896,9 +5167,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.4", - "resolved": "https://mirrors.tencent.com/npm/browserslist/-/browserslist-4.25.4.tgz", - "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==", + "version": "4.26.3", + "resolved": "https://mirrors.tencent.com/npm/browserslist/-/browserslist-4.26.3.tgz", + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", "funding": [ { "type": "opencollective", @@ -5915,9 +5186,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001737", - "electron-to-chromium": "^1.5.211", - "node-releases": "^2.0.19", + "baseline-browser-mapping": "^2.8.9", + "caniuse-lite": "^1.0.30001746", + "electron-to-chromium": "^1.5.227", + "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, "bin": { @@ -5962,7 +5234,7 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, @@ -6024,7 +5296,7 @@ }, "node_modules/caller-callsite": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/caller-callsite/-/caller-callsite-2.0.0.tgz", "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", "license": "MIT", "dependencies": { @@ -6036,7 +5308,7 @@ }, "node_modules/caller-callsite/node_modules/callsites": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/callsites/-/callsites-2.0.0.tgz", "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", "license": "MIT", "engines": { @@ -6045,7 +5317,7 @@ }, "node_modules/caller-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/caller-path/-/caller-path-2.0.0.tgz", "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", "license": "MIT", "dependencies": { @@ -6083,9 +5355,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001741", - "resolved": "https://mirrors.tencent.com/npm/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz", - "integrity": "sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==", + "version": "1.0.30001750", + "resolved": "https://mirrors.tencent.com/npm/caniuse-lite/-/caniuse-lite-1.0.30001750.tgz", + "integrity": "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==", "funding": [ { "type": "opencollective", @@ -6149,7 +5421,7 @@ }, "node_modules/chrome-launcher": { "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/chrome-launcher/-/chrome-launcher-0.15.2.tgz", "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "license": "Apache-2.0", "dependencies": { @@ -6167,7 +5439,7 @@ }, "node_modules/chromium-edge-launcher": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", "license": "Apache-2.0", "dependencies": { @@ -6198,6 +5470,7 @@ "version": "2.1.0", "resolved": "https://mirrors.tencent.com/npm/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "license": "MIT", "dependencies": { "restore-cursor": "^2.0.0" }, @@ -6332,6 +5605,7 @@ "version": "2.0.18", "resolved": "https://mirrors.tencent.com/npm/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -6361,6 +5635,7 @@ "version": "2.6.9", "resolved": "https://mirrors.tencent.com/npm/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -6388,7 +5663,7 @@ }, "node_modules/connect": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/connect/-/connect-3.7.0.tgz", "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "license": "MIT", "dependencies": { @@ -6403,7 +5678,7 @@ }, "node_modules/connect/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "resolved": "https://mirrors.tencent.com/npm/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { @@ -6412,7 +5687,7 @@ }, "node_modules/connect/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, @@ -6423,12 +5698,12 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.45.1", - "resolved": "https://mirrors.tencent.com/npm/core-js-compat/-/core-js-compat-3.45.1.tgz", - "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", + "version": "3.46.0", + "resolved": "https://mirrors.tencent.com/npm/core-js-compat/-/core-js-compat-3.46.0.tgz", + "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", "license": "MIT", "dependencies": { - "browserslist": "^4.25.3" + "browserslist": "^4.26.3" }, "funding": { "type": "opencollective", @@ -6437,7 +5712,7 @@ }, "node_modules/cosmiconfig": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/cosmiconfig/-/cosmiconfig-5.2.1.tgz", "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "license": "MIT", "dependencies": { @@ -6452,7 +5727,7 @@ }, "node_modules/cosmiconfig/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "resolved": "https://mirrors.tencent.com/npm/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "license": "MIT", "dependencies": { @@ -6461,7 +5736,7 @@ }, "node_modules/cosmiconfig/node_modules/import-fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/import-fresh/-/import-fresh-2.0.0.tgz", "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", "license": "MIT", "dependencies": { @@ -6474,7 +5749,7 @@ }, "node_modules/cosmiconfig/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "license": "MIT", "dependencies": { @@ -6487,7 +5762,7 @@ }, "node_modules/cosmiconfig/node_modules/resolve-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "license": "MIT", "engines": { @@ -6778,7 +6053,7 @@ }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { @@ -6798,7 +6073,7 @@ }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", "engines": { @@ -6807,9 +6082,9 @@ } }, "node_modules/detect-libc": { - "version": "2.1.0", - "resolved": "https://mirrors.tencent.com/npm/detect-libc/-/detect-libc-2.1.0.tgz", - "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", + "version": "2.1.2", + "resolved": "https://mirrors.tencent.com/npm/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "license": "Apache-2.0", "engines": { "node": ">=8" @@ -6938,14 +6213,15 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.214", - "resolved": "https://mirrors.tencent.com/npm/electron-to-chromium/-/electron-to-chromium-1.5.214.tgz", - "integrity": "sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q==" + "version": "1.5.234", + "resolved": "https://mirrors.tencent.com/npm/electron-to-chromium/-/electron-to-chromium-1.5.234.tgz", + "integrity": "sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==", + "license": "ISC" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -6955,7 +6231,7 @@ }, "node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", "engines": { @@ -6984,9 +6260,9 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://mirrors.tencent.com/npm/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" @@ -6994,7 +6270,7 @@ }, "node_modules/error-stack-parser": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/error-stack-parser/-/error-stack-parser-2.1.4.tgz", "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "license": "MIT", "dependencies": { @@ -7186,7 +6462,7 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "resolved": "https://mirrors.tencent.com/npm/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, @@ -7203,20 +6479,20 @@ } }, "node_modules/eslint": { - "version": "9.35.0", - "resolved": "https://mirrors.tencent.com/npm/eslint/-/eslint-9.35.0.tgz", - "integrity": "sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==", + "version": "9.37.0", + "resolved": "https://mirrors.tencent.com/npm/eslint/-/eslint-9.37.0.tgz", + "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", + "@eslint/config-helpers": "^0.4.0", + "@eslint/core": "^0.16.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.35.0", - "@eslint/plugin-kit": "^0.3.5", + "@eslint/js": "9.37.0", + "@eslint/plugin-kit": "^0.4.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -7616,7 +6892,7 @@ }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { @@ -7639,29 +6915,29 @@ "license": "MIT" }, "node_modules/expo": { - "version": "54.0.10", - "resolved": "https://mirrors.tencent.com/npm/expo/-/expo-54.0.10.tgz", - "integrity": "sha512-49+IginEoKC+g125ZlRvUYNl9jKjjHcDiDnQvejNWlMQ0LtcFIWiFad/PLjmi7YqF/0rj9u3FNxqM6jNP16O0w==", + "version": "54.0.13", + "resolved": "https://mirrors.tencent.com/npm/expo/-/expo-54.0.13.tgz", + "integrity": "sha512-F1puKXzw8ESnsbvaKdXtcIiyYLQ2kUHqP8LuhgtJS1wm6w55VhtOPg8yl/0i8kPbTA0YfD+KYdXjSfhPXgUPxw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "54.0.8", - "@expo/config": "~12.0.9", - "@expo/config-plugins": "~54.0.1", + "@expo/cli": "54.0.11", + "@expo/config": "~12.0.10", + "@expo/config-plugins": "~54.0.2", "@expo/devtools": "0.1.7", "@expo/fingerprint": "0.15.1", "@expo/metro": "~54.0.0", - "@expo/metro-config": "54.0.5", + "@expo/metro-config": "54.0.6", "@expo/vector-icons": "^15.0.2", "@ungap/structured-clone": "^1.3.0", "babel-preset-expo": "~54.0.3", "expo-asset": "~12.0.9", "expo-constants": "~18.0.9", - "expo-file-system": "~19.0.15", - "expo-font": "~14.0.8", + "expo-file-system": "~19.0.17", + "expo-font": "~14.0.9", "expo-keep-awake": "~15.0.7", - "expo-modules-autolinking": "3.0.13", - "expo-modules-core": "3.0.18", + "expo-modules-autolinking": "3.0.15", + "expo-modules-core": "3.0.21", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", "whatwg-url-without-unicode": "8.0.0-3" @@ -7782,9 +7058,9 @@ } }, "node_modules/expo-file-system": { - "version": "19.0.15", - "resolved": "https://mirrors.tencent.com/npm/expo-file-system/-/expo-file-system-19.0.15.tgz", - "integrity": "sha512-sRLW+3PVJDiuoCE2LuteHhC7OxPjh1cfqLylf1YG1TDEbbQXnzwjfsKeRm6dslEPZLkMWfSLYIrVbnuq5mF7kQ==", + "version": "19.0.17", + "resolved": "https://mirrors.tencent.com/npm/expo-file-system/-/expo-file-system-19.0.17.tgz", + "integrity": "sha512-WwaS01SUFrxBnExn87pg0sCTJjZpf2KAOzfImG0o8yhkU7fbYpihpl/oocXBEsNbj58a8hVt1Y4CVV5c1tzu/g==", "license": "MIT", "peerDependencies": { "expo": "*", @@ -7792,9 +7068,9 @@ } }, "node_modules/expo-font": { - "version": "14.0.8", - "resolved": "https://mirrors.tencent.com/npm/expo-font/-/expo-font-14.0.8.tgz", - "integrity": "sha512-bTUHaJWRZ7ywP8dg3f+wfOwv6RwMV3mWT2CDUIhsK70GjNGlCtiWOCoHsA5Od/esPaVxqc37cCBvQGQRFStRlA==", + "version": "14.0.9", + "resolved": "https://mirrors.tencent.com/npm/expo-font/-/expo-font-14.0.9.tgz", + "integrity": "sha512-xCoQbR/36qqB6tew/LQ6GWICpaBmHLhg/Loix5Rku/0ZtNaXMJv08M9o1AcrdiGTn/Xf/BnLu6DgS45cWQEHZg==", "license": "MIT", "dependencies": { "fontfaceobserver": "^2.1.0" @@ -7826,9 +7102,9 @@ } }, "node_modules/expo-image": { - "version": "3.0.8", - "resolved": "https://mirrors.tencent.com/npm/expo-image/-/expo-image-3.0.8.tgz", - "integrity": "sha512-L83fTHVjvE5hACxUXPk3dpABteI/IypeqxKMeOAAcT2eB/jbqT53ddsYKEvKAP86eoByQ7+TCtw9AOUizEtaTQ==", + "version": "3.0.9", + "resolved": "https://mirrors.tencent.com/npm/expo-image/-/expo-image-3.0.9.tgz", + "integrity": "sha512-GkPIjeqrODMBdpbRWOzbwiq8ztxjgq1rdZrnqwt/pzQavgXPlr4rW/7aigue9Jm5t5vebhMNAuc1A/XIXXqpcA==", "license": "MIT", "peerDependencies": { "expo": "*", @@ -7844,7 +7120,7 @@ }, "node_modules/expo-image-loader": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/expo-image-loader/-/expo-image-loader-6.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/expo-image-loader/-/expo-image-loader-6.0.0.tgz", "integrity": "sha512-nKs/xnOGw6ACb4g26xceBD57FKLFkSwEUTDXEDF3Gtcu3MqF3ZIYd3YM+sSb1/z9AKV1dYT7rMSGVNgsveXLIQ==", "license": "MIT", "peerDependencies": { @@ -7899,9 +7175,9 @@ } }, "node_modules/expo-modules-autolinking": { - "version": "3.0.13", - "resolved": "https://mirrors.tencent.com/npm/expo-modules-autolinking/-/expo-modules-autolinking-3.0.13.tgz", - "integrity": "sha512-58WnM15ESTyT2v93Rba7jplXtGvh5cFbxqUCi2uTSpBf3nndDRItLzBQaoWBzAvNUhpC2j1bye7Dn/E+GJFXmw==", + "version": "3.0.15", + "resolved": "https://mirrors.tencent.com/npm/expo-modules-autolinking/-/expo-modules-autolinking-3.0.15.tgz", + "integrity": "sha512-B6c+x664ImrWd+PknEy5454gtY6P0cMxj4P50fvLYP4HimbYj9SzwoHqZ/Rxh9NwxnUkT2nappk/USYIcPoS/A==", "license": "MIT", "dependencies": { "@expo/spawn-async": "^1.7.2", @@ -7916,9 +7192,9 @@ } }, "node_modules/expo-modules-core": { - "version": "3.0.18", - "resolved": "https://mirrors.tencent.com/npm/expo-modules-core/-/expo-modules-core-3.0.18.tgz", - "integrity": "sha512-9JPnjlXEFaq/uACZ7I4wb/RkgPYCEsfG75UKMvfl7P7rkymtpRGYj8/gTL2KId8Xt1fpmIPOF57U8tKamjtjXg==", + "version": "3.0.21", + "resolved": "https://mirrors.tencent.com/npm/expo-modules-core/-/expo-modules-core-3.0.21.tgz", + "integrity": "sha512-KJRzm0FEt/lfPNG+C6UUq+ta9PO10QPwY1HGCNkzPiRCIMJmQP4xRYK4Z7AxiYEYsPqr5OdjRW55kGZ4c5pzgA==", "license": "MIT", "dependencies": { "invariant": "^2.2.4" @@ -7929,9 +7205,9 @@ } }, "node_modules/expo-notifications": { - "version": "0.32.11", - "resolved": "https://mirrors.tencent.com/npm/expo-notifications/-/expo-notifications-0.32.11.tgz", - "integrity": "sha512-4rLWC9Q4B7aQywXn9cKAlNY4p00CYKLJ23qZ0Pp/whkX0NxmI4MwJ20YhreV08gjHTTTWHpYU7jqYWpsjtPIxA==", + "version": "0.32.12", + "resolved": "https://mirrors.tencent.com/npm/expo-notifications/-/expo-notifications-0.32.12.tgz", + "integrity": "sha512-FVJ5W4rOpKvmrLJ1Sd5pxiVTV4a7ApgTlKro+E5X8M2TBbXmEVOjs09klzdalXTjlzmU/Gu8aRw9xr7Ea/gZdw==", "license": "MIT", "dependencies": { "@expo/image-utils": "^0.8.7", @@ -7940,7 +7216,7 @@ "assert": "^2.0.0", "badgin": "^1.1.5", "expo-application": "~7.0.7", - "expo-constants": "~18.0.8" + "expo-constants": "~18.0.9" }, "peerDependencies": { "expo": "*", @@ -7963,14 +7239,13 @@ } }, "node_modules/expo-router": { - "version": "6.0.8", - "resolved": "https://mirrors.tencent.com/npm/expo-router/-/expo-router-6.0.8.tgz", - "integrity": "sha512-cx6vFvBrfPNHpNbN2ij2mF5JKE4JXyq+dJVmWNqt7JplA0aohOOKXS/KQ9vQy88HpnrcJMuYqUNHp44aWyce7g==", + "version": "6.0.12", + "resolved": "https://mirrors.tencent.com/npm/expo-router/-/expo-router-6.0.12.tgz", + "integrity": "sha512-GBfMHAbHoPv7aCfHOEgFNxcadw4euPyI/SqHNNtw+Sm+JtvauHP34wi7Bg25JxatHQ8EdhxAj6w0D8D6QRnayg==", "license": "MIT", "dependencies": { "@expo/metro-runtime": "^6.1.2", "@expo/schema-utils": "^0.1.7", - "@expo/server": "^0.7.5", "@radix-ui/react-slot": "1.2.0", "@radix-ui/react-tabs": "^1.1.12", "@react-navigation/bottom-tabs": "^7.4.0", @@ -7979,6 +7254,7 @@ "client-only": "^0.0.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", + "expo-server": "^1.0.1", "fast-deep-equal": "^3.1.3", "invariant": "^2.2.4", "nanoid": "^3.3.8", @@ -8033,6 +7309,176 @@ } } }, + "node_modules/expo-router/node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/expo-router/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/expo-router/node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/expo-router/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/expo-router/node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/expo-router/node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/expo-router/node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/expo-router/node_modules/semver": { "version": "7.6.3", "resolved": "https://mirrors.tencent.com/npm/semver/-/semver-7.6.3.tgz", @@ -8045,6 +7491,15 @@ "node": ">=10" } }, + "node_modules/expo-server": { + "version": "1.0.1", + "resolved": "https://mirrors.tencent.com/npm/expo-server/-/expo-server-1.0.1.tgz", + "integrity": "sha512-J3JlpzNXOkkr4BbapTrcv6klBQcw6NzrBBVIU7qkNE2eU3U1on9rp27wi0+cihjG/QgxSIqQVkrga5z3HWnH0A==", + "license": "MIT", + "engines": { + "node": ">=20.16.0" + } + }, "node_modules/expo-splash-screen": { "version": "31.0.10", "resolved": "https://mirrors.tencent.com/npm/expo-splash-screen/-/expo-splash-screen-31.0.10.tgz", @@ -8131,9 +7586,9 @@ } }, "node_modules/expo-web-browser": { - "version": "15.0.7", - "resolved": "https://mirrors.tencent.com/npm/expo-web-browser/-/expo-web-browser-15.0.7.tgz", - "integrity": "sha512-eXnfO3FQ2WthTA8uEPNJ7SDRfPaLIU/P2k082HGEYIHAFZMwh2o9Wo+SDVytO3E95TAv1qwhggUjOrczYzxteQ==", + "version": "15.0.8", + "resolved": "https://mirrors.tencent.com/npm/expo-web-browser/-/expo-web-browser-15.0.8.tgz", + "integrity": "sha512-gn+Y2ABQr6/EvFN/XSjTuzwsSPLU1vNVVV0wNe4xXkcSnYGdHxt9kHxs9uLfoCyPByoaGF4VxzAhHIMI7yDcSg==", "license": "MIT", "peerDependencies": { "expo": "*", @@ -8141,28 +7596,27 @@ } }, "node_modules/expo/node_modules/@expo/cli": { - "version": "54.0.8", - "resolved": "https://mirrors.tencent.com/npm/@expo/cli/-/cli-54.0.8.tgz", - "integrity": "sha512-bRJXvtjgxpyElmJuKLotWyIW5j9a2K3rGUjd2A8LRcFimrZp0wwuKPQjlUK0sFNbU7zHWfxubNq/B+UkUNkCxw==", + "version": "54.0.11", + "resolved": "https://mirrors.tencent.com/npm/@expo/cli/-/cli-54.0.11.tgz", + "integrity": "sha512-ik9p8+JTOuVXS462+vFPV0qnWRBXIR1bPmoVKO8xQWw6Yk+K6UlU2GrM2ch7kA3JlSJE/MGsNyN8CB0zFZbVbQ==", "license": "MIT", "dependencies": { "@0no-co/graphql.web": "^1.0.8", "@expo/code-signing-certificates": "^0.0.5", - "@expo/config": "~12.0.9", - "@expo/config-plugins": "~54.0.1", + "@expo/config": "~12.0.10", + "@expo/config-plugins": "~54.0.2", "@expo/devcert": "^1.1.2", "@expo/env": "~2.0.7", "@expo/image-utils": "^0.8.7", "@expo/json-file": "^10.0.7", "@expo/mcp-tunnel": "~0.0.7", "@expo/metro": "~54.0.0", - "@expo/metro-config": "~54.0.5", + "@expo/metro-config": "~54.0.6", "@expo/osascript": "^2.3.7", "@expo/package-manager": "^1.9.8", "@expo/plist": "^0.4.7", - "@expo/prebuild-config": "^54.0.3", + "@expo/prebuild-config": "^54.0.5", "@expo/schema-utils": "^0.1.7", - "@expo/server": "^0.7.5", "@expo/spawn-async": "^1.7.2", "@expo/ws-tunnel": "^1.0.1", "@expo/xcpretty": "^4.3.0", @@ -8180,6 +7634,7 @@ "connect": "^3.7.0", "debug": "^4.3.4", "env-editor": "^0.4.1", + "expo-server": "^1.0.1", "freeport-async": "^2.0.0", "getenv": "^2.0.0", "glob": "^10.4.2", @@ -8241,7 +7696,6 @@ "version": "9.0.5", "resolved": "https://mirrors.tencent.com/npm/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8253,9 +7707,10 @@ } }, "node_modules/expo/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://mirrors.tencent.com/npm/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://mirrors.tencent.com/npm/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -8285,9 +7740,9 @@ } }, "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "version": "3.1.3", + "resolved": "https://mirrors.tencent.com/npm/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", "license": "Apache-2.0" }, "node_modules/fast-deep-equal": { @@ -8454,7 +7909,7 @@ }, "node_modules/finalhandler": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "license": "MIT", "dependencies": { @@ -8472,7 +7927,7 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "resolved": "https://mirrors.tencent.com/npm/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { @@ -8481,7 +7936,7 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, @@ -8524,13 +7979,13 @@ }, "node_modules/flow-enums-runtime": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "resolved": "https://mirrors.tencent.com/npm/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", "license": "MIT" }, "node_modules/fontfaceobserver": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", "license": "BSD-2-Clause" }, @@ -8576,7 +8031,7 @@ }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { @@ -9029,7 +8484,8 @@ "node_modules/hosted-git-info/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://mirrors.tencent.com/npm/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/htmlparser2": { "version": "7.2.0", @@ -9042,6 +8498,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.2", @@ -9053,6 +8510,7 @@ "version": "1.4.1", "resolved": "https://mirrors.tencent.com/npm/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -9066,6 +8524,7 @@ "version": "2.2.0", "resolved": "https://mirrors.tencent.com/npm/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -9074,6 +8533,7 @@ "version": "4.3.1", "resolved": "https://mirrors.tencent.com/npm/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -9088,6 +8548,7 @@ "version": "2.8.0", "resolved": "https://mirrors.tencent.com/npm/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -9101,6 +8562,7 @@ "version": "3.0.1", "resolved": "https://mirrors.tencent.com/npm/entities/-/entities-3.0.1.tgz", "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -9110,7 +8572,7 @@ }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { @@ -9126,7 +8588,7 @@ }, "node_modules/http-errors/node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { @@ -9135,7 +8597,7 @@ }, "node_modules/https-proxy-agent": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "resolved": "https://mirrors.tencent.com/npm/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { @@ -9183,7 +8645,7 @@ }, "node_modules/image-size": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/image-size/-/image-size-1.2.1.tgz", "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", "license": "MIT", "dependencies": { @@ -9333,7 +8795,7 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "license": "MIT" }, @@ -9477,7 +8939,7 @@ }, "node_modules/is-directory": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/is-directory/-/is-directory-0.3.1.tgz", "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", "license": "MIT", "engines": { @@ -9486,7 +8948,7 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "license": "MIT", "bin": { @@ -9787,7 +9249,7 @@ }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "license": "MIT", "dependencies": { @@ -9887,7 +9349,7 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "resolved": "https://mirrors.tencent.com/npm/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "license": "MIT", "engines": { @@ -9993,7 +9455,7 @@ }, "node_modules/jest-validate": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "license": "MIT", "dependencies": { @@ -10010,7 +9472,7 @@ }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "license": "MIT", "engines": { @@ -10076,7 +9538,7 @@ }, "node_modules/jsc-safe-url": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", "license": "0BSD" }, @@ -10101,7 +9563,7 @@ }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "license": "MIT" }, @@ -10198,7 +9660,7 @@ }, "node_modules/leven": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "license": "MIT", "engines": { @@ -10221,7 +9683,7 @@ }, "node_modules/lighthouse-logger": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", "license": "Apache-2.0", "dependencies": { @@ -10231,7 +9693,7 @@ }, "node_modules/lighthouse-logger/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "resolved": "https://mirrors.tencent.com/npm/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { @@ -10240,14 +9702,14 @@ }, "node_modules/lighthouse-logger/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/lightningcss": { - "version": "1.30.1", - "resolved": "https://mirrors.tencent.com/npm/lightningcss/-/lightningcss-1.30.1.tgz", - "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "version": "1.30.2", + "resolved": "https://mirrors.tencent.com/npm/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", "license": "MPL-2.0", "dependencies": { "detect-libc": "^2.0.3" @@ -10260,22 +9722,43 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "lightningcss-darwin-arm64": "1.30.1", - "lightningcss-darwin-x64": "1.30.1", - "lightningcss-freebsd-x64": "1.30.1", - "lightningcss-linux-arm-gnueabihf": "1.30.1", - "lightningcss-linux-arm64-gnu": "1.30.1", - "lightningcss-linux-arm64-musl": "1.30.1", - "lightningcss-linux-x64-gnu": "1.30.1", - "lightningcss-linux-x64-musl": "1.30.1", - "lightningcss-win32-arm64-msvc": "1.30.1", - "lightningcss-win32-x64-msvc": "1.30.1" + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://mirrors.tencent.com/npm/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-darwin-arm64": { - "version": "1.30.1", - "resolved": "https://mirrors.tencent.com/npm/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", - "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "version": "1.30.2", + "resolved": "https://mirrors.tencent.com/npm/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", "cpu": [ "arm64" ], @@ -10293,9 +9776,9 @@ } }, "node_modules/lightningcss-darwin-x64": { - "version": "1.30.1", - "resolved": "https://mirrors.tencent.com/npm/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", - "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "version": "1.30.2", + "resolved": "https://mirrors.tencent.com/npm/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", "cpu": [ "x64" ], @@ -10313,9 +9796,9 @@ } }, "node_modules/lightningcss-freebsd-x64": { - "version": "1.30.1", - "resolved": "https://mirrors.tencent.com/npm/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", - "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "version": "1.30.2", + "resolved": "https://mirrors.tencent.com/npm/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", "cpu": [ "x64" ], @@ -10333,9 +9816,9 @@ } }, "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.30.1", - "resolved": "https://mirrors.tencent.com/npm/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", - "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "version": "1.30.2", + "resolved": "https://mirrors.tencent.com/npm/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", "cpu": [ "arm" ], @@ -10353,9 +9836,9 @@ } }, "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.30.1", - "resolved": "https://mirrors.tencent.com/npm/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", - "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "version": "1.30.2", + "resolved": "https://mirrors.tencent.com/npm/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", "cpu": [ "arm64" ], @@ -10373,9 +9856,9 @@ } }, "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.30.1", - "resolved": "https://mirrors.tencent.com/npm/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", - "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "version": "1.30.2", + "resolved": "https://mirrors.tencent.com/npm/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", "cpu": [ "arm64" ], @@ -10393,9 +9876,9 @@ } }, "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.30.1", - "resolved": "https://mirrors.tencent.com/npm/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", - "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "version": "1.30.2", + "resolved": "https://mirrors.tencent.com/npm/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", "cpu": [ "x64" ], @@ -10413,9 +9896,9 @@ } }, "node_modules/lightningcss-linux-x64-musl": { - "version": "1.30.1", - "resolved": "https://mirrors.tencent.com/npm/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", - "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "version": "1.30.2", + "resolved": "https://mirrors.tencent.com/npm/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", "cpu": [ "x64" ], @@ -10433,9 +9916,9 @@ } }, "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.30.1", - "resolved": "https://mirrors.tencent.com/npm/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", - "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "version": "1.30.2", + "resolved": "https://mirrors.tencent.com/npm/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", "cpu": [ "arm64" ], @@ -10453,9 +9936,9 @@ } }, "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.30.1", - "resolved": "https://mirrors.tencent.com/npm/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", - "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "version": "1.30.2", + "resolved": "https://mirrors.tencent.com/npm/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", "cpu": [ "x64" ], @@ -10523,7 +10006,7 @@ }, "node_modules/lodash.throttle": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/lodash.throttle/-/lodash.throttle-4.1.1.tgz", "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", "license": "MIT" }, @@ -10569,6 +10052,7 @@ "version": "1.9.3", "resolved": "https://mirrors.tencent.com/npm/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -10576,7 +10060,8 @@ "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.3", "resolved": "https://mirrors.tencent.com/npm/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" }, "node_modules/log-symbols/node_modules/escape-string-regexp": { "version": "1.0.5", @@ -10690,7 +10175,7 @@ }, "node_modules/marky": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/marky/-/marky-1.3.0.tgz", "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==", "license": "Apache-2.0" }, @@ -10750,7 +10235,7 @@ }, "node_modules/metro": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro/-/metro-0.83.1.tgz", "integrity": "sha512-UGKepmTxoGD4HkQV8YWvpvwef7fUujNtTgG4Ygf7m/M0qjvb9VuDmAsEU+UdriRX7F61pnVK/opz89hjKlYTXA==", "license": "MIT", "dependencies": { @@ -10804,7 +10289,7 @@ }, "node_modules/metro-babel-transformer": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-babel-transformer/-/metro-babel-transformer-0.83.1.tgz", "integrity": "sha512-r3xAD3964E8dwDBaZNSO2aIIvWXjIK80uO2xo0/pi3WI8XWT9h5SCjtGWtMtE5PRWw+t20TN0q1WMRsjvhC1rQ==", "license": "MIT", "dependencies": { @@ -10819,7 +10304,7 @@ }, "node_modules/metro-cache": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-cache/-/metro-cache-0.83.1.tgz", "integrity": "sha512-7N/Ad1PHa1YMWDNiyynTPq34Op2qIE68NWryGEQ4TSE3Zy6a8GpsYnEEZE4Qi6aHgsE+yZHKkRczeBgxhnFIxQ==", "license": "MIT", "dependencies": { @@ -10834,7 +10319,7 @@ }, "node_modules/metro-cache-key": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-cache-key/-/metro-cache-key-0.83.1.tgz", "integrity": "sha512-ZUs+GD5CNeDLxx5UUWmfg26IL+Dnbryd+TLqTlZnDEgehkIa11kUSvgF92OFfJhONeXzV4rZDRGNXoo6JT+8Gg==", "license": "MIT", "dependencies": { @@ -10846,7 +10331,7 @@ }, "node_modules/metro-config": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-config/-/metro-config-0.83.1.tgz", "integrity": "sha512-HJhpZx3wyOkux/jeF1o7akFJzZFdbn6Zf7UQqWrvp7gqFqNulQ8Mju09raBgPmmSxKDl4LbbNeigkX0/nKY1QA==", "license": "MIT", "dependencies": { @@ -10865,7 +10350,7 @@ }, "node_modules/metro-core": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-core/-/metro-core-0.83.1.tgz", "integrity": "sha512-uVL1eAJcMFd2o2Q7dsbpg8COaxjZBBGaXqO2OHnivpCdfanraVL8dPmY6It9ZeqWLOihUKZ2yHW4b6soVCzH/Q==", "license": "MIT", "dependencies": { @@ -10879,7 +10364,7 @@ }, "node_modules/metro-file-map": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-file-map/-/metro-file-map-0.83.1.tgz", "integrity": "sha512-Yu429lnexKl44PttKw3nhqgmpBR+6UQ/tRaYcxPeEShtcza9DWakCn7cjqDTQZtWR2A8xSNv139izJMyQ4CG+w==", "license": "MIT", "dependencies": { @@ -10899,7 +10384,7 @@ }, "node_modules/metro-minify-terser": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-minify-terser/-/metro-minify-terser-0.83.1.tgz", "integrity": "sha512-kmooOxXLvKVxkh80IVSYO4weBdJDhCpg5NSPkjzzAnPJP43u6+usGXobkTWxxrAlq900bhzqKek4pBsUchlX6A==", "license": "MIT", "dependencies": { @@ -10912,7 +10397,7 @@ }, "node_modules/metro-resolver": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-resolver/-/metro-resolver-0.83.1.tgz", "integrity": "sha512-t8j46kiILAqqFS5RNa+xpQyVjULxRxlvMidqUswPEk5nQVNdlJslqizDm/Et3v/JKwOtQGkYAQCHxP1zGStR/g==", "license": "MIT", "dependencies": { @@ -10924,7 +10409,7 @@ }, "node_modules/metro-runtime": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-runtime/-/metro-runtime-0.83.1.tgz", "integrity": "sha512-3Ag8ZS4IwafL/JUKlaeM6/CbkooY+WcVeqdNlBG0m4S0Qz0om3rdFdy1y6fYBpl6AwXJwWeMuXrvZdMuByTcRA==", "license": "MIT", "dependencies": { @@ -10937,7 +10422,7 @@ }, "node_modules/metro-source-map": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-source-map/-/metro-source-map-0.83.1.tgz", "integrity": "sha512-De7Vbeo96fFZ2cqmI0fWwVJbtHIwPZv++LYlWSwzTiCzxBDJORncN0LcT48Vi2UlQLzXJg+/CuTAcy7NBVh69A==", "license": "MIT", "dependencies": { @@ -10958,7 +10443,7 @@ }, "node_modules/metro-symbolicate": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-symbolicate/-/metro-symbolicate-0.83.1.tgz", "integrity": "sha512-wPxYkONlq/Sv8Ji7vHEx5OzFouXAMQJjpcPW41ySKMLP/Ir18SsiJK2h4YkdKpYrTS1+0xf8oqF6nxCsT3uWtg==", "license": "MIT", "dependencies": { @@ -10978,7 +10463,7 @@ }, "node_modules/metro-transform-plugins": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-transform-plugins/-/metro-transform-plugins-0.83.1.tgz", "integrity": "sha512-1Y+I8oozXwhuS0qwC+ezaHXBf0jXW4oeYn4X39XWbZt9X2HfjodqY9bH9r6RUTsoiK7S4j8Ni2C91bUC+sktJQ==", "license": "MIT", "dependencies": { @@ -10995,7 +10480,7 @@ }, "node_modules/metro-transform-worker": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/metro-transform-worker/-/metro-transform-worker-0.83.1.tgz", "integrity": "sha512-owCrhPyUxdLgXEEEAL2b14GWTPZ2zYuab1VQXcfEy0sJE71iciD7fuMcrngoufh7e7UHDZ56q4ktXg8wgiYA1Q==", "license": "MIT", "dependencies": { @@ -11019,7 +10504,7 @@ }, "node_modules/metro/node_modules/ci-info": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "license": "MIT" }, @@ -11050,7 +10535,7 @@ }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", "bin": { @@ -11064,13 +10549,14 @@ "version": "1.54.0", "resolved": "https://mirrors.tencent.com/npm/mime-db/-/mime-db-1.54.0.tgz", "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "resolved": "https://mirrors.tencent.com/npm/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { @@ -11082,7 +10568,7 @@ }, "node_modules/mime-types/node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { @@ -11142,7 +10628,7 @@ }, "node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", "bin": { @@ -11212,7 +10698,7 @@ }, "node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "resolved": "https://mirrors.tencent.com/npm/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "license": "MIT", "engines": { @@ -11261,9 +10747,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.23", + "resolved": "https://mirrors.tencent.com/npm/node-releases/-/node-releases-2.0.23.tgz", + "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==", "license": "MIT" }, "node_modules/normalize-path": { @@ -11291,9 +10777,10 @@ } }, "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://mirrors.tencent.com/npm/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://mirrors.tencent.com/npm/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -11321,7 +10808,7 @@ }, "node_modules/ob1": { "version": "0.83.1", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/ob1/-/ob1-0.83.1.tgz", "integrity": "sha512-ngwqewtdUzFyycomdbdIhFLjePPSOt1awKMUXQ0L7iLHgWEPF3DsCerblzjzfAUHaXuvE9ccJymWQ/4PNNqvnQ==", "license": "MIT", "dependencies": { @@ -11469,7 +10956,7 @@ }, "node_modules/on-finished": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "license": "MIT", "dependencies": { @@ -11501,6 +10988,7 @@ "version": "2.0.1", "resolved": "https://mirrors.tencent.com/npm/onetime/-/onetime-2.0.1.tgz", "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "license": "MIT", "dependencies": { "mimic-fn": "^1.0.0" }, @@ -11510,7 +10998,7 @@ }, "node_modules/open": { "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/open/-/open-7.4.2.tgz", "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "license": "MIT", "dependencies": { @@ -11598,6 +11086,7 @@ "version": "1.9.3", "resolved": "https://mirrors.tencent.com/npm/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -11605,7 +11094,8 @@ "node_modules/ora/node_modules/color-name": { "version": "1.1.3", "resolved": "https://mirrors.tencent.com/npm/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" }, "node_modules/ora/node_modules/escape-string-regexp": { "version": "1.0.5", @@ -11727,7 +11217,7 @@ }, "node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "license": "MIT", "dependencies": { @@ -11752,7 +11242,7 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "resolved": "https://mirrors.tencent.com/npm/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { @@ -11906,6 +11396,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", @@ -12075,7 +11566,7 @@ }, "node_modules/queue": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/queue/-/queue-6.0.2.tgz", "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", "license": "MIT", "dependencies": { @@ -12111,7 +11602,7 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { @@ -12137,13 +11628,14 @@ "version": "2.0.1", "resolved": "https://mirrors.tencent.com/npm/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react": { "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/react/-/react-19.1.0.tgz", "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", "license": "MIT", "engines": { @@ -12162,7 +11654,7 @@ }, "node_modules/react-dom": { "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/react-dom/-/react-dom-19.1.0.tgz", "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", "license": "MIT", "dependencies": { @@ -12191,14 +11683,14 @@ } }, "node_modules/react-is": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz", - "integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==", + "version": "19.2.0", + "resolved": "https://mirrors.tencent.com/npm/react-is/-/react-is-19.2.0.tgz", + "integrity": "sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==", "license": "MIT" }, "node_modules/react-native": { "version": "0.81.4", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/react-native/-/react-native-0.81.4.tgz", "integrity": "sha512-bt5bz3A/+Cv46KcjV0VQa+fo7MKxs17RCcpzjftINlen4ZDUl0I6Ut+brQ2FToa5oD0IB0xvQHfmsg2EDqsZdQ==", "license": "MIT", "dependencies": { @@ -12270,9 +11762,9 @@ } }, "node_modules/react-native-device-info": { - "version": "14.0.4", - "resolved": "https://mirrors.tencent.com/npm/react-native-device-info/-/react-native-device-info-14.0.4.tgz", - "integrity": "sha512-NX0wMAknSDBeFnEnSFQ8kkAcQrFHrG4Cl0mVjoD+0++iaKrOupiGpBXqs8xR0SeJyPC5zpdPl4h/SaBGly6UxA==", + "version": "14.1.1", + "resolved": "https://mirrors.tencent.com/npm/react-native-device-info/-/react-native-device-info-14.1.1.tgz", + "integrity": "sha512-lXFpe6DJmzbQXNLWxlMHP2xuTU5gwrKAvI8dCAZuERhW9eOXSubOQIesk9lIBnsi9pI19GMrcpJEvs4ARPRYmw==", "license": "MIT", "peerDependencies": { "react-native": "*" @@ -12314,7 +11806,7 @@ }, "node_modules/react-native-is-edge-to-edge": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.2.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.2.1.tgz", "integrity": "sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q==", "license": "MIT", "peerDependencies": { @@ -12362,17 +11854,17 @@ } }, "node_modules/react-native-purchases": { - "version": "9.4.3", - "resolved": "https://mirrors.tencent.com/npm/react-native-purchases/-/react-native-purchases-9.4.3.tgz", - "integrity": "sha512-7M8/tjZY2iZISBOqXIxxzkt7fxt86WGF2ZW/qcsEfXVaZv2UvDLs+GuYKjf0Bz+2hOuYwoJK/LF++jpUi6CRng==", + "version": "9.5.4", + "resolved": "https://mirrors.tencent.com/npm/react-native-purchases/-/react-native-purchases-9.5.4.tgz", + "integrity": "sha512-N2S5GvV6gkcl9O+1XzzH10AjPMYie2aWoHi2QTN2fG4tulGSHhTYIYhX0QjkJzN0eX2ACRgPB4BUxcbh1/DERQ==", "license": "MIT", "workspaces": [ "examples/purchaseTesterTypescript", "react-native-purchases-ui" ], "dependencies": { - "@revenuecat/purchases-js-hybrid-mappings": "17.7.0", - "@revenuecat/purchases-typescript-internal": "17.7.0" + "@revenuecat/purchases-js-hybrid-mappings": "17.10.0", + "@revenuecat/purchases-typescript-internal": "17.10.0" }, "peerDependencies": { "react": ">= 16.6.3", @@ -12386,9 +11878,9 @@ } }, "node_modules/react-native-reanimated": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.0.tgz", - "integrity": "sha512-L8FqZn8VjZyBaCUMYFyx1Y+T+ZTbblaudpxReOXJ66RnOf52g6UM4Pa/IjwLD1XAw1FUxLRQrtpdjbkEc74FiQ==", + "version": "4.1.3", + "resolved": "https://mirrors.tencent.com/npm/react-native-reanimated/-/react-native-reanimated-4.1.3.tgz", + "integrity": "sha512-GP8wsi1u3nqvC1fMab/m8gfFwFyldawElCcUSBJQgfrXeLmsPPUOpDw44lbLeCpcwUuLa05WTVePdTEwCLTUZg==", "license": "MIT", "dependencies": { "react-native-is-edge-to-edge": "^1.2.1", @@ -12403,7 +11895,7 @@ }, "node_modules/react-native-reanimated/node_modules/semver": { "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { @@ -12460,9 +11952,9 @@ } }, "node_modules/react-native-svg": { - "version": "15.13.0", - "resolved": "https://mirrors.tencent.com/npm/react-native-svg/-/react-native-svg-15.13.0.tgz", - "integrity": "sha512-/YPK+PAAXg4T0x2d2vYPvqqAhOYid2bRKxUVT7STIyd1p2JxWmsGQkfZxXCkEFN7TwLfIyVlT5RimT91Pj/qXw==", + "version": "15.14.0", + "resolved": "https://mirrors.tencent.com/npm/react-native-svg/-/react-native-svg-15.14.0.tgz", + "integrity": "sha512-B3gYc7WztcOT4N54AtUutbe0Nuqqh/nkresY0fAXzUHYLsWuIu/yGiCCD3DKfAs6GLv5LFtWTu7N333Q+e3bkg==", "license": "MIT", "dependencies": { "css-select": "^5.1.0", @@ -12543,9 +12035,9 @@ } }, "node_modules/react-native-worklets": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.5.1.tgz", - "integrity": "sha512-lJG6Uk9YuojjEX/tQrCbcbmpdLCSFxDK1rJlkDhgqkVi1KZzG7cdcBFQRqyNOOzR9Y0CXNuldmtWTGOyM0k0+w==", + "version": "0.6.1", + "resolved": "https://mirrors.tencent.com/npm/react-native-worklets/-/react-native-worklets-0.6.1.tgz", + "integrity": "sha512-URca8l7c7Uog7gv4mcg9KILdJlnbvwdS5yfXQYf5TDkD2W1VY1sduEKrD+sA3lUPXH/TG1vmXAvNxCNwPMYgGg==", "license": "MIT", "peer": true, "dependencies": { @@ -12569,7 +12061,7 @@ }, "node_modules/react-native-worklets/node_modules/semver": { "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "peer": true, @@ -12582,7 +12074,7 @@ }, "node_modules/react-native/node_modules/@react-native/virtualized-lists": { "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.81.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/@react-native/virtualized-lists/-/virtualized-lists-0.81.4.tgz", "integrity": "sha512-hBM+rMyL6Wm1Q4f/WpqGsaCojKSNUBqAXLABNGoWm1vabZ7cSnARMxBvA/2vo3hLcoR4v7zDK8tkKm9+O0LjVA==", "license": "MIT", "dependencies": { @@ -12614,7 +12106,7 @@ }, "node_modules/react-native/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "resolved": "https://mirrors.tencent.com/npm/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", @@ -12920,6 +12412,7 @@ "version": "1.7.1", "resolved": "https://mirrors.tencent.com/npm/resolve/-/resolve-1.7.1.tgz", "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "license": "MIT", "dependencies": { "path-parse": "^1.0.5" } @@ -13000,6 +12493,7 @@ "version": "2.0.0", "resolved": "https://mirrors.tencent.com/npm/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "license": "MIT", "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -13027,7 +12521,7 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "license": "ISC", @@ -13043,7 +12537,7 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "resolved": "https://mirrors.tencent.com/npm/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", @@ -13231,15 +12725,15 @@ } }, "node_modules/send": { - "version": "0.19.1", - "resolved": "https://mirrors.tencent.com/npm/send/-/send-0.19.1.tgz", - "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==", + "version": "0.19.0", + "resolved": "https://mirrors.tencent.com/npm/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", @@ -13258,6 +12752,7 @@ "version": "2.6.9", "resolved": "https://mirrors.tencent.com/npm/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -13268,15 +12763,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/send/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://mirrors.tencent.com/npm/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/send/node_modules/on-finished": { "version": "2.4.1", "resolved": "https://mirrors.tencent.com/npm/on-finished/-/on-finished-2.4.1.tgz", @@ -13300,7 +12786,7 @@ }, "node_modules/serialize-error": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/serialize-error/-/serialize-error-2.1.0.tgz", "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", "license": "MIT", "engines": { @@ -13309,7 +12795,7 @@ }, "node_modules/serve-static": { "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "resolved": "https://mirrors.tencent.com/npm/serve-static/-/serve-static-1.16.2.tgz", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { @@ -13322,84 +12808,15 @@ "node": ">= 0.8.0" } }, - "node_modules/serve-static/node_modules/debug": { - "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" - } - }, - "node_modules/serve-static/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==", - "license": "MIT" - }, "node_modules/serve-static/node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/serve-static/node_modules/on-finished": { - "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" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-static/node_modules/send": { - "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", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-static/node_modules/statuses": { - "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" - } - }, "node_modules/server-only": { "version": "0.0.1", "resolved": "https://mirrors.tencent.com/npm/server-only/-/server-only-0.0.1.tgz", @@ -13462,7 +12879,7 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, @@ -13666,7 +13083,7 @@ }, "node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "resolved": "https://mirrors.tencent.com/npm/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "license": "BSD-3-Clause", "engines": { @@ -13684,7 +13101,7 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "resolved": "https://mirrors.tencent.com/npm/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "license": "MIT", "dependencies": { @@ -13694,7 +13111,7 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "license": "BSD-3-Clause", "engines": { @@ -13746,7 +13163,7 @@ }, "node_modules/stackframe": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "resolved": "https://mirrors.tencent.com/npm/stackframe/-/stackframe-1.3.4.tgz", "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", "license": "MIT" }, @@ -13764,7 +13181,7 @@ }, "node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "license": "MIT", "engines": { @@ -14128,6 +13545,7 @@ "version": "5.0.0", "resolved": "https://mirrors.tencent.com/npm/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", "engines": { "node": ">=18" } @@ -14159,7 +13577,7 @@ }, "node_modules/terser": { "version": "5.44.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/terser/-/terser-5.44.0.tgz", "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", "license": "BSD-2-Clause", "dependencies": { @@ -14177,7 +13595,7 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "resolved": "https://mirrors.tencent.com/npm/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, @@ -14239,7 +13657,7 @@ }, "node_modules/throat": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/throat/-/throat-5.0.0.tgz", "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", "license": "MIT" }, @@ -14293,7 +13711,7 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { @@ -14359,7 +13777,7 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, @@ -14473,9 +13891,9 @@ } }, "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "5.9.3", + "resolved": "https://mirrors.tencent.com/npm/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -14538,9 +13956,9 @@ } }, "node_modules/undici": { - "version": "6.21.3", - "resolved": "https://mirrors.tencent.com/npm/undici/-/undici-6.21.3.tgz", - "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", + "version": "6.22.0", + "resolved": "https://mirrors.tencent.com/npm/undici/-/undici-6.22.0.tgz", + "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", "license": "MIT", "engines": { "node": ">=18.17" @@ -14621,7 +14039,7 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "resolved": "https://mirrors.tencent.com/npm/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { @@ -14785,7 +14203,7 @@ }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "license": "MIT", "engines": { @@ -14832,9 +14250,186 @@ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, + "node_modules/vaul/node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/vaul/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/vaul/node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/vaul/node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/vaul/node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/vaul/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/vaul/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://mirrors.tencent.com/npm/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/vlq": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "resolved": "https://mirrors.tencent.com/npm/vlq/-/vlq-1.0.1.tgz", "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", "license": "MIT" }, @@ -14857,6 +14452,7 @@ "version": "1.0.1", "resolved": "https://mirrors.tencent.com/npm/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } diff --git a/package.json b/package.json index ab971a8..3fb5c2e 100644 --- a/package.json +++ b/package.json @@ -24,22 +24,22 @@ "@sentry/react-native": "~7.1.0", "@types/lodash": "^4.17.20", "dayjs": "^1.11.18", - "expo": "^54.0.10", + "expo": "^54.0.13", "expo-apple-authentication": "~8.0.7", "expo-background-task": "~1.0.8", "expo-blur": "~15.0.7", "expo-camera": "~17.0.8", "expo-constants": "~18.0.9", - "expo-font": "~14.0.8", + "expo-font": "~14.0.9", "expo-glass-effect": "^0.1.4", "expo-haptics": "~15.0.7", - "expo-image": "~3.0.8", + "expo-image": "~3.0.9", "expo-image-picker": "~17.0.8", "expo-linear-gradient": "~15.0.7", "expo-linking": "~8.0.8", - "expo-notifications": "~0.32.11", + "expo-notifications": "~0.32.12", "expo-quick-actions": "^6.0.0", - "expo-router": "~6.0.8", + "expo-router": "~6.0.12", "expo-splash-screen": "~31.0.10", "expo-sqlite": "^16.0.8", "expo-status-bar": "~3.0.8", diff --git a/services/notifications.ts b/services/notifications.ts index 8a193ad..89f9ea6 100644 --- a/services/notifications.ts +++ b/services/notifications.ts @@ -179,6 +179,11 @@ export class NotificationService { if (data?.url) { router.push(data.url as any); } + } else if (data?.type === NotificationTypes.WORKOUT_COMPLETION) { + // 处理锻炼完成通知 + console.log('用户点击了锻炼完成通知', data); + // 跳转到锻炼历史页面 + router.push('/workout/history' as any); } } @@ -511,6 +516,7 @@ export const NotificationTypes = { WATER_REMINDER: 'water_reminder', REGULAR_WATER_REMINDER: 'regular_water_reminder', CHALLENGE_ENCOURAGEMENT: 'challenge_encouragement', + WORKOUT_COMPLETION: 'workout_completion', } as const; // 便捷方法 diff --git a/services/workoutMonitor.ts b/services/workoutMonitor.ts new file mode 100644 index 0000000..696f984 --- /dev/null +++ b/services/workoutMonitor.ts @@ -0,0 +1,173 @@ +import { fetchRecentWorkouts, WorkoutData } from '@/utils/health'; +import AsyncStorage from '@/utils/kvStore'; +import { NativeEventEmitter, NativeModules } from 'react-native'; +import { analyzeWorkoutAndSendNotification } from './workoutNotificationService'; + +const { HealthKitManager } = NativeModules; +const workoutEmitter = new NativeEventEmitter(HealthKitManager); + +class WorkoutMonitorService { + private static instance: WorkoutMonitorService; + private isInitialized = false; + private lastProcessedWorkoutId: string | null = null; + private processingTimeout: any = null; + private eventListenerSubscription: any = null; + + static getInstance(): WorkoutMonitorService { + if (!WorkoutMonitorService.instance) { + WorkoutMonitorService.instance = new WorkoutMonitorService(); + } + return WorkoutMonitorService.instance; + } + + async initialize(): Promise { + if (this.isInitialized) { + console.log('锻炼监听服务已初始化'); + return; + } + + try { + // 获取上次处理的锻炼ID + await this.loadLastProcessedWorkoutId(); + + // 启动 iOS 原生锻炼监听器 + await HealthKitManager.startWorkoutObserver(); + + // 监听锻炼更新事件 + this.eventListenerSubscription = workoutEmitter.addListener( + 'workoutUpdate', + this.handleWorkoutUpdate.bind(this) + ); + + this.isInitialized = true; + console.log('锻炼监听服务初始化成功'); + } catch (error) { + console.error('锻炼监听服务初始化失败:', error); + throw error; + } + } + + async stop(): Promise { + try { + // 停止原生监听器 + await HealthKitManager.stopWorkoutObserver(); + + // 移除事件监听器 + if (this.eventListenerSubscription) { + this.eventListenerSubscription.remove(); + this.eventListenerSubscription = null; + } + + // 清理定时器 + if (this.processingTimeout) { + clearTimeout(this.processingTimeout); + this.processingTimeout = null; + } + + this.isInitialized = false; + console.log('锻炼监听服务已停止'); + } catch (error) { + console.error('停止锻炼监听服务失败:', error); + } + } + + private async loadLastProcessedWorkoutId(): Promise { + try { + const storedId = await AsyncStorage.getItem('@last_processed_workout_id'); + this.lastProcessedWorkoutId = storedId; + console.log('上次处理的锻炼ID:', this.lastProcessedWorkoutId); + } catch (error) { + console.error('加载上次处理的锻炼ID失败:', error); + } + } + + private async saveLastProcessedWorkoutId(workoutId: string): Promise { + try { + await AsyncStorage.setItem('@last_processed_workout_id', workoutId); + this.lastProcessedWorkoutId = workoutId; + } catch (error) { + console.error('保存上次处理的锻炼ID失败:', error); + } + } + + private async handleWorkoutUpdate(event: any): Promise { + console.log('收到锻炼更新事件:', event); + + // 防抖处理,避免短时间内重复处理 + if (this.processingTimeout) { + clearTimeout(this.processingTimeout); + } + + this.processingTimeout = setTimeout(async () => { + try { + await this.checkForNewWorkouts(); + } catch (error) { + console.error('检查新锻炼失败:', error); + } + }, 5000); // 5秒延迟,确保 HealthKit 数据已完全更新 + } + + private async checkForNewWorkouts(): Promise { + try { + console.log('检查新的锻炼记录...'); + + // 获取最近1小时的锻炼记录 + const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000); + const recentWorkouts = await fetchRecentWorkouts({ + startDate: oneHourAgo.toISOString(), + endDate: new Date().toISOString(), + limit: 10 + }); + + console.log(`找到 ${recentWorkouts.length} 条最近的锻炼记录`); + + // 检查是否有新的锻炼记录 + for (const workout of recentWorkouts) { + if (workout.id !== this.lastProcessedWorkoutId) { + console.log('检测到新锻炼:', { + id: workout.id, + type: workout.workoutActivityTypeString, + duration: workout.duration, + startDate: workout.startDate + }); + + await this.processNewWorkout(workout); + await this.saveLastProcessedWorkoutId(workout.id); + } else { + console.log('锻炼已处理过,跳过:', workout.id); + } + } + } catch (error) { + console.error('检查新锻炼失败:', error); + } + } + + private async processNewWorkout(workout: WorkoutData): Promise { + try { + console.log('开始处理新锻炼:', workout.id); + + // 分析锻炼并发送通知 + await analyzeWorkoutAndSendNotification(workout); + + console.log('新锻炼处理完成:', workout.id); + } catch (error) { + console.error('处理新锻炼失败:', error); + } + } + + // 手动触发检查(用于测试) + async manualCheck(): Promise { + console.log('手动触发锻炼检查...'); + await this.checkForNewWorkouts(); + } + + // 获取服务状态 + getStatus(): { initialized: boolean; lastProcessedWorkoutId: string | null } { + return { + initialized: this.isInitialized, + lastProcessedWorkoutId: this.lastProcessedWorkoutId + }; + } +} + +export const workoutMonitorService = WorkoutMonitorService.getInstance(); \ No newline at end of file diff --git a/services/workoutNotificationService.ts b/services/workoutNotificationService.ts new file mode 100644 index 0000000..ba0d3ab --- /dev/null +++ b/services/workoutNotificationService.ts @@ -0,0 +1,161 @@ +import { getWorkoutTypeDisplayName, WorkoutData } from '@/utils/health'; +import { getNotificationEnabled } from '@/utils/userPreferences'; +import { + getWorkoutNotificationEnabled, + isNotificationTimeAllowed, + isWorkoutTypeEnabled +} from '@/utils/workoutPreferences'; +import { notificationService, NotificationTypes } from './notifications'; +import { getWorkoutDetailMetrics } from './workoutDetail'; + +interface WorkoutEncouragementMessage { + title: string; + body: string; + data: Record; +} + +export async function analyzeWorkoutAndSendNotification(workout: WorkoutData): Promise { + try { + // 检查用户是否启用了通用通知 + const notificationsEnabled = await getNotificationEnabled(); + if (!notificationsEnabled) { + console.log('用户已禁用通知,跳过锻炼结束通知'); + return; + } + + // 检查用户是否启用了锻炼通知 + const workoutNotificationsEnabled = await getWorkoutNotificationEnabled(); + if (!workoutNotificationsEnabled) { + console.log('用户已禁用锻炼通知,跳过锻炼结束通知'); + return; + } + + // 检查时间限制(避免深夜打扰) + const timeAllowed = await isNotificationTimeAllowed(); + if (!timeAllowed) { + console.log('当前时间不适合发送通知,跳过锻炼结束通知'); + return; + } + + // 检查特定锻炼类型是否启用了通知 + const workoutTypeEnabled = await isWorkoutTypeEnabled(workout.workoutActivityTypeString || ''); + if (!workoutTypeEnabled) { + console.log('该锻炼类型已禁用通知,跳过锻炼结束通知:', workout.workoutActivityTypeString); + return; + } + + // 获取详细的锻炼指标 + const workoutMetrics = await getWorkoutDetailMetrics(workout); + + // 生成个性化鼓励消息 + const message = generateEncouragementMessage(workout, workoutMetrics); + + // 发送通知 + await notificationService.sendImmediateNotification({ + title: message.title, + body: message.body, + data: { + type: NotificationTypes.WORKOUT_COMPLETION, + workoutId: workout.id, + workoutType: workout.workoutActivityTypeString, + duration: workout.duration, + calories: workout.totalEnergyBurned, + ...message.data + }, + sound: true, + priority: 'high' + }); + + console.log('锻炼结束通知已发送:', message.title); + } catch (error) { + console.error('发送锻炼结束通知失败:', error); + } +} + +function generateEncouragementMessage( + workout: WorkoutData, + metrics: any +): WorkoutEncouragementMessage { + const workoutType = getWorkoutTypeDisplayName(workout.workoutActivityTypeString); + const durationMinutes = Math.round(workout.duration / 60); + const calories = workout.totalEnergyBurned ? Math.round(workout.totalEnergyBurned) : 0; + + // 基于锻炼类型和指标生成个性化消息 + let title = '锻炼完成!'; + let body = ''; + let data: Record = {}; + + switch (workout.workoutActivityTypeString?.toLowerCase()) { + case 'running': + title = '🏃‍♂️ 跑步完成!'; + body = `太棒了!您刚刚完成了${durationMinutes}分钟的跑步,消耗了约${calories}千卡热量。`; + if (metrics.averageHeartRate) { + body += `平均心率${metrics.averageHeartRate}次/分。`; + } + body += '坚持运动让身体更健康!💪'; + break; + + case 'cycling': + title = '🚴‍♂️ 骑行完成!'; + body = `骑行${durationMinutes}分钟完成!消耗了约${calories}千卡热量。`; + if (workout.totalDistance) { + const distanceKm = (workout.totalDistance / 1000).toFixed(2); + body += `骑行距离${distanceKm}公里。`; + } + body += '享受骑行的自由吧!🌟'; + break; + + case 'swimming': + title = '🏊‍♂️ 游泳完成!'; + body = `游泳${durationMinutes}分钟完成!消耗了约${calories}千卡热量。`; + body += '全身运动效果极佳,继续保持!💦'; + break; + + case 'yoga': + title = '🧘‍♀️ 瑜伽完成!'; + body = `${durationMinutes}分钟的瑜伽练习完成!提升了柔韧性和内心平静。`; + body += '继续保持这份宁静!🌸'; + break; + + case 'functionalstrengthtraining': + case 'traditionalstrengthtraining': + title = '💪 力量训练完成!'; + body = `力量训练${durationMinutes}分钟完成!消耗了约${calories}千卡热量。`; + if (metrics.mets && metrics.mets > 6) { + body += '高强度训练,效果显著!🔥'; + } + body += '肌肉正在变得更强壮!'; + break; + + case 'highintensityintervaltraining': + title = '🔥 HIIT训练完成!'; + body = `高强度间歇训练${durationMinutes}分钟完成!消耗了约${calories}千卡热量。`; + body += '心肺功能得到有效提升,您的努力值得称赞!⚡'; + break; + + default: + title = '🎯 锻炼完成!'; + body = `${workoutType}${durationMinutes}分钟完成!消耗了约${calories}千卡热量。`; + body += '坚持运动,健康生活!🌟'; + break; + } + + // 添加心率区间分析(如果有心率数据) + if (metrics.heartRateZones && metrics.heartRateZones.length > 0) { + const dominantZone = metrics.heartRateZones.reduce((prev: any, current: any) => + current.durationMinutes > prev.durationMinutes ? current : prev + ); + + if (dominantZone.durationMinutes > 5) { + data.heartRateZone = dominantZone.key; + data.heartRateZoneLabel = dominantZone.label; + } + } + + // 添加锻炼强度评估 + if (metrics.mets) { + data.intensity = metrics.mets < 3 ? 'low' : metrics.mets < 6 ? 'moderate' : 'high'; + } + + return { title, body, data }; +} \ No newline at end of file diff --git a/utils/workoutPreferences.ts b/utils/workoutPreferences.ts new file mode 100644 index 0000000..1514235 --- /dev/null +++ b/utils/workoutPreferences.ts @@ -0,0 +1,152 @@ +import AsyncStorage from '@/utils/kvStore'; + +const WORKOUT_NOTIFICATION_ENABLED_KEY = '@workout_notification_enabled'; +const WORKOUT_NOTIFICATION_TIME_RANGE_KEY = '@workout_notification_time_range'; +const WORKOUT_NOTIFICATION_TYPES_KEY = '@workout_notification_types'; + +export interface WorkoutNotificationPreferences { + enabled: boolean; + startTimeHour: number; // 开始时间(小时,0-23) + endTimeHour: number; // 结束时间(小时,0-23) + enabledWorkoutTypes: string[]; // 启用通知的锻炼类型 +} + +const DEFAULT_PREFERENCES: WorkoutNotificationPreferences = { + enabled: true, + startTimeHour: 8, // 早上8点 + endTimeHour: 22, // 晚上10点 + enabledWorkoutTypes: [] // 空数组表示所有类型都启用 +}; + +/** + * 获取锻炼通知偏好设置 + */ +export async function getWorkoutNotificationPreferences(): Promise { + try { + const enabled = await AsyncStorage.getItem(WORKOUT_NOTIFICATION_ENABLED_KEY); + const timeRange = await AsyncStorage.getItem(WORKOUT_NOTIFICATION_TIME_RANGE_KEY); + const workoutTypes = await AsyncStorage.getItem(WORKOUT_NOTIFICATION_TYPES_KEY); + + return { + enabled: enabled !== 'false', // 默认启用 + startTimeHour: timeRange ? JSON.parse(timeRange).start : DEFAULT_PREFERENCES.startTimeHour, + endTimeHour: timeRange ? JSON.parse(timeRange).end : DEFAULT_PREFERENCES.endTimeHour, + enabledWorkoutTypes: workoutTypes ? JSON.parse(workoutTypes) : DEFAULT_PREFERENCES.enabledWorkoutTypes + }; + } catch (error) { + console.error('获取锻炼通知偏好设置失败:', error); + return DEFAULT_PREFERENCES; + } +} + +/** + * 保存锻炼通知偏好设置 + */ +export async function saveWorkoutNotificationPreferences(preferences: Partial): Promise { + try { + const currentPrefs = await getWorkoutNotificationPreferences(); + const newPrefs = { ...currentPrefs, ...preferences }; + + if (preferences.enabled !== undefined) { + await AsyncStorage.setItem(WORKOUT_NOTIFICATION_ENABLED_KEY, preferences.enabled.toString()); + } + + if (preferences.startTimeHour !== undefined || preferences.endTimeHour !== undefined) { + const timeRange = { + start: preferences.startTimeHour ?? currentPrefs.startTimeHour, + end: preferences.endTimeHour ?? currentPrefs.endTimeHour + }; + await AsyncStorage.setItem(WORKOUT_NOTIFICATION_TIME_RANGE_KEY, JSON.stringify(timeRange)); + } + + if (preferences.enabledWorkoutTypes !== undefined) { + await AsyncStorage.setItem(WORKOUT_NOTIFICATION_TYPES_KEY, JSON.stringify(preferences.enabledWorkoutTypes)); + } + + console.log('锻炼通知偏好设置已保存:', newPrefs); + } catch (error) { + console.error('保存锻炼通知偏好设置失败:', error); + throw error; + } +} + +/** + * 检查当前时间是否在允许的通知时间范围内 + */ +export async function isNotificationTimeAllowed(): Promise { + try { + const preferences = await getWorkoutNotificationPreferences(); + const currentHour = new Date().getHours(); + + // 处理跨天的情况(例如 22:00 - 8:00) + if (preferences.startTimeHour <= preferences.endTimeHour) { + // 正常情况,如 8:00 - 22:00 + return currentHour >= preferences.startTimeHour && currentHour <= preferences.endTimeHour; + } else { + // 跨天情况,如 22:00 - 8:00 + return currentHour >= preferences.startTimeHour || currentHour <= preferences.endTimeHour; + } + } catch (error) { + console.error('检查通知时间失败:', error); + return true; // 默认允许 + } +} + +/** + * 检查特定锻炼类型是否启用了通知 + */ +export async function isWorkoutTypeEnabled(workoutType: string): Promise { + try { + const preferences = await getWorkoutNotificationPreferences(); + + // 如果启用的类型列表为空,表示所有类型都启用 + if (preferences.enabledWorkoutTypes.length === 0) { + return true; + } + + return preferences.enabledWorkoutTypes.includes(workoutType); + } catch (error) { + console.error('检查锻炼类型通知设置失败:', error); + return true; // 默认允许 + } +} + +/** + * 获取锻炼通知的简化状态(仅检查是否启用) + */ +export async function getWorkoutNotificationEnabled(): Promise { + try { + const preferences = await getWorkoutNotificationPreferences(); + return preferences.enabled; + } catch (error) { + console.error('获取锻炼通知启用状态失败:', error); + return true; // 默认启用 + } +} + +/** + * 设置锻炼通知启用状态 + */ +export async function setWorkoutNotificationEnabled(enabled: boolean): Promise { + try { + await saveWorkoutNotificationPreferences({ enabled }); + } catch (error) { + console.error('设置锻炼通知启用状态失败:', error); + throw error; + } +} + +/** + * 重置锻炼通知偏好设置为默认值 + */ +export async function resetWorkoutNotificationPreferences(): Promise { + try { + await AsyncStorage.removeItem(WORKOUT_NOTIFICATION_ENABLED_KEY); + await AsyncStorage.removeItem(WORKOUT_NOTIFICATION_TIME_RANGE_KEY); + await AsyncStorage.removeItem(WORKOUT_NOTIFICATION_TYPES_KEY); + console.log('锻炼通知偏好设置已重置为默认值'); + } catch (error) { + console.error('重置锻炼通知偏好设置失败:', error); + throw error; + } +} \ No newline at end of file diff --git a/utils/workoutTestHelper.ts b/utils/workoutTestHelper.ts new file mode 100644 index 0000000..5a9c0c1 --- /dev/null +++ b/utils/workoutTestHelper.ts @@ -0,0 +1,198 @@ +import { workoutMonitorService } from '@/services/workoutMonitor'; +import { WorkoutData } from '@/utils/health'; + +/** + * 锻炼测试工具 + * 用于开发和测试锻炼监听功能 + */ +export class WorkoutTestHelper { + /** + * 模拟一个锻炼完成事件 + */ + static async simulateWorkoutCompletion(): Promise { + console.log('=== 开始模拟锻炼完成事件 ==='); + + try { + // 手动触发锻炼检查 + await workoutMonitorService.manualCheck(); + console.log('✅ 锻炼检查已手动触发'); + } catch (error) { + console.error('❌ 模拟锻炼完成事件失败:', error); + } + } + + /** + * 获取锻炼监听服务状态 + */ + static getWorkoutMonitorStatus(): any { + return workoutMonitorService.getStatus(); + } + + /** + * 创建测试用的模拟锻炼数据 + */ + static createMockWorkout(type: string = 'running'): WorkoutData { + const now = new Date(); + const duration = 30 * 60; // 30分钟 + const startTime = new Date(now.getTime() - duration * 1000); + + const workoutTypes: Record = { + running: 37, + cycling: 13, + swimming: 46, + yoga: 57, + functionalstrengthtraining: 20, + traditionalstrengthtraining: 50, + highintensityintervaltraining: 63, + walking: 52, + }; + + return { + id: `mock-workout-${Date.now()}`, + startDate: startTime.toISOString(), + endDate: now.toISOString(), + duration: duration, + workoutActivityType: workoutTypes[type] || 37, + workoutActivityTypeString: type, + totalEnergyBurned: Math.round(Math.random() * 300 + 100), // 100-400千卡 + totalDistance: type === 'running' || type === 'cycling' ? Math.round(Math.random() * 10000 + 1000) : undefined, + averageHeartRate: Math.round(Math.random() * 50 + 120), // 120-170次/分 + source: { + name: 'Test App', + bundleIdentifier: 'com.test.app' + }, + metadata: { + HKAverageMETs: Math.random() * 10 + 5 // 5-15 METs + } + }; + } + + /** + * 测试不同类型的锻炼通知 + */ + static async testWorkoutNotifications(): Promise { + console.log('=== 开始测试不同类型锻炼通知 ==='); + + const workoutTypes = ['running', 'cycling', 'swimming', 'yoga', 'functionalstrengthtraining', 'highintensityintervaltraining']; + + for (const type of workoutTypes) { + console.log(`--- 测试 ${type} 锻炼通知 ---`); + + try { + // 这里需要导入通知服务来直接测试 + const { analyzeWorkoutAndSendNotification } = await import('@/services/workoutNotificationService'); + const mockWorkout = this.createMockWorkout(type); + + await analyzeWorkoutAndSendNotification(mockWorkout); + + console.log(`✅ ${type} 锻炼通知测试成功`); + + // 等待一段时间再测试下一个 + await new Promise(resolve => setTimeout(resolve, 2000)); + } catch (error) { + console.error(`❌ ${type} 锻炼通知测试失败:`, error); + } + } + + console.log('=== 锻炼通知测试完成 ==='); + } + + /** + * 测试偏好设置功能 + */ + static async testPreferences(): Promise { + console.log('=== 开始测试偏好设置功能 ==='); + + try { + const { + getWorkoutNotificationPreferences, + saveWorkoutNotificationPreferences, + isNotificationTimeAllowed, + isWorkoutTypeEnabled + } = await import('@/utils/workoutPreferences'); + + // 获取当前设置 + const currentPrefs = await getWorkoutNotificationPreferences(); + console.log('当前偏好设置:', currentPrefs); + + // 测试时间检查 + const timeAllowed = await isNotificationTimeAllowed(); + console.log('当前时间是否允许通知:', timeAllowed); + + // 测试锻炼类型检查 + const runningEnabled = await isWorkoutTypeEnabled('running'); + console.log('跑步通知是否启用:', runningEnabled); + + // 临时修改设置 + await saveWorkoutNotificationPreferences({ + enabled: true, + startTimeHour: 9, + endTimeHour: 21, + enabledWorkoutTypes: ['running', 'cycling'] + }); + + console.log('临时设置已保存'); + + // 恢复原始设置 + await saveWorkoutNotificationPreferences(currentPrefs); + console.log('原始设置已恢复'); + + console.log('✅ 偏好设置功能测试完成'); + } catch (error) { + console.error('❌ 偏好设置功能测试失败:', error); + } + } + + /** + * 运行完整的测试套件 + */ + static async runFullTestSuite(): Promise { + console.log('🧪 开始运行锻炼监听功能完整测试套件'); + + try { + // 1. 检查服务状态 + console.log('\n1. 检查服务状态...'); + const status = this.getWorkoutMonitorStatus(); + console.log('服务状态:', status); + + // 2. 测试偏好设置 + console.log('\n2. 测试偏好设置...'); + await this.testPreferences(); + + // 3. 测试通知功能 + console.log('\n3. 测试通知功能...'); + await this.testWorkoutNotifications(); + + // 4. 测试手动触发 + console.log('\n4. 测试手动触发...'); + await this.simulateWorkoutCompletion(); + + console.log('\n🎉 完整测试套件运行完成!'); + } catch (error) { + console.error('\n❌ 测试套件运行失败:', error); + } + } +} + +/** + * 开发者调试函数 + * 可以在开发者控制台中调用 + */ +declare global { + interface Window { + testWorkoutNotifications: () => Promise; + testWorkoutPreferences: () => Promise; + simulateWorkoutCompletion: () => Promise; + runWorkoutTestSuite: () => Promise; + } +} + +// 在开发环境中暴露调试函数 +if (__DEV__) { + // 这些函数可以在开发者控制台中调用 + // 例如: window.testWorkoutNotifications() + + // 注意:这些函数需要在实际运行环境中绑定 + // 可以在应用的初始化代码中添加: + // window.testWorkoutNotifications = WorkoutTestHelper.testWorkoutNotifications; +} \ No newline at end of file