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