✨ Add customizable daily reminder time with task count
Changes
8 files changed, +2683 -139
MODIFY
README.md
+1 -1
@@ -12,7 +12,7 @@
12
12
- **Local persistence** via AsyncStorage (JSON)
13
13
- **Export / import** as a JSON file using the native share sheet
14
14
- **WebDAV / Nextcloud sync** with last-write-wins conflict resolution; supports force-push and force-pull
15
-- **Daily task reminder** notification at noon (native platforms only, includes today's task count)
15
+- **Daily task reminder** notification at a configurable time (native platforms only); the reminder shows how many tasks are scheduled for today and the count refreshes on app launch
16
16
- **Light / dark / system** theme, persisted across sessions
17
17
18
18
## Tech Stack
MODIFY
app/(tabs)/settings.tsx
+84 -12
@@ -1,19 +1,23 @@
1
1
import React, { useState } from 'react';
2
-import { StyleSheet, Alert, TouchableOpacity, ScrollView, Switch } from 'react-native';
2
+import { StyleSheet, Alert, TouchableOpacity, ScrollView, Switch, Platform } from 'react-native';
3
3
import { SafeAreaView } from 'react-native-safe-area-context';
4
4
import { router, useFocusEffect } from 'expo-router';
5
5
import * as DocumentPicker from 'expo-document-picker';
6
+import DateTimePicker from '@react-native-community/datetimepicker';
6
7
import { ThemedView } from '@/components/themed-view';
7
8
import { ThemedText } from '@/components/themed-text';
8
9
import { storageService, taskService, webdavService, notificationService } from '@/services';
9
10
import { useTheme } from '@/contexts/theme-context';
10
11
import { Colors } from '@/constants/theme';
11
12
import { useColorScheme } from '@/hooks/use-color-scheme';
13
+import { DEFAULT_REMINDER_TIME, ReminderTime, formatReminderTime } from '@/utils/reminder';
12
14
13
15
export default function SettingsScreen() {
14
16
const [syncing, setSyncing] = useState(false);
15
17
const [autoArchive, setAutoArchive] = useState(false);
16
18
const [dailyNotifications, setDailyNotifications] = useState(false);
19
+ const [reminderTime, setReminderTime] = useState<ReminderTime>(DEFAULT_REMINDER_TIME);
20
+ const [showTimePicker, setShowTimePicker] = useState(false);
17
21
const [webdavConfigured, setWebdavConfigured] = useState(false);
18
22
const [webdavInfo, setWebdavInfo] = useState<{ url: string; username: string } | null>(null);
19
23
const { themeMode, setThemeMode } = useTheme();
@@ -40,6 +44,7 @@
40
44
// Check if there are scheduled notifications
41
45
const scheduled = await notificationService.getScheduledNotifications();
42
46
setDailyNotifications(scheduled.length > 0);
47
+ setReminderTime(await notificationService.getReminderTime());
43
48
};
44
49
45
50
const handleExport = async () => {
@@ -212,7 +217,7 @@
212
217
setDailyNotifications(true);
213
218
Alert.alert(
214
219
'Notifications Enabled',
215
- 'You will receive a daily reminder at 12:00 PM'
220
+ `You will receive a daily reminder at ${formatReminderTime(reminderTime)}`
216
221
);
217
222
}
218
223
} else {
@@ -222,6 +227,32 @@
222
227
}
223
228
};
224
229
230
+ const handleReminderTimeChange = async (
231
+ event: { type: string },
232
+ selectedDate?: Date
233
+ ) => {
234
+ setShowTimePicker(Platform.OS === 'ios');
235
+ if (event.type === 'dismissed' || !selectedDate) {
236
+ return;
237
+ }
238
+ const newTime: ReminderTime = {
239
+ hour: selectedDate.getHours(),
240
+ minute: selectedDate.getMinutes(),
241
+ };
242
+ setReminderTime(newTime);
243
+ try {
244
+ await notificationService.setReminderTime(newTime);
245
+ } catch {
246
+ Alert.alert('Error', 'Failed to update reminder time');
247
+ }
248
+ };
249
+
250
+ const reminderDate = (() => {
251
+ const date = new Date();
252
+ date.setHours(reminderTime.hour, reminderTime.minute, 0, 0);
253
+ return date;
254
+ })();
255
+
225
256
const handleTestNotification = async () => {
226
257
const hasPermission = await notificationService.requestPermissions();
227
258
if (!hasPermission) {
@@ -301,7 +332,7 @@
301
332
<ThemedView style={styles.optionTextContainer}>
302
333
<ThemedText style={styles.optionText}>Daily Reminder</ThemedText>
303
334
<ThemedText style={styles.optionDescription}>
304
- Get notified daily at 12:00 PM
335
+ Get notified daily at {formatReminderTime(reminderTime)} with your task count
305
336
</ThemedText>
306
337
</ThemedView>
307
338
<Switch
@@ -312,15 +343,46 @@
312
343
</ThemedView>
313
344
314
345
{dailyNotifications && (
315
- <TouchableOpacity
316
- style={[styles.option, { borderBottomColor: colors.border }]}
317
- onPress={handleTestNotification}
318
- >
319
- <ThemedText style={styles.optionText}>Send Test Notification</ThemedText>
320
- <ThemedText style={styles.optionDescription}>
321
- Test your notification settings
322
- </ThemedText>
323
- </TouchableOpacity>
346
+ <>
347
+ <ThemedView style={[styles.option, { borderBottomColor: colors.border }]}>
348
+ <ThemedView style={styles.optionWithSwitch}>
349
+ <ThemedView style={styles.optionTextContainer}>
350
+ <ThemedText style={styles.optionText}>Reminder Time</ThemedText>
351
+ <ThemedText style={styles.optionDescription}>
352
+ When the daily reminder is sent
353
+ </ThemedText>
354
+ </ThemedView>
355
+ <TouchableOpacity
356
+ style={[styles.timeButton, { borderColor: colors.border }]}
357
+ onPress={() => setShowTimePicker(true)}
358
+ >
359
+ <ThemedText style={[styles.timeButtonText, { color: colors.tint }]}>
360
+ {formatReminderTime(reminderTime)}
361
+ </ThemedText>
362
+ </TouchableOpacity>
363
+ </ThemedView>
364
+ </ThemedView>
365
+
366
+ {showTimePicker && (
367
+ <DateTimePicker
368
+ value={reminderDate}
369
+ mode="time"
370
+ is24Hour
371
+ display={Platform.OS === 'ios' ? 'spinner' : 'default'}
372
+ onChange={handleReminderTimeChange}
373
+ />
374
+ )}
375
+
376
+ <TouchableOpacity
377
+ style={[styles.option, { borderBottomColor: colors.border }]}
378
+ onPress={handleTestNotification}
379
+ >
380
+ <ThemedText style={styles.optionText}>Send Test Notification</ThemedText>
381
+ <ThemedText style={styles.optionDescription}>
382
+ Test your notification settings
383
+ </ThemedText>
384
+ </TouchableOpacity>
385
+ </>
324
386
)}
325
387
</ThemedView>
326
388
@@ -503,6 +565,16 @@
503
565
justifyContent: 'space-between',
504
566
alignItems: 'center',
505
567
},
568
+ timeButton: {
569
+ paddingVertical: 8,
570
+ paddingHorizontal: 16,
571
+ borderRadius: 8,
572
+ borderWidth: 1,
573
+ },
574
+ timeButtonText: {
575
+ fontSize: 16,
576
+ fontWeight: '600',
577
+ },
506
578
optionTextContainer: {
507
579
flex: 1,
508
580
},
MODIFY
app/_layout.tsx
+8 -0
@@ -1,12 +1,14 @@
1
1
import { DarkTheme, DefaultTheme, ThemeProvider as NavigationThemeProvider } from '@react-navigation/native';
2
2
import { Stack } from 'expo-router';
3
3
import { StatusBar } from 'expo-status-bar';
4
+import { useEffect } from 'react';
4
5
import { SafeAreaProvider } from 'react-native-safe-area-context';
5
6
import 'react-native-reanimated';
6
7
import { GestureHandlerRootView } from 'react-native-gesture-handler';
7
8
8
9
import { useColorScheme } from '@/hooks/use-color-scheme';
9
10
import { ThemeProvider } from '@/contexts/theme-context';
11
+import { notificationService } from '@/services';
10
12
11
13
function RootLayoutNav() {
12
14
const colorScheme = useColorScheme();
@@ -41,6 +43,12 @@
41
43
}
42
44
43
45
export default function RootLayout() {
46
+ useEffect(() => {
47
+ // Refresh the daily reminder on launch so its task count and time stay
48
+ // current if one is already scheduled.
49
+ notificationService.refreshDailyNotificationIfEnabled();
50
+ }, []);
51
+
44
52
return (
45
53
<GestureHandlerRootView style={{ flex: 1 }}>
46
54
<SafeAreaProvider>
MODIFY
package-lock.json
+2414 -68
@@ -47,9 +47,12 @@
47
47
"webdav": "^5.8.0"
48
48
},
49
49
"devDependencies": {
50
+ "@types/jest": "^29.5.12",
50
51
"@types/react": "~19.1.0",
51
52
"eslint": "^9.25.0",
52
53
"eslint-config-expo": "~10.0.0",
54
+ "jest": "^29.7.0",
55
+ "jest-expo": "~54.0.0",
53
56
"typescript": "~5.9.2"
54
57
}
55
58
},
@@ -95,7 +98,6 @@
95
98
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
96
99
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
97
100
"license": "MIT",
98
- "peer": true,
99
101
"dependencies": {
100
102
"@babel/code-frame": "^7.27.1",
101
103
"@babel/generator": "^7.28.5",
@@ -349,9 +351,9 @@
349
351
}
350
352
},
351
353
"node_modules/@babel/helper-validator-identifier": {
352
- "version": "7.28.5",
353
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
354
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
354
+ "version": "7.29.7",
355
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
356
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
355
357
"license": "MIT",
356
358
"engines": {
357
359
"node": ">=6.9.0"
@@ -1477,7 +1479,6 @@
1477
1479
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
1478
1480
"integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
1479
1481
"license": "MIT",
1480
- "peer": true,
1481
1482
"engines": {
1482
1483
"node": ">=6.9.0"
1483
1484
}
@@ -1546,6 +1547,13 @@
1546
1547
"node": ">=6.9.0"
1547
1548
}
1548
1549
},
1550
+ "node_modules/@bcoe/v8-coverage": {
1551
+ "version": "0.2.3",
1552
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
1553
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
1554
+ "dev": true,
1555
+ "license": "MIT"
1556
+ },
1549
1557
"node_modules/@buttercup/fetch": {
1550
1558
"version": "0.2.1",
1551
1559
"resolved": "https://registry.npmjs.org/@buttercup/fetch/-/fetch-0.2.1.tgz",
@@ -1775,40 +1783,40 @@
1775
1783
}
1776
1784
},
1777
1785
"node_modules/@expo/config": {
1778
- "version": "12.0.10",
1779
- "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.10.tgz",
1780
- "integrity": "sha512-lJMof5Nqakq1DxGYlghYB/ogSBjmv4Fxn1ovyDmcjlRsQdFCXgu06gEUogkhPtc9wBt9WlTTfqENln5HHyLW6w==",
1786
+ "version": "12.0.13",
1787
+ "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz",
1788
+ "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==",
1781
1789
"license": "MIT",
1782
1790
"dependencies": {
1783
1791
"@babel/code-frame": "~7.10.4",
1784
- "@expo/config-plugins": "~54.0.2",
1785
- "@expo/config-types": "^54.0.8",
1786
- "@expo/json-file": "^10.0.7",
1792
+ "@expo/config-plugins": "~54.0.4",
1793
+ "@expo/config-types": "^54.0.10",
1794
+ "@expo/json-file": "^10.0.8",
1787
1795
"deepmerge": "^4.3.1",
1788
1796
"getenv": "^2.0.0",
1789
- "glob": "^10.4.2",
1797
+ "glob": "^13.0.0",
1790
1798
"require-from-string": "^2.0.2",
1791
1799
"resolve-from": "^5.0.0",
1792
1800
"resolve-workspace-root": "^2.0.0",
1793
1801
"semver": "^7.6.0",
1794
1802
"slugify": "^1.3.4",
1795
- "sucrase": "3.35.0"
1803
+ "sucrase": "~3.35.1"
1796
1804
}
1797
1805
},
1798
1806
"node_modules/@expo/config-plugins": {
1799
- "version": "54.0.2",
1800
- "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-54.0.2.tgz",
1801
- "integrity": "sha512-jD4qxFcURQUVsUFGMcbo63a/AnviK8WUGard+yrdQE3ZrB/aurn68SlApjirQQLEizhjI5Ar2ufqflOBlNpyPg==",
1807
+ "version": "54.0.4",
1808
+ "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-54.0.4.tgz",
1809
+ "integrity": "sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q==",
1802
1810
"license": "MIT",
1803
1811
"dependencies": {
1804
- "@expo/config-types": "^54.0.8",
1805
- "@expo/json-file": "~10.0.7",
1806
- "@expo/plist": "^0.4.7",
1812
+ "@expo/config-types": "^54.0.10",
1813
+ "@expo/json-file": "~10.0.8",
1814
+ "@expo/plist": "^0.4.8",
1807
1815
"@expo/sdk-runtime-versions": "^1.0.0",
1808
1816
"chalk": "^4.1.2",
1809
1817
"debug": "^4.3.5",
1810
1818
"getenv": "^2.0.0",
1811
- "glob": "^10.4.2",
1819
+ "glob": "^13.0.0",
1812
1820
"resolve-from": "^5.0.0",
1813
1821
"semver": "^7.5.4",
1814
1822
"slash": "^3.0.0",
@@ -1817,6 +1825,84 @@
1817
1825
"xml2js": "0.6.0"
1818
1826
}
1819
1827
},
1828
+ "node_modules/@expo/config-plugins/node_modules/balanced-match": {
1829
+ "version": "4.0.4",
1830
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
1831
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
1832
+ "license": "MIT",
1833
+ "engines": {
1834
+ "node": "18 || 20 || >=22"
1835
+ }
1836
+ },
1837
+ "node_modules/@expo/config-plugins/node_modules/brace-expansion": {
1838
+ "version": "5.0.6",
1839
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz",
1840
+ "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==",
1841
+ "license": "MIT",
1842
+ "dependencies": {
1843
+ "balanced-match": "^4.0.2"
1844
+ },
1845
+ "engines": {
1846
+ "node": "18 || 20 || >=22"
1847
+ }
1848
+ },
1849
+ "node_modules/@expo/config-plugins/node_modules/glob": {
1850
+ "version": "13.0.6",
1851
+ "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz",
1852
+ "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==",
1853
+ "license": "BlueOak-1.0.0",
1854
+ "dependencies": {
1855
+ "minimatch": "^10.2.2",
1856
+ "minipass": "^7.1.3",
1857
+ "path-scurry": "^2.0.2"
1858
+ },
1859
+ "engines": {
1860
+ "node": "18 || 20 || >=22"
1861
+ },
1862
+ "funding": {
1863
+ "url": "https://github.com/sponsors/isaacs"
1864
+ }
1865
+ },
1866
+ "node_modules/@expo/config-plugins/node_modules/lru-cache": {
1867
+ "version": "11.5.1",
1868
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz",
1869
+ "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==",
1870
+ "license": "BlueOak-1.0.0",
1871
+ "engines": {
1872
+ "node": "20 || >=22"
1873
+ }
1874
+ },
1875
+ "node_modules/@expo/config-plugins/node_modules/minimatch": {
1876
+ "version": "10.2.5",
1877
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
1878
+ "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
1879
+ "license": "BlueOak-1.0.0",
1880
+ "dependencies": {
1881
+ "brace-expansion": "^5.0.5"
1882
+ },
1883
+ "engines": {
1884
+ "node": "18 || 20 || >=22"
1885
+ },
1886
+ "funding": {
1887
+ "url": "https://github.com/sponsors/isaacs"
1888
+ }
1889
+ },
1890
+ "node_modules/@expo/config-plugins/node_modules/path-scurry": {
1891
+ "version": "2.0.2",
1892
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz",
1893
+ "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==",
1894
+ "license": "BlueOak-1.0.0",
1895
+ "dependencies": {
1896
+ "lru-cache": "^11.0.0",
1897
+ "minipass": "^7.1.2"
1898
+ },
1899
+ "engines": {
1900
+ "node": "18 || 20 || >=22"
1901
+ },
1902
+ "funding": {
1903
+ "url": "https://github.com/sponsors/isaacs"
1904
+ }
1905
+ },
1820
1906
"node_modules/@expo/config-plugins/node_modules/semver": {
1821
1907
"version": "7.7.3",
1822
1908
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
@@ -1830,9 +1916,9 @@
1830
1916
}
1831
1917
},
1832
1918
"node_modules/@expo/config-types": {
1833
- "version": "54.0.8",
1834
- "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-54.0.8.tgz",
1835
- "integrity": "sha512-lyIn/x/Yz0SgHL7IGWtgTLg6TJWC9vL7489++0hzCHZ4iGjVcfZmPTUfiragZ3HycFFj899qN0jlhl49IHa94A==",
1919
+ "version": "54.0.10",
1920
+ "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-54.0.10.tgz",
1921
+ "integrity": "sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==",
1836
1922
"license": "MIT"
1837
1923
},
1838
1924
"node_modules/@expo/config/node_modules/@babel/code-frame": {
@@ -1844,6 +1930,108 @@
1844
1930
"@babel/highlight": "^7.10.4"
1845
1931
}
1846
1932
},
1933
+ "node_modules/@expo/config/node_modules/@expo/json-file": {
1934
+ "version": "10.2.0",
1935
+ "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.2.0.tgz",
1936
+ "integrity": "sha512-S6XzKe3R9GQeHiUPXc3xJjOv2VJhOEwFYf7xdC2z2cUqt3kZJ9mSO877sNQloVdnW/SUCtPY3bexlM7nwq+CAQ==",
1937
+ "license": "MIT",
1938
+ "dependencies": {
1939
+ "@babel/code-frame": "^7.20.0",
1940
+ "json5": "^2.2.3"
1941
+ }
1942
+ },
1943
+ "node_modules/@expo/config/node_modules/@expo/json-file/node_modules/@babel/code-frame": {
1944
+ "version": "7.29.7",
1945
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
1946
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
1947
+ "license": "MIT",
1948
+ "dependencies": {
1949
+ "@babel/helper-validator-identifier": "^7.29.7",
1950
+ "js-tokens": "^4.0.0",
1951
+ "picocolors": "^1.1.1"
1952
+ },
1953
+ "engines": {
1954
+ "node": ">=6.9.0"
1955
+ }
1956
+ },
1957
+ "node_modules/@expo/config/node_modules/balanced-match": {
1958
+ "version": "4.0.4",
1959
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
1960
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
1961
+ "license": "MIT",
1962
+ "engines": {
1963
+ "node": "18 || 20 || >=22"
1964
+ }
1965
+ },
1966
+ "node_modules/@expo/config/node_modules/brace-expansion": {
1967
+ "version": "5.0.6",
1968
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz",
1969
+ "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==",
1970
+ "license": "MIT",
1971
+ "dependencies": {
1972
+ "balanced-match": "^4.0.2"
1973
+ },
1974
+ "engines": {
1975
+ "node": "18 || 20 || >=22"
1976
+ }
1977
+ },
1978
+ "node_modules/@expo/config/node_modules/glob": {
1979
+ "version": "13.0.6",
1980
+ "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz",
1981
+ "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==",
1982
+ "license": "BlueOak-1.0.0",
1983
+ "dependencies": {
1984
+ "minimatch": "^10.2.2",
1985
+ "minipass": "^7.1.3",
1986
+ "path-scurry": "^2.0.2"
1987
+ },
1988
+ "engines": {
1989
+ "node": "18 || 20 || >=22"
1990
+ },
1991
+ "funding": {
1992
+ "url": "https://github.com/sponsors/isaacs"
1993
+ }
1994
+ },
1995
+ "node_modules/@expo/config/node_modules/lru-cache": {
1996
+ "version": "11.5.1",
1997
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz",
1998
+ "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==",
1999
+ "license": "BlueOak-1.0.0",
2000
+ "engines": {
2001
+ "node": "20 || >=22"
2002
+ }
2003
+ },
2004
+ "node_modules/@expo/config/node_modules/minimatch": {
2005
+ "version": "10.2.5",
2006
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
2007
+ "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
2008
+ "license": "BlueOak-1.0.0",
2009
+ "dependencies": {
2010
+ "brace-expansion": "^5.0.5"
2011
+ },
2012
+ "engines": {
2013
+ "node": "18 || 20 || >=22"
2014
+ },
2015
+ "funding": {
2016
+ "url": "https://github.com/sponsors/isaacs"
2017
+ }
2018
+ },
2019
+ "node_modules/@expo/config/node_modules/path-scurry": {
2020
+ "version": "2.0.2",
2021
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz",
2022
+ "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==",
2023
+ "license": "BlueOak-1.0.0",
2024
+ "dependencies": {
2025
+ "lru-cache": "^11.0.0",
2026
+ "minipass": "^7.1.2"
2027
+ },
2028
+ "engines": {
2029
+ "node": "18 || 20 || >=22"
2030
+ },
2031
+ "funding": {
2032
+ "url": "https://github.com/sponsors/isaacs"
2033
+ }
2034
+ },
1847
2035
"node_modules/@expo/config/node_modules/semver": {
1848
2036
"version": "7.7.3",
1849
2037
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
@@ -1999,9 +2187,9 @@
1999
2187
}
2000
2188
},
2001
2189
"node_modules/@expo/json-file": {
2002
- "version": "10.0.7",
2003
- "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.7.tgz",
2004
- "integrity": "sha512-z2OTC0XNO6riZu98EjdNHC05l51ySeTto6GP7oSQrCvQgG9ARBwD1YvMQaVZ9wU7p/4LzSf1O7tckL3B45fPpw==",
2190
+ "version": "10.0.16",
2191
+ "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.16.tgz",
2192
+ "integrity": "sha512-fcVkWEj+hLuP2yt5W0aw6LmDRqSPWDLUSxOMcmFeV+algmIF59sQVKCwB9btjQLd4V6x9N0pISkQEkBubUHrCw==",
2005
2193
"license": "MIT",
2006
2194
"dependencies": {
2007
2195
"@babel/code-frame": "~7.10.4",
@@ -2189,9 +2377,9 @@
2189
2377
}
2190
2378
},
2191
2379
"node_modules/@expo/plist": {
2192
- "version": "0.4.7",
2193
- "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.7.tgz",
2194
- "integrity": "sha512-dGxqHPvCZKeRKDU1sJZMmuyVtcASuSYh1LPFVaM1DuffqPL36n6FMEL0iUqq2Tx3xhWk8wCnWl34IKplUjJDdA==",
2380
+ "version": "0.4.9",
2381
+ "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.9.tgz",
2382
+ "integrity": "sha512-MPVpmKGfnQEnrCzgxuXcmPP/y/t6AVm+DcSb2Myp21LKWv1N3l8uFxMggesfF4ixAxkRlGmMMx9GyDC9M+XklQ==",
2195
2383
"license": "MIT",
2196
2384
"dependencies": {
2197
2385
"@xmldom/xmldom": "^0.8.8",
@@ -2507,6 +2695,101 @@
2507
2695
"node": ">=8"
2508
2696
}
2509
2697
},
2698
+ "node_modules/@jest/console": {
2699
+ "version": "29.7.0",
2700
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
2701
+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
2702
+ "dev": true,
2703
+ "license": "MIT",
2704
+ "dependencies": {
2705
+ "@jest/types": "^29.6.3",
2706
+ "@types/node": "*",
2707
+ "chalk": "^4.0.0",
2708
+ "jest-message-util": "^29.7.0",
2709
+ "jest-util": "^29.7.0",
2710
+ "slash": "^3.0.0"
2711
+ },
2712
+ "engines": {
2713
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
2714
+ }
2715
+ },
2716
+ "node_modules/@jest/core": {
2717
+ "version": "29.7.0",
2718
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
2719
+ "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
2720
+ "dev": true,
2721
+ "license": "MIT",
2722
+ "dependencies": {
2723
+ "@jest/console": "^29.7.0",
2724
+ "@jest/reporters": "^29.7.0",
2725
+ "@jest/test-result": "^29.7.0",
2726
+ "@jest/transform": "^29.7.0",
2727
+ "@jest/types": "^29.6.3",
2728
+ "@types/node": "*",
2729
+ "ansi-escapes": "^4.2.1",
2730
+ "chalk": "^4.0.0",
2731
+ "ci-info": "^3.2.0",
2732
+ "exit": "^0.1.2",
2733
+ "graceful-fs": "^4.2.9",
2734
+ "jest-changed-files": "^29.7.0",
2735
+ "jest-config": "^29.7.0",
2736
+ "jest-haste-map": "^29.7.0",
2737
+ "jest-message-util": "^29.7.0",
2738
+ "jest-regex-util": "^29.6.3",
2739
+ "jest-resolve": "^29.7.0",
2740
+ "jest-resolve-dependencies": "^29.7.0",
2741
+ "jest-runner": "^29.7.0",
2742
+ "jest-runtime": "^29.7.0",
2743
+ "jest-snapshot": "^29.7.0",
2744
+ "jest-util": "^29.7.0",
2745
+ "jest-validate": "^29.7.0",
2746
+ "jest-watcher": "^29.7.0",
2747
+ "micromatch": "^4.0.4",
2748
+ "pretty-format": "^29.7.0",
2749
+ "slash": "^3.0.0",
2750
+ "strip-ansi": "^6.0.0"
2751
+ },
2752
+ "engines": {
2753
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
2754
+ },
2755
+ "peerDependencies": {
2756
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
2757
+ },
2758
+ "peerDependenciesMeta": {
2759
+ "node-notifier": {
2760
+ "optional": true
2761
+ }
2762
+ }
2763
+ },
2764
+ "node_modules/@jest/core/node_modules/ci-info": {
2765
+ "version": "3.9.0",
2766
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
2767
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
2768
+ "dev": true,
2769
+ "funding": [
2770
+ {
2771
+ "type": "github",
2772
+ "url": "https://github.com/sponsors/sibiraj-s"
2773
+ }
2774
+ ],
2775
+ "license": "MIT",
2776
+ "engines": {
2777
+ "node": ">=8"
2778
+ }
2779
+ },
2780
+ "node_modules/@jest/core/node_modules/strip-ansi": {
2781
+ "version": "6.0.1",
2782
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2783
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2784
+ "dev": true,
2785
+ "license": "MIT",
2786
+ "dependencies": {
2787
+ "ansi-regex": "^5.0.1"
2788
+ },
2789
+ "engines": {
2790
+ "node": ">=8"
2791
+ }
2792
+ },
2510
2793
"node_modules/@jest/create-cache-key-function": {
2511
2794
"version": "29.7.0",
2512
2795
"resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz",
@@ -2534,6 +2817,33 @@
2534
2817
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
2535
2818
}
2536
2819
},
2820
+ "node_modules/@jest/expect": {
2821
+ "version": "29.7.0",
2822
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
2823
+ "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
2824
+ "dev": true,
2825
+ "license": "MIT",
2826
+ "dependencies": {
2827
+ "expect": "^29.7.0",
2828
+ "jest-snapshot": "^29.7.0"
2829
+ },
2830
+ "engines": {
2831
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
2832
+ }
2833
+ },
2834
+ "node_modules/@jest/expect-utils": {
2835
+ "version": "29.7.0",
2836
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
2837
+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
2838
+ "dev": true,
2839
+ "license": "MIT",
2840
+ "dependencies": {
2841
+ "jest-get-type": "^29.6.3"
2842
+ },
2843
+ "engines": {
2844
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
2845
+ }
2846
+ },
2537
2847
"node_modules/@jest/fake-timers": {
2538
2848
"version": "29.7.0",
2539
2849
"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
@@ -2551,6 +2861,131 @@
2551
2861
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
2552
2862
}
2553
2863
},
2864
+ "node_modules/@jest/globals": {
2865
+ "version": "29.7.0",
2866
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
2867
+ "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
2868
+ "dev": true,
2869
+ "license": "MIT",
2870
+ "dependencies": {
2871
+ "@jest/environment": "^29.7.0",
2872
+ "@jest/expect": "^29.7.0",
2873
+ "@jest/types": "^29.6.3",
2874
+ "jest-mock": "^29.7.0"
2875
+ },
2876
+ "engines": {
2877
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
2878
+ }
2879
+ },
2880
+ "node_modules/@jest/reporters": {
2881
+ "version": "29.7.0",
2882
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
2883
+ "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
2884
+ "dev": true,
2885
+ "license": "MIT",
2886
+ "dependencies": {
2887
+ "@bcoe/v8-coverage": "^0.2.3",
2888
+ "@jest/console": "^29.7.0",
2889
+ "@jest/test-result": "^29.7.0",
2890
+ "@jest/transform": "^29.7.0",
2891
+ "@jest/types": "^29.6.3",
2892
+ "@jridgewell/trace-mapping": "^0.3.18",
2893
+ "@types/node": "*",
2894
+ "chalk": "^4.0.0",
2895
+ "collect-v8-coverage": "^1.0.0",
2896
+ "exit": "^0.1.2",
2897
+ "glob": "^7.1.3",
2898
+ "graceful-fs": "^4.2.9",
2899
+ "istanbul-lib-coverage": "^3.0.0",
2900
+ "istanbul-lib-instrument": "^6.0.0",
2901
+ "istanbul-lib-report": "^3.0.0",
2902
+ "istanbul-lib-source-maps": "^4.0.0",
2903
+ "istanbul-reports": "^3.1.3",
2904
+ "jest-message-util": "^29.7.0",
2905
+ "jest-util": "^29.7.0",
2906
+ "jest-worker": "^29.7.0",
2907
+ "slash": "^3.0.0",
2908
+ "string-length": "^4.0.1",
2909
+ "strip-ansi": "^6.0.0",
2910
+ "v8-to-istanbul": "^9.0.1"
2911
+ },
2912
+ "engines": {
2913
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
2914
+ },
2915
+ "peerDependencies": {
2916
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
2917
+ },
2918
+ "peerDependenciesMeta": {
2919
+ "node-notifier": {
2920
+ "optional": true
2921
+ }
2922
+ }
2923
+ },
2924
+ "node_modules/@jest/reporters/node_modules/glob": {
2925
+ "version": "7.2.3",
2926
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
2927
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
2928
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
2929
+ "dev": true,
2930
+ "license": "ISC",
2931
+ "dependencies": {
2932
+ "fs.realpath": "^1.0.0",
2933
+ "inflight": "^1.0.4",
2934
+ "inherits": "2",
2935
+ "minimatch": "^3.1.1",
2936
+ "once": "^1.3.0",
2937
+ "path-is-absolute": "^1.0.0"
2938
+ },
2939
+ "engines": {
2940
+ "node": "*"
2941
+ },
2942
+ "funding": {
2943
+ "url": "https://github.com/sponsors/isaacs"
2944
+ }
2945
+ },
2946
+ "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": {
2947
+ "version": "6.0.3",
2948
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
2949
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
2950
+ "dev": true,
2951
+ "license": "BSD-3-Clause",
2952
+ "dependencies": {
2953
+ "@babel/core": "^7.23.9",
2954
+ "@babel/parser": "^7.23.9",
2955
+ "@istanbuljs/schema": "^0.1.3",
2956
+ "istanbul-lib-coverage": "^3.2.0",
2957
+ "semver": "^7.5.4"
2958
+ },
2959
+ "engines": {
2960
+ "node": ">=10"
2961
+ }
2962
+ },
2963
+ "node_modules/@jest/reporters/node_modules/semver": {
2964
+ "version": "7.8.4",
2965
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz",
2966
+ "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==",
2967
+ "dev": true,
2968
+ "license": "ISC",
2969
+ "bin": {
2970
+ "semver": "bin/semver.js"
2971
+ },
2972
+ "engines": {
2973
+ "node": ">=10"
2974
+ }
2975
+ },
2976
+ "node_modules/@jest/reporters/node_modules/strip-ansi": {
2977
+ "version": "6.0.1",
2978
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2979
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2980
+ "dev": true,
2981
+ "license": "MIT",
2982
+ "dependencies": {
2983
+ "ansi-regex": "^5.0.1"
2984
+ },
2985
+ "engines": {
2986
+ "node": ">=8"
2987
+ }
2988
+ },
2554
2989
"node_modules/@jest/schemas": {
2555
2990
"version": "29.6.3",
2556
2991
"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
@@ -2563,6 +2998,53 @@
2563
2998
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
2564
2999
}
2565
3000
},
3001
+ "node_modules/@jest/source-map": {
3002
+ "version": "29.6.3",
3003
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
3004
+ "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
3005
+ "dev": true,
3006
+ "license": "MIT",
3007
+ "dependencies": {
3008
+ "@jridgewell/trace-mapping": "^0.3.18",
3009
+ "callsites": "^3.0.0",
3010
+ "graceful-fs": "^4.2.9"
3011
+ },
3012
+ "engines": {
3013
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
3014
+ }
3015
+ },
3016
+ "node_modules/@jest/test-result": {
3017
+ "version": "29.7.0",
3018
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
3019
+ "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
3020
+ "dev": true,
3021
+ "license": "MIT",
3022
+ "dependencies": {
3023
+ "@jest/console": "^29.7.0",
3024
+ "@jest/types": "^29.6.3",
3025
+ "@types/istanbul-lib-coverage": "^2.0.0",
3026
+ "collect-v8-coverage": "^1.0.0"
3027
+ },
3028
+ "engines": {
3029
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
3030
+ }
3031
+ },
3032
+ "node_modules/@jest/test-sequencer": {
3033
+ "version": "29.7.0",
3034
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
3035
+ "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
3036
+ "dev": true,
3037
+ "license": "MIT",
3038
+ "dependencies": {
3039
+ "@jest/test-result": "^29.7.0",
3040
+ "graceful-fs": "^4.2.9",
3041
+ "jest-haste-map": "^29.7.0",
3042
+ "slash": "^3.0.0"
3043
+ },
3044
+ "engines": {
3045
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
3046
+ }
3047
+ },
2566
3048
"node_modules/@jest/transform": {
2567
3049
"version": "29.7.0",
2568
3050
"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
@@ -3266,7 +3748,6 @@
3266
3748
"resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-7.1.20.tgz",
3267
3749
"integrity": "sha512-15luFq+35M2IOMHgbTJ0XDkPY7gm3YlR3yQKTuOTOHs+EeAUX71DlUuqcWMRqB0tt+OT6HimDQR7OboTB0N30g==",
3268
3750
"license": "MIT",
3269
- "peer": true,
3270
3751
"dependencies": {
3271
3752
"@react-navigation/core": "^7.13.1",
3272
3753
"escape-string-regexp": "^4.0.0",
@@ -3338,6 +3819,16 @@
3338
3819
"@sinonjs/commons": "^3.0.0"
3339
3820
}
3340
3821
},
3822
+ "node_modules/@tootallnate/once": {
3823
+ "version": "2.0.1",
3824
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.1.tgz",
3825
+ "integrity": "sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==",
3826
+ "dev": true,
3827
+ "license": "MIT",
3828
+ "engines": {
3829
+ "node": ">= 10"
3830
+ }
3831
+ },
3341
3832
"node_modules/@tybys/wasm-util": {
3342
3833
"version": "0.10.1",
3343
3834
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
@@ -3436,6 +3927,29 @@
3436
3927
"@types/istanbul-lib-report": "*"
3437
3928
}
3438
3929
},
3930
+ "node_modules/@types/jest": {
3931
+ "version": "29.5.14",
3932
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz",
3933
+ "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==",
3934
+ "dev": true,
3935
+ "license": "MIT",
3936
+ "dependencies": {
3937
+ "expect": "^29.0.0",
3938
+ "pretty-format": "^29.0.0"
3939
+ }
3940
+ },
3941
+ "node_modules/@types/jsdom": {
3942
+ "version": "20.0.1",
3943
+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz",
3944
+ "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==",
3945
+ "dev": true,
3946
+ "license": "MIT",
3947
+ "dependencies": {
3948
+ "@types/node": "*",
3949
+ "@types/tough-cookie": "*",
3950
+ "parse5": "^7.0.0"
3951
+ }
3952
+ },
3439
3953
"node_modules/@types/json-schema": {
3440
3954
"version": "7.0.15",
3441
3955
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -3465,7 +3979,6 @@
3465
3979
"integrity": "sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==",
3466
3980
"devOptional": true,
3467
3981
"license": "MIT",
3468
- "peer": true,
3469
3982
"dependencies": {
3470
3983
"csstype": "^3.0.2"
3471
3984
}
@@ -3476,6 +3989,13 @@
3476
3989
"integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
3477
3990
"license": "MIT"
3478
3991
},
3992
+ "node_modules/@types/tough-cookie": {
3993
+ "version": "4.0.5",
3994
+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
3995
+ "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
3996
+ "dev": true,
3997
+ "license": "MIT"
3998
+ },
3479
3999
"node_modules/@types/yargs": {
3480
4000
"version": "17.0.34",
3481
4001
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.34.tgz",
@@ -3537,7 +4057,6 @@
3537
4057
"integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==",
3538
4058
"dev": true,
3539
4059
"license": "MIT",
3540
- "peer": true,
3541
4060
"dependencies": {
3542
4061
"@typescript-eslint/scope-manager": "8.46.3",
3543
4062
"@typescript-eslint/types": "8.46.3",
@@ -4070,6 +4589,14 @@
4070
4589
"node": ">=10.0.0"
4071
4590
}
4072
4591
},
4592
+ "node_modules/abab": {
4593
+ "version": "2.0.6",
4594
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
4595
+ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
4596
+ "deprecated": "Use your platform's native atob() and btoa() methods instead",
4597
+ "dev": true,
4598
+ "license": "BSD-3-Clause"
4599
+ },
4073
4600
"node_modules/abort-controller": {
4074
4601
"version": "3.0.0",
4075
4602
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
@@ -4100,7 +4627,6 @@
4100
4627
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
4101
4628
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
4102
4629
"license": "MIT",
4103
- "peer": true,
4104
4630
"bin": {
4105
4631
"acorn": "bin/acorn"
4106
4632
},
@@ -4108,6 +4634,17 @@
4108
4634
"node": ">=0.4.0"
4109
4635
}
4110
4636
},
4637
+ "node_modules/acorn-globals": {
4638
+ "version": "7.0.1",
4639
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz",
4640
+ "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==",
4641
+ "dev": true,
4642
+ "license": "MIT",
4643
+ "dependencies": {
4644
+ "acorn": "^8.1.0",
4645
+ "acorn-walk": "^8.0.2"
4646
+ }
4647
+ },
4111
4648
"node_modules/acorn-jsx": {
4112
4649
"version": "5.3.2",
4113
4650
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -4118,6 +4655,19 @@
4118
4655
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
4119
4656
}
4120
4657
},
4658
+ "node_modules/acorn-walk": {
4659
+ "version": "8.3.5",
4660
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz",
4661
+ "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==",
4662
+ "dev": true,
4663
+ "license": "MIT",
4664
+ "dependencies": {
4665
+ "acorn": "^8.11.0"
4666
+ },
4667
+ "engines": {
4668
+ "node": ">=0.4.0"
4669
+ }
4670
+ },
4121
4671
"node_modules/agent-base": {
4122
4672
"version": "7.1.4",
4123
4673
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
@@ -4439,6 +4989,13 @@
4439
4989
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
4440
4990
"license": "MIT"
4441
4991
},
4992
+ "node_modules/asynckit": {
4993
+ "version": "0.4.0",
4994
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
4995
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
4996
+ "dev": true,
4997
+ "license": "MIT"
4998
+ },
4442
4999
"node_modules/available-typed-arrays": {
4443
5000
"version": "1.0.7",
4444
5001
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
@@ -4810,7 +5367,6 @@
4810
5367
}
4811
5368
],
4812
5369
"license": "MIT",
4813
- "peer": true,
4814
5370
"dependencies": {
4815
5371
"baseline-browser-mapping": "^2.8.19",
4816
5372
"caniuse-lite": "^1.0.30001751",
@@ -4984,6 +5540,16 @@
4984
5540
"url": "https://github.com/chalk/chalk?sponsor=1"
4985
5541
}
4986
5542
},
5543
+ "node_modules/char-regex": {
5544
+ "version": "1.0.2",
5545
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
5546
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
5547
+ "dev": true,
5548
+ "license": "MIT",
5549
+ "engines": {
5550
+ "node": ">=10"
5551
+ }
5552
+ },
4987
5553
"node_modules/charenc": {
4988
5554
"version": "0.0.2",
4989
5555
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
@@ -5040,6 +5606,13 @@
5040
5606
"integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
5041
5607
"license": "MIT"
5042
5608
},
5609
+ "node_modules/cjs-module-lexer": {
5610
+ "version": "1.4.3",
5611
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
5612
+ "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==",
5613
+ "dev": true,
5614
+ "license": "MIT"
5615
+ },
5043
5616
"node_modules/cli-cursor": {
5044
5617
"version": "2.1.0",
5045
5618
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
@@ -5142,6 +5715,24 @@
5142
5715
"node": ">=0.8"
5143
5716
}
5144
5717
},
5718
+ "node_modules/co": {
5719
+ "version": "4.6.0",
5720
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
5721
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
5722
+ "dev": true,
5723
+ "license": "MIT",
5724
+ "engines": {
5725
+ "iojs": ">= 1.0.0",
5726
+ "node": ">= 0.12.0"
5727
+ }
5728
+ },
5729
+ "node_modules/collect-v8-coverage": {
5730
+ "version": "1.0.3",
5731
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
5732
+ "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==",
5733
+ "dev": true,
5734
+ "license": "MIT"
5735
+ },
5145
5736
"node_modules/color": {
5146
5737
"version": "4.2.3",
5147
5738
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
@@ -5183,6 +5774,19 @@
5183
5774
"simple-swizzle": "^0.2.2"
5184
5775
}
5185
5776
},
5777
+ "node_modules/combined-stream": {
5778
+ "version": "1.0.8",
5779
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
5780
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
5781
+ "dev": true,
5782
+ "license": "MIT",
5783
+ "dependencies": {
5784
+ "delayed-stream": "~1.0.0"
5785
+ },
5786
+ "engines": {
5787
+ "node": ">= 0.8"
5788
+ }
5789
+ },
5186
5790
"node_modules/commander": {
5187
5791
"version": "7.2.0",
5188
5792
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
@@ -5301,6 +5905,28 @@
5301
5905
"url": "https://opencollective.com/core-js"
5302
5906
}
5303
5907
},
5908
+ "node_modules/create-jest": {
5909
+ "version": "29.7.0",
5910
+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
5911
+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
5912
+ "dev": true,
5913
+ "license": "MIT",
5914
+ "dependencies": {
5915
+ "@jest/types": "^29.6.3",
5916
+ "chalk": "^4.0.0",
5917
+ "exit": "^0.1.2",
5918
+ "graceful-fs": "^4.2.9",
5919
+ "jest-config": "^29.7.0",
5920
+ "jest-util": "^29.7.0",
5921
+ "prompts": "^2.0.1"
5922
+ },
5923
+ "bin": {
5924
+ "create-jest": "bin/create-jest.js"
5925
+ },
5926
+ "engines": {
5927
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
5928
+ }
5929
+ },
5304
5930
"node_modules/cross-fetch": {
5305
5931
"version": "3.2.0",
5306
5932
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz",
@@ -5351,6 +5977,33 @@
5351
5977
"hyphenate-style-name": "^1.0.3"
5352
5978
}
5353
5979
},
5980
+ "node_modules/cssom": {
5981
+ "version": "0.5.0",
5982
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
5983
+ "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==",
5984
+ "dev": true,
5985
+ "license": "MIT"
5986
+ },
5987
+ "node_modules/cssstyle": {
5988
+ "version": "2.3.0",
5989
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
5990
+ "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
5991
+ "dev": true,
5992
+ "license": "MIT",
5993
+ "dependencies": {
5994
+ "cssom": "~0.3.6"
5995
+ },
5996
+ "engines": {
5997
+ "node": ">=8"
5998
+ }
5999
+ },
6000
+ "node_modules/cssstyle/node_modules/cssom": {
6001
+ "version": "0.3.8",
6002
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
6003
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
6004
+ "dev": true,
6005
+ "license": "MIT"
6006
+ },
5354
6007
"node_modules/csstype": {
5355
6008
"version": "3.1.3",
5356
6009
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
@@ -5367,6 +6020,58 @@
5367
6020
"node": ">= 12"
5368
6021
}
5369
6022
},
6023
+ "node_modules/data-urls": {
6024
+ "version": "3.0.2",
6025
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
6026
+ "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
6027
+ "dev": true,
6028
+ "license": "MIT",
6029
+ "dependencies": {
6030
+ "abab": "^2.0.6",
6031
+ "whatwg-mimetype": "^3.0.0",
6032
+ "whatwg-url": "^11.0.0"
6033
+ },
6034
+ "engines": {
6035
+ "node": ">=12"
6036
+ }
6037
+ },
6038
+ "node_modules/data-urls/node_modules/tr46": {
6039
+ "version": "3.0.0",
6040
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
6041
+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
6042
+ "dev": true,
6043
+ "license": "MIT",
6044
+ "dependencies": {
6045
+ "punycode": "^2.1.1"
6046
+ },
6047
+ "engines": {
6048
+ "node": ">=12"
6049
+ }
6050
+ },
6051
+ "node_modules/data-urls/node_modules/webidl-conversions": {
6052
+ "version": "7.0.0",
6053
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
6054
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
6055
+ "dev": true,
6056
+ "license": "BSD-2-Clause",
6057
+ "engines": {
6058
+ "node": ">=12"
6059
+ }
6060
+ },
6061
+ "node_modules/data-urls/node_modules/whatwg-url": {
6062
+ "version": "11.0.0",
6063
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
6064
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
6065
+ "dev": true,
6066
+ "license": "MIT",
6067
+ "dependencies": {
6068
+ "tr46": "^3.0.0",
6069
+ "webidl-conversions": "^7.0.0"
6070
+ },
6071
+ "engines": {
6072
+ "node": ">=12"
6073
+ }
6074
+ },
5370
6075
"node_modules/data-view-buffer": {
5371
6076
"version": "1.0.2",
5372
6077
"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
@@ -5438,6 +6143,13 @@
5438
6143
}
5439
6144
}
5440
6145
},
6146
+ "node_modules/decimal.js": {
6147
+ "version": "10.6.0",
6148
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
6149
+ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
6150
+ "dev": true,
6151
+ "license": "MIT"
6152
+ },
5441
6153
"node_modules/decode-uri-component": {
5442
6154
"version": "0.2.2",
5443
6155
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
@@ -5447,6 +6159,21 @@
5447
6159
"node": ">=0.10"
5448
6160
}
5449
6161
},
6162
+ "node_modules/dedent": {
6163
+ "version": "1.7.2",
6164
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz",
6165
+ "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==",
6166
+ "dev": true,
6167
+ "license": "MIT",
6168
+ "peerDependencies": {
6169
+ "babel-plugin-macros": "^3.1.0"
6170
+ },
6171
+ "peerDependenciesMeta": {
6172
+ "babel-plugin-macros": {
6173
+ "optional": true
6174
+ }
6175
+ }
6176
+ },
5450
6177
"node_modules/deep-extend": {
5451
6178
"version": "0.6.0",
5452
6179
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
@@ -5527,6 +6254,16 @@
5527
6254
"url": "https://github.com/sponsors/ljharb"
5528
6255
}
5529
6256
},
6257
+ "node_modules/delayed-stream": {
6258
+ "version": "1.0.0",
6259
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
6260
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
6261
+ "dev": true,
6262
+ "license": "MIT",
6263
+ "engines": {
6264
+ "node": ">=0.4.0"
6265
+ }
6266
+ },
5530
6267
"node_modules/depd": {
5531
6268
"version": "2.0.0",
5532
6269
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -5555,12 +6292,32 @@
5555
6292
"node": ">=8"
5556
6293
}
5557
6294
},
6295
+ "node_modules/detect-newline": {
6296
+ "version": "3.1.0",
6297
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
6298
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
6299
+ "dev": true,
6300
+ "license": "MIT",
6301
+ "engines": {
6302
+ "node": ">=8"
6303
+ }
6304
+ },
5558
6305
"node_modules/detect-node-es": {
5559
6306
"version": "1.1.0",
5560
6307
"resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
5561
6308
"integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
5562
6309
"license": "MIT"
5563
6310
},
6311
+ "node_modules/diff-sequences": {
6312
+ "version": "29.6.3",
6313
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
6314
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
6315
+ "dev": true,
6316
+ "license": "MIT",
6317
+ "engines": {
6318
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
6319
+ }
6320
+ },
5564
6321
"node_modules/doctrine": {
5565
6322
"version": "2.1.0",
5566
6323
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@@ -5574,6 +6331,30 @@
5574
6331
"node": ">=0.10.0"
5575
6332
}
5576
6333
},
6334
+ "node_modules/domexception": {
6335
+ "version": "4.0.0",
6336
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
6337
+ "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
6338
+ "deprecated": "Use your platform's native DOMException instead",
6339
+ "dev": true,
6340
+ "license": "MIT",
6341
+ "dependencies": {
6342
+ "webidl-conversions": "^7.0.0"
6343
+ },
6344
+ "engines": {
6345
+ "node": ">=12"
6346
+ }
6347
+ },
6348
+ "node_modules/domexception/node_modules/webidl-conversions": {
6349
+ "version": "7.0.0",
6350
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
6351
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
6352
+ "dev": true,
6353
+ "license": "BSD-2-Clause",
6354
+ "engines": {
6355
+ "node": ">=12"
6356
+ }
6357
+ },
5577
6358
"node_modules/dotenv": {
5578
6359
"version": "16.4.7",
5579
6360
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
@@ -5633,6 +6414,19 @@
5633
6414
"integrity": "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==",
5634
6415
"license": "ISC"
5635
6416
},
6417
+ "node_modules/emittery": {
6418
+ "version": "0.13.1",
6419
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
6420
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
6421
+ "dev": true,
6422
+ "license": "MIT",
6423
+ "engines": {
6424
+ "node": ">=12"
6425
+ },
6426
+ "funding": {
6427
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
6428
+ }
6429
+ },
5636
6430
"node_modules/emoji-regex": {
5637
6431
"version": "9.2.2",
5638
6432
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
@@ -5669,6 +6463,23 @@
5669
6463
"node": ">=8"
5670
6464
}
5671
6465
},
6466
+ "node_modules/error-ex": {
6467
+ "version": "1.3.4",
6468
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
6469
+ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
6470
+ "dev": true,
6471
+ "license": "MIT",
6472
+ "dependencies": {
6473
+ "is-arrayish": "^0.2.1"
6474
+ }
6475
+ },
6476
+ "node_modules/error-ex/node_modules/is-arrayish": {
6477
+ "version": "0.2.1",
6478
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
6479
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
6480
+ "dev": true,
6481
+ "license": "MIT"
6482
+ },
5672
6483
"node_modules/error-stack-parser": {
5673
6484
"version": "2.1.4",
5674
6485
"resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
@@ -5879,13 +6690,45 @@
5879
6690
"url": "https://github.com/sponsors/sindresorhus"
5880
6691
}
5881
6692
},
6693
+ "node_modules/escodegen": {
6694
+ "version": "2.1.0",
6695
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
6696
+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
6697
+ "dev": true,
6698
+ "license": "BSD-2-Clause",
6699
+ "dependencies": {
6700
+ "esprima": "^4.0.1",
6701
+ "estraverse": "^5.2.0",
6702
+ "esutils": "^2.0.2"
6703
+ },
6704
+ "bin": {
6705
+ "escodegen": "bin/escodegen.js",
6706
+ "esgenerate": "bin/esgenerate.js"
6707
+ },
6708
+ "engines": {
6709
+ "node": ">=6.0"
6710
+ },
6711
+ "optionalDependencies": {
6712
+ "source-map": "~0.6.1"
6713
+ }
6714
+ },
6715
+ "node_modules/escodegen/node_modules/source-map": {
6716
+ "version": "0.6.1",
6717
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
6718
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
6719
+ "dev": true,
6720
+ "license": "BSD-3-Clause",
6721
+ "optional": true,
6722
+ "engines": {
6723
+ "node": ">=0.10.0"
6724
+ }
6725
+ },
5882
6726
"node_modules/eslint": {
5883
6727
"version": "9.39.1",
5884
6728
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz",
5885
6729
"integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
5886
6730
"dev": true,
5887
6731
"license": "MIT",
5888
- "peer": true,
5889
6732
"dependencies": {
5890
6733
"@eslint-community/eslint-utils": "^4.8.0",
5891
6734
"@eslint-community/regexpp": "^4.12.1",
@@ -6082,7 +6925,6 @@
6082
6925
"integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
6083
6926
"dev": true,
6084
6927
"license": "MIT",
6085
- "peer": true,
6086
6928
"dependencies": {
6087
6929
"@rtsao/scc": "^1.1.0",
6088
6930
"array-includes": "^3.1.9",
@@ -6316,12 +7158,94 @@
6316
7158
"integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==",
6317
7159
"license": "MIT"
6318
7160
},
7161
+ "node_modules/execa": {
7162
+ "version": "5.1.1",
7163
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
7164
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
7165
+ "dev": true,
7166
+ "license": "MIT",
7167
+ "dependencies": {
7168
+ "cross-spawn": "^7.0.3",
7169
+ "get-stream": "^6.0.0",
7170
+ "human-signals": "^2.1.0",
7171
+ "is-stream": "^2.0.0",
7172
+ "merge-stream": "^2.0.0",
7173
+ "npm-run-path": "^4.0.1",
7174
+ "onetime": "^5.1.2",
7175
+ "signal-exit": "^3.0.3",
7176
+ "strip-final-newline": "^2.0.0"
7177
+ },
7178
+ "engines": {
7179
+ "node": ">=10"
7180
+ },
7181
+ "funding": {
7182
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
7183
+ }
7184
+ },
7185
+ "node_modules/execa/node_modules/mimic-fn": {
7186
+ "version": "2.1.0",
7187
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
7188
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
7189
+ "dev": true,
7190
+ "license": "MIT",
7191
+ "engines": {
7192
+ "node": ">=6"
7193
+ }
7194
+ },
7195
+ "node_modules/execa/node_modules/onetime": {
7196
+ "version": "5.1.2",
7197
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
7198
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
7199
+ "dev": true,
7200
+ "license": "MIT",
7201
+ "dependencies": {
7202
+ "mimic-fn": "^2.1.0"
7203
+ },
7204
+ "engines": {
7205
+ "node": ">=6"
7206
+ },
7207
+ "funding": {
7208
+ "url": "https://github.com/sponsors/sindresorhus"
7209
+ }
7210
+ },
7211
+ "node_modules/execa/node_modules/signal-exit": {
7212
+ "version": "3.0.7",
7213
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
7214
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
7215
+ "dev": true,
7216
+ "license": "ISC"
7217
+ },
7218
+ "node_modules/exit": {
7219
+ "version": "0.1.2",
7220
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
7221
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
7222
+ "dev": true,
7223
+ "engines": {
7224
+ "node": ">= 0.8.0"
7225
+ }
7226
+ },
7227
+ "node_modules/expect": {
7228
+ "version": "29.7.0",
7229
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
7230
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
7231
+ "dev": true,
7232
+ "license": "MIT",
7233
+ "dependencies": {
7234
+ "@jest/expect-utils": "^29.7.0",
7235
+ "jest-get-type": "^29.6.3",
7236
+ "jest-matcher-utils": "^29.7.0",
7237
+ "jest-message-util": "^29.7.0",
7238
+ "jest-util": "^29.7.0"
7239
+ },
7240
+ "engines": {
7241
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
7242
+ }
7243
+ },
6319
7244
"node_modules/expo": {
6320
7245
"version": "54.0.23",
6321
7246
"resolved": "https://registry.npmjs.org/expo/-/expo-54.0.23.tgz",
6322
7247
"integrity": "sha512-b4uQoiRwQ6nwqsT2709RS15CWYNGF3eJtyr1KyLw9WuMAK7u4jjofkhRiO0+3o1C2NbV+WooyYTOZGubQQMBaQ==",
6323
7248
"license": "MIT",
6324
- "peer": true,
6325
7249
"dependencies": {
6326
7250
"@babel/runtime": "^7.20.0",
6327
7251
"@expo/cli": "54.0.16",
@@ -6398,7 +7322,6 @@
6398
7322
"resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.10.tgz",
6399
7323
"integrity": "sha512-Rhtv+X974k0Cahmvx6p7ER5+pNhBC0XbP1lRviL2J1Xl4sT2FBaIuIxF/0I0CbhOsySf0ksqc5caFweAy9Ewiw==",
6400
7324
"license": "MIT",
6401
- "peer": true,
6402
7325
"dependencies": {
6403
7326
"@expo/config": "~12.0.10",
6404
7327
"@expo/env": "~2.0.7"
@@ -6482,7 +7405,6 @@
6482
7405
"resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.9.tgz",
6483
7406
"integrity": "sha512-xCoQbR/36qqB6tew/LQ6GWICpaBmHLhg/Loix5Rku/0ZtNaXMJv08M9o1AcrdiGTn/Xf/BnLu6DgS45cWQEHZg==",
6484
7407
"license": "MIT",
6485
- "peer": true,
6486
7408
"dependencies": {
6487
7409
"fontfaceobserver": "^2.1.0"
6488
7410
},
@@ -6539,7 +7461,6 @@
6539
7461
"resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-8.0.8.tgz",
6540
7462
"integrity": "sha512-MyeMcbFDKhXh4sDD1EHwd0uxFQNAc6VCrwBkNvvvufUsTYFq3glTA9Y8a+x78CPpjNqwNAamu74yIaIz7IEJyg==",
6541
7463
"license": "MIT",
6542
- "peer": true,
6543
7464
"dependencies": {
6544
7465
"expo-constants": "~18.0.8",
6545
7466
"invariant": "^2.2.4"
@@ -7472,6 +8393,23 @@
7472
8393
"url": "https://github.com/sponsors/isaacs"
7473
8394
}
7474
8395
},
8396
+ "node_modules/form-data": {
8397
+ "version": "4.0.6",
8398
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz",
8399
+ "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==",
8400
+ "dev": true,
8401
+ "license": "MIT",
8402
+ "dependencies": {
8403
+ "asynckit": "^0.4.0",
8404
+ "combined-stream": "^1.0.8",
8405
+ "es-set-tostringtag": "^2.1.0",
8406
+ "hasown": "^2.0.4",
8407
+ "mime-types": "^2.1.35"
8408
+ },
8409
+ "engines": {
8410
+ "node": ">= 6"
8411
+ }
8412
+ },
7475
8413
"node_modules/formdata-polyfill": {
7476
8414
"version": "4.0.10",
7477
8415
"resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
@@ -7644,6 +8582,19 @@
7644
8582
"node": ">= 0.4"
7645
8583
}
7646
8584
},
8585
+ "node_modules/get-stream": {
8586
+ "version": "6.0.1",
8587
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
8588
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
8589
+ "dev": true,
8590
+ "license": "MIT",
8591
+ "engines": {
8592
+ "node": ">=10"
8593
+ },
8594
+ "funding": {
8595
+ "url": "https://github.com/sponsors/sindresorhus"
8596
+ }
8597
+ },
7647
8598
"node_modules/get-symbol-description": {
7648
8599
"version": "1.1.0",
7649
8600
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
@@ -7886,9 +8837,9 @@
7886
8837
}
7887
8838
},
7888
8839
"node_modules/hasown": {
7889
- "version": "2.0.2",
7890
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
7891
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
8840
+ "version": "2.0.4",
8841
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
8842
+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
7892
8843
"license": "MIT",
7893
8844
"dependencies": {
7894
8845
"function-bind": "^1.1.2"
@@ -7951,6 +8902,26 @@
7951
8902
"integrity": "sha512-ECg1JFG0YzehicQaogenlcs2qg6WsXQsxtnbr1i696u5tLUjtJdQAh0u2g0Q5YV45f263Ta1GnUJsc8WIfJf4Q==",
7952
8903
"license": "MIT"
7953
8904
},
8905
+ "node_modules/html-encoding-sniffer": {
8906
+ "version": "3.0.0",
8907
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
8908
+ "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
8909
+ "dev": true,
8910
+ "license": "MIT",
8911
+ "dependencies": {
8912
+ "whatwg-encoding": "^2.0.0"
8913
+ },
8914
+ "engines": {
8915
+ "node": ">=12"
8916
+ }
8917
+ },
8918
+ "node_modules/html-escaper": {
8919
+ "version": "2.0.2",
8920
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
8921
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
8922
+ "dev": true,
8923
+ "license": "MIT"
8924
+ },
7954
8925
"node_modules/http-errors": {
7955
8926
"version": "2.0.0",
7956
8927
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
@@ -7976,6 +8947,34 @@
7976
8947
"node": ">= 0.8"
7977
8948
}
7978
8949
},
8950
+ "node_modules/http-proxy-agent": {
8951
+ "version": "5.0.0",
8952
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
8953
+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
8954
+ "dev": true,
8955
+ "license": "MIT",
8956
+ "dependencies": {
8957
+ "@tootallnate/once": "2",
8958
+ "agent-base": "6",
8959
+ "debug": "4"
8960
+ },
8961
+ "engines": {
8962
+ "node": ">= 6"
8963
+ }
8964
+ },
8965
+ "node_modules/http-proxy-agent/node_modules/agent-base": {
8966
+ "version": "6.0.2",
8967
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
8968
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
8969
+ "dev": true,
8970
+ "license": "MIT",
8971
+ "dependencies": {
8972
+ "debug": "4"
8973
+ },
8974
+ "engines": {
8975
+ "node": ">= 6.0.0"
8976
+ }
8977
+ },
7979
8978
"node_modules/https-proxy-agent": {
7980
8979
"version": "7.0.6",
7981
8980
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
@@ -7989,12 +8988,35 @@
7989
8988
"node": ">= 14"
7990
8989
}
7991
8990
},
8991
+ "node_modules/human-signals": {
8992
+ "version": "2.1.0",
8993
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
8994
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
8995
+ "dev": true,
8996
+ "license": "Apache-2.0",
8997
+ "engines": {
8998
+ "node": ">=10.17.0"
8999
+ }
9000
+ },
7992
9001
"node_modules/hyphenate-style-name": {
7993
9002
"version": "1.1.0",
7994
9003
"resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz",
7995
9004
"integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==",
7996
9005
"license": "BSD-3-Clause"
7997
9006
},
9007
+ "node_modules/iconv-lite": {
9008
+ "version": "0.6.3",
9009
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
9010
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
9011
+ "dev": true,
9012
+ "license": "MIT",
9013
+ "dependencies": {
9014
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
9015
+ },
9016
+ "engines": {
9017
+ "node": ">=0.10.0"
9018
+ }
9019
+ },
7998
9020
"node_modules/ieee754": {
7999
9021
"version": "1.2.1",
8000
9022
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
@@ -8066,6 +9088,26 @@
8066
9088
"node": ">=4"
8067
9089
}
8068
9090
},
9091
+ "node_modules/import-local": {
9092
+ "version": "3.2.0",
9093
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
9094
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
9095
+ "dev": true,
9096
+ "license": "MIT",
9097
+ "dependencies": {
9098
+ "pkg-dir": "^4.2.0",
9099
+ "resolve-cwd": "^3.0.0"
9100
+ },
9101
+ "bin": {
9102
+ "import-local-fixture": "fixtures/cli.js"
9103
+ },
9104
+ "engines": {
9105
+ "node": ">=8"
9106
+ },
9107
+ "funding": {
9108
+ "url": "https://github.com/sponsors/sindresorhus"
9109
+ }
9110
+ },
8069
9111
"node_modules/imurmurhash": {
8070
9112
"version": "0.1.4",
8071
9113
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -8365,6 +9407,16 @@
8365
9407
"node": ">=8"
8366
9408
}
8367
9409
},
9410
+ "node_modules/is-generator-fn": {
9411
+ "version": "2.1.0",
9412
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
9413
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
9414
+ "dev": true,
9415
+ "license": "MIT",
9416
+ "engines": {
9417
+ "node": ">=6"
9418
+ }
9419
+ },
8368
9420
"node_modules/is-generator-function": {
8369
9421
"version": "1.1.2",
8370
9422
"resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz",
@@ -8474,6 +9526,13 @@
8474
9526
"node": ">=8"
8475
9527
}
8476
9528
},
9529
+ "node_modules/is-potential-custom-element-name": {
9530
+ "version": "1.0.1",
9531
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
9532
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
9533
+ "dev": true,
9534
+ "license": "MIT"
9535
+ },
8477
9536
"node_modules/is-regex": {
8478
9537
"version": "1.2.1",
8479
9538
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
@@ -8521,6 +9580,19 @@
8521
9580
"url": "https://github.com/sponsors/ljharb"
8522
9581
}
8523
9582
},
9583
+ "node_modules/is-stream": {
9584
+ "version": "2.0.1",
9585
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
9586
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
9587
+ "dev": true,
9588
+ "license": "MIT",
9589
+ "engines": {
9590
+ "node": ">=8"
9591
+ },
9592
+ "funding": {
9593
+ "url": "https://github.com/sponsors/sindresorhus"
9594
+ }
9595
+ },
8524
9596
"node_modules/is-string": {
8525
9597
"version": "1.1.1",
8526
9598
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
@@ -8667,6 +9739,60 @@
8667
9739
"node": ">=8"
8668
9740
}
8669
9741
},
9742
+ "node_modules/istanbul-lib-report": {
9743
+ "version": "3.0.1",
9744
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
9745
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
9746
+ "dev": true,
9747
+ "license": "BSD-3-Clause",
9748
+ "dependencies": {
9749
+ "istanbul-lib-coverage": "^3.0.0",
9750
+ "make-dir": "^4.0.0",
9751
+ "supports-color": "^7.1.0"
9752
+ },
9753
+ "engines": {
9754
+ "node": ">=10"
9755
+ }
9756
+ },
9757
+ "node_modules/istanbul-lib-source-maps": {
9758
+ "version": "4.0.1",
9759
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
9760
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
9761
+ "dev": true,
9762
+ "license": "BSD-3-Clause",
9763
+ "dependencies": {
9764
+ "debug": "^4.1.1",
9765
+ "istanbul-lib-coverage": "^3.0.0",
9766
+ "source-map": "^0.6.1"
9767
+ },
9768
+ "engines": {
9769
+ "node": ">=10"
9770
+ }
9771
+ },
9772
+ "node_modules/istanbul-lib-source-maps/node_modules/source-map": {
9773
+ "version": "0.6.1",
9774
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
9775
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
9776
+ "dev": true,
9777
+ "license": "BSD-3-Clause",
9778
+ "engines": {
9779
+ "node": ">=0.10.0"
9780
+ }
9781
+ },
9782
+ "node_modules/istanbul-reports": {
9783
+ "version": "3.2.0",
9784
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
9785
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
9786
+ "dev": true,
9787
+ "license": "BSD-3-Clause",
9788
+ "dependencies": {
9789
+ "html-escaper": "^2.0.0",
9790
+ "istanbul-lib-report": "^3.0.0"
9791
+ },
9792
+ "engines": {
9793
+ "node": ">=8"
9794
+ }
9795
+ },
8670
9796
"node_modules/iterator.prototype": {
8671
9797
"version": "1.1.5",
8672
9798
"resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
@@ -8700,6 +9826,272 @@
8700
9826
"@pkgjs/parseargs": "^0.11.0"
8701
9827
}
8702
9828
},
9829
+ "node_modules/jest": {
9830
+ "version": "29.7.0",
9831
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
9832
+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
9833
+ "dev": true,
9834
+ "license": "MIT",
9835
+ "dependencies": {
9836
+ "@jest/core": "^29.7.0",
9837
+ "@jest/types": "^29.6.3",
9838
+ "import-local": "^3.0.2",
9839
+ "jest-cli": "^29.7.0"
9840
+ },
9841
+ "bin": {
9842
+ "jest": "bin/jest.js"
9843
+ },
9844
+ "engines": {
9845
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
9846
+ },
9847
+ "peerDependencies": {
9848
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
9849
+ },
9850
+ "peerDependenciesMeta": {
9851
+ "node-notifier": {
9852
+ "optional": true
9853
+ }
9854
+ }
9855
+ },
9856
+ "node_modules/jest-changed-files": {
9857
+ "version": "29.7.0",
9858
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
9859
+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
9860
+ "dev": true,
9861
+ "license": "MIT",
9862
+ "dependencies": {
9863
+ "execa": "^5.0.0",
9864
+ "jest-util": "^29.7.0",
9865
+ "p-limit": "^3.1.0"
9866
+ },
9867
+ "engines": {
9868
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
9869
+ }
9870
+ },
9871
+ "node_modules/jest-circus": {
9872
+ "version": "29.7.0",
9873
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
9874
+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
9875
+ "dev": true,
9876
+ "license": "MIT",
9877
+ "dependencies": {
9878
+ "@jest/environment": "^29.7.0",
9879
+ "@jest/expect": "^29.7.0",
9880
+ "@jest/test-result": "^29.7.0",
9881
+ "@jest/types": "^29.6.3",
9882
+ "@types/node": "*",
9883
+ "chalk": "^4.0.0",
9884
+ "co": "^4.6.0",
9885
+ "dedent": "^1.0.0",
9886
+ "is-generator-fn": "^2.0.0",
9887
+ "jest-each": "^29.7.0",
9888
+ "jest-matcher-utils": "^29.7.0",
9889
+ "jest-message-util": "^29.7.0",
9890
+ "jest-runtime": "^29.7.0",
9891
+ "jest-snapshot": "^29.7.0",
9892
+ "jest-util": "^29.7.0",
9893
+ "p-limit": "^3.1.0",
9894
+ "pretty-format": "^29.7.0",
9895
+ "pure-rand": "^6.0.0",
9896
+ "slash": "^3.0.0",
9897
+ "stack-utils": "^2.0.3"
9898
+ },
9899
+ "engines": {
9900
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
9901
+ }
9902
+ },
9903
+ "node_modules/jest-cli": {
9904
+ "version": "29.7.0",
9905
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
9906
+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
9907
+ "dev": true,
9908
+ "license": "MIT",
9909
+ "dependencies": {
9910
+ "@jest/core": "^29.7.0",
9911
+ "@jest/test-result": "^29.7.0",
9912
+ "@jest/types": "^29.6.3",
9913
+ "chalk": "^4.0.0",
9914
+ "create-jest": "^29.7.0",
9915
+ "exit": "^0.1.2",
9916
+ "import-local": "^3.0.2",
9917
+ "jest-config": "^29.7.0",
9918
+ "jest-util": "^29.7.0",
9919
+ "jest-validate": "^29.7.0",
9920
+ "yargs": "^17.3.1"
9921
+ },
9922
+ "bin": {
9923
+ "jest": "bin/jest.js"
9924
+ },
9925
+ "engines": {
9926
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
9927
+ },
9928
+ "peerDependencies": {
9929
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
9930
+ },
9931
+ "peerDependenciesMeta": {
9932
+ "node-notifier": {
9933
+ "optional": true
9934
+ }
9935
+ }
9936
+ },
9937
+ "node_modules/jest-config": {
9938
+ "version": "29.7.0",
9939
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
9940
+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
9941
+ "dev": true,
9942
+ "license": "MIT",
9943
+ "dependencies": {
9944
+ "@babel/core": "^7.11.6",
9945
+ "@jest/test-sequencer": "^29.7.0",
9946
+ "@jest/types": "^29.6.3",
9947
+ "babel-jest": "^29.7.0",
9948
+ "chalk": "^4.0.0",
9949
+ "ci-info": "^3.2.0",
9950
+ "deepmerge": "^4.2.2",
9951
+ "glob": "^7.1.3",
9952
+ "graceful-fs": "^4.2.9",
9953
+ "jest-circus": "^29.7.0",
9954
+ "jest-environment-node": "^29.7.0",
9955
+ "jest-get-type": "^29.6.3",
9956
+ "jest-regex-util": "^29.6.3",
9957
+ "jest-resolve": "^29.7.0",
9958
+ "jest-runner": "^29.7.0",
9959
+ "jest-util": "^29.7.0",
9960
+ "jest-validate": "^29.7.0",
9961
+ "micromatch": "^4.0.4",
9962
+ "parse-json": "^5.2.0",
9963
+ "pretty-format": "^29.7.0",
9964
+ "slash": "^3.0.0",
9965
+ "strip-json-comments": "^3.1.1"
9966
+ },
9967
+ "engines": {
9968
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
9969
+ },
9970
+ "peerDependencies": {
9971
+ "@types/node": "*",
9972
+ "ts-node": ">=9.0.0"
9973
+ },
9974
+ "peerDependenciesMeta": {
9975
+ "@types/node": {
9976
+ "optional": true
9977
+ },
9978
+ "ts-node": {
9979
+ "optional": true
9980
+ }
9981
+ }
9982
+ },
9983
+ "node_modules/jest-config/node_modules/ci-info": {
9984
+ "version": "3.9.0",
9985
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
9986
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
9987
+ "dev": true,
9988
+ "funding": [
9989
+ {
9990
+ "type": "github",
9991
+ "url": "https://github.com/sponsors/sibiraj-s"
9992
+ }
9993
+ ],
9994
+ "license": "MIT",
9995
+ "engines": {
9996
+ "node": ">=8"
9997
+ }
9998
+ },
9999
+ "node_modules/jest-config/node_modules/glob": {
10000
+ "version": "7.2.3",
10001
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
10002
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
10003
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
10004
+ "dev": true,
10005
+ "license": "ISC",
10006
+ "dependencies": {
10007
+ "fs.realpath": "^1.0.0",
10008
+ "inflight": "^1.0.4",
10009
+ "inherits": "2",
10010
+ "minimatch": "^3.1.1",
10011
+ "once": "^1.3.0",
10012
+ "path-is-absolute": "^1.0.0"
10013
+ },
10014
+ "engines": {
10015
+ "node": "*"
10016
+ },
10017
+ "funding": {
10018
+ "url": "https://github.com/sponsors/isaacs"
10019
+ }
10020
+ },
10021
+ "node_modules/jest-diff": {
10022
+ "version": "29.7.0",
10023
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
10024
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
10025
+ "dev": true,
10026
+ "license": "MIT",
10027
+ "dependencies": {
10028
+ "chalk": "^4.0.0",
10029
+ "diff-sequences": "^29.6.3",
10030
+ "jest-get-type": "^29.6.3",
10031
+ "pretty-format": "^29.7.0"
10032
+ },
10033
+ "engines": {
10034
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
10035
+ }
10036
+ },
10037
+ "node_modules/jest-docblock": {
10038
+ "version": "29.7.0",
10039
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
10040
+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
10041
+ "dev": true,
10042
+ "license": "MIT",
10043
+ "dependencies": {
10044
+ "detect-newline": "^3.0.0"
10045
+ },
10046
+ "engines": {
10047
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
10048
+ }
10049
+ },
10050
+ "node_modules/jest-each": {
10051
+ "version": "29.7.0",
10052
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
10053
+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
10054
+ "dev": true,
10055
+ "license": "MIT",
10056
+ "dependencies": {
10057
+ "@jest/types": "^29.6.3",
10058
+ "chalk": "^4.0.0",
10059
+ "jest-get-type": "^29.6.3",
10060
+ "jest-util": "^29.7.0",
10061
+ "pretty-format": "^29.7.0"
10062
+ },
10063
+ "engines": {
10064
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
10065
+ }
10066
+ },
10067
+ "node_modules/jest-environment-jsdom": {
10068
+ "version": "29.7.0",
10069
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz",
10070
+ "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==",
10071
+ "dev": true,
10072
+ "license": "MIT",
10073
+ "dependencies": {
10074
+ "@jest/environment": "^29.7.0",
10075
+ "@jest/fake-timers": "^29.7.0",
10076
+ "@jest/types": "^29.6.3",
10077
+ "@types/jsdom": "^20.0.0",
10078
+ "@types/node": "*",
10079
+ "jest-mock": "^29.7.0",
10080
+ "jest-util": "^29.7.0",
10081
+ "jsdom": "^20.0.0"
10082
+ },
10083
+ "engines": {
10084
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
10085
+ },
10086
+ "peerDependencies": {
10087
+ "canvas": "^2.5.0"
10088
+ },
10089
+ "peerDependenciesMeta": {
10090
+ "canvas": {
10091
+ "optional": true
10092
+ }
10093
+ }
10094
+ },
8703
10095
"node_modules/jest-environment-node": {
8704
10096
"version": "29.7.0",
8705
10097
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
@@ -8717,6 +10109,53 @@
8717
10109
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
8718
10110
}
8719
10111
},
10112
+ "node_modules/jest-expo": {
10113
+ "version": "54.0.17",
10114
+ "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-54.0.17.tgz",
10115
+ "integrity": "sha512-LyIhrsP4xvHEEcR1R024u/LBj3uPpAgB+UljgV+YXWkEHjprnr0KpE4tROsMNYCVTM1pPlAnPuoBmn5gnAN9KA==",
10116
+ "dev": true,
10117
+ "license": "MIT",
10118
+ "dependencies": {
10119
+ "@expo/config": "~12.0.13",
10120
+ "@expo/json-file": "^10.0.8",
10121
+ "@jest/create-cache-key-function": "^29.2.1",
10122
+ "@jest/globals": "^29.2.1",
10123
+ "babel-jest": "^29.2.1",
10124
+ "jest-environment-jsdom": "^29.2.1",
10125
+ "jest-snapshot": "^29.2.1",
10126
+ "jest-watch-select-projects": "^2.0.0",
10127
+ "jest-watch-typeahead": "2.2.1",
10128
+ "json5": "^2.2.3",
10129
+ "lodash": "^4.17.19",
10130
+ "react-test-renderer": "19.1.0",
10131
+ "server-only": "^0.0.1",
10132
+ "stacktrace-js": "^2.0.2"
10133
+ },
10134
+ "bin": {
10135
+ "jest": "bin/jest.js"
10136
+ },
10137
+ "peerDependencies": {
10138
+ "expo": "*",
10139
+ "react-native": "*",
10140
+ "react-server-dom-webpack": "~19.0.4 || ~19.1.5 || ~19.2.4"
10141
+ },
10142
+ "peerDependenciesMeta": {
10143
+ "react-server-dom-webpack": {
10144
+ "optional": true
10145
+ }
10146
+ }
10147
+ },
10148
+ "node_modules/jest-expo/node_modules/@expo/json-file": {
10149
+ "version": "10.2.0",
10150
+ "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.2.0.tgz",
10151
+ "integrity": "sha512-S6XzKe3R9GQeHiUPXc3xJjOv2VJhOEwFYf7xdC2z2cUqt3kZJ9mSO877sNQloVdnW/SUCtPY3bexlM7nwq+CAQ==",
10152
+ "dev": true,
10153
+ "license": "MIT",
10154
+ "dependencies": {
10155
+ "@babel/code-frame": "^7.20.0",
10156
+ "json5": "^2.2.3"
10157
+ }
10158
+ },
8720
10159
"node_modules/jest-get-type": {
8721
10160
"version": "29.6.3",
8722
10161
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
@@ -8751,6 +10190,36 @@
8751
10190
"fsevents": "^2.3.2"
8752
10191
}
8753
10192
},
10193
+ "node_modules/jest-leak-detector": {
10194
+ "version": "29.7.0",
10195
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
10196
+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
10197
+ "dev": true,
10198
+ "license": "MIT",
10199
+ "dependencies": {
10200
+ "jest-get-type": "^29.6.3",
10201
+ "pretty-format": "^29.7.0"
10202
+ },
10203
+ "engines": {
10204
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
10205
+ }
10206
+ },
10207
+ "node_modules/jest-matcher-utils": {
10208
+ "version": "29.7.0",
10209
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
10210
+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
10211
+ "dev": true,
10212
+ "license": "MIT",
10213
+ "dependencies": {
10214
+ "chalk": "^4.0.0",
10215
+ "jest-diff": "^29.7.0",
10216
+ "jest-get-type": "^29.6.3",
10217
+ "pretty-format": "^29.7.0"
10218
+ },
10219
+ "engines": {
10220
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
10221
+ }
10222
+ },
8754
10223
"node_modules/jest-message-util": {
8755
10224
"version": "29.7.0",
8756
10225
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
@@ -8785,6 +10254,24 @@
8785
10254
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
8786
10255
}
8787
10256
},
10257
+ "node_modules/jest-pnp-resolver": {
10258
+ "version": "1.2.3",
10259
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
10260
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
10261
+ "dev": true,
10262
+ "license": "MIT",
10263
+ "engines": {
10264
+ "node": ">=6"
10265
+ },
10266
+ "peerDependencies": {
10267
+ "jest-resolve": "*"
10268
+ },
10269
+ "peerDependenciesMeta": {
10270
+ "jest-resolve": {
10271
+ "optional": true
10272
+ }
10273
+ }
10274
+ },
8788
10275
"node_modules/jest-regex-util": {
8789
10276
"version": "29.6.3",
8790
10277
"resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
@@ -8794,6 +10281,206 @@
8794
10281
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
8795
10282
}
8796
10283
},
10284
+ "node_modules/jest-resolve": {
10285
+ "version": "29.7.0",
10286
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
10287
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
10288
+ "dev": true,
10289
+ "license": "MIT",
10290
+ "dependencies": {
10291
+ "chalk": "^4.0.0",
10292
+ "graceful-fs": "^4.2.9",
10293
+ "jest-haste-map": "^29.7.0",
10294
+ "jest-pnp-resolver": "^1.2.2",
10295
+ "jest-util": "^29.7.0",
10296
+ "jest-validate": "^29.7.0",
10297
+ "resolve": "^1.20.0",
10298
+ "resolve.exports": "^2.0.0",
10299
+ "slash": "^3.0.0"
10300
+ },
10301
+ "engines": {
10302
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
10303
+ }
10304
+ },
10305
+ "node_modules/jest-resolve-dependencies": {
10306
+ "version": "29.7.0",
10307
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
10308
+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
10309
+ "dev": true,
10310
+ "license": "MIT",
10311
+ "dependencies": {
10312
+ "jest-regex-util": "^29.6.3",
10313
+ "jest-snapshot": "^29.7.0"
10314
+ },
10315
+ "engines": {
10316
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
10317
+ }
10318
+ },
10319
+ "node_modules/jest-runner": {
10320
+ "version": "29.7.0",
10321
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
10322
+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
10323
+ "dev": true,
10324
+ "license": "MIT",
10325
+ "dependencies": {
10326
+ "@jest/console": "^29.7.0",
10327
+ "@jest/environment": "^29.7.0",
10328
+ "@jest/test-result": "^29.7.0",
10329
+ "@jest/transform": "^29.7.0",
10330
+ "@jest/types": "^29.6.3",
10331
+ "@types/node": "*",
10332
+ "chalk": "^4.0.0",
10333
+ "emittery": "^0.13.1",
10334
+ "graceful-fs": "^4.2.9",
10335
+ "jest-docblock": "^29.7.0",
10336
+ "jest-environment-node": "^29.7.0",
10337
+ "jest-haste-map": "^29.7.0",
10338
+ "jest-leak-detector": "^29.7.0",
10339
+ "jest-message-util": "^29.7.0",
10340
+ "jest-resolve": "^29.7.0",
10341
+ "jest-runtime": "^29.7.0",
10342
+ "jest-util": "^29.7.0",
10343
+ "jest-watcher": "^29.7.0",
10344
+ "jest-worker": "^29.7.0",
10345
+ "p-limit": "^3.1.0",
10346
+ "source-map-support": "0.5.13"
10347
+ },
10348
+ "engines": {
10349
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
10350
+ }
10351
+ },
10352
+ "node_modules/jest-runner/node_modules/source-map": {
10353
+ "version": "0.6.1",
10354
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
10355
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
10356
+ "dev": true,
10357
+ "license": "BSD-3-Clause",
10358
+ "engines": {
10359
+ "node": ">=0.10.0"
10360
+ }
10361
+ },
10362
+ "node_modules/jest-runner/node_modules/source-map-support": {
10363
+ "version": "0.5.13",
10364
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
10365
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
10366
+ "dev": true,
10367
+ "license": "MIT",
10368
+ "dependencies": {
10369
+ "buffer-from": "^1.0.0",
10370
+ "source-map": "^0.6.0"
10371
+ }
10372
+ },
10373
+ "node_modules/jest-runtime": {
10374
+ "version": "29.7.0",
10375
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
10376
+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
10377
+ "dev": true,
10378
+ "license": "MIT",
10379
+ "dependencies": {
10380
+ "@jest/environment": "^29.7.0",
10381
+ "@jest/fake-timers": "^29.7.0",
10382
+ "@jest/globals": "^29.7.0",
10383
+ "@jest/source-map": "^29.6.3",
10384
+ "@jest/test-result": "^29.7.0",
10385
+ "@jest/transform": "^29.7.0",
10386
+ "@jest/types": "^29.6.3",
10387
+ "@types/node": "*",
10388
+ "chalk": "^4.0.0",
10389
+ "cjs-module-lexer": "^1.0.0",
10390
+ "collect-v8-coverage": "^1.0.0",
10391
+ "glob": "^7.1.3",
10392
+ "graceful-fs": "^4.2.9",
10393
+ "jest-haste-map": "^29.7.0",
10394
+ "jest-message-util": "^29.7.0",
10395
+ "jest-mock": "^29.7.0",
10396
+ "jest-regex-util": "^29.6.3",
10397
+ "jest-resolve": "^29.7.0",
10398
+ "jest-snapshot": "^29.7.0",
10399
+ "jest-util": "^29.7.0",
10400
+ "slash": "^3.0.0",
10401
+ "strip-bom": "^4.0.0"
10402
+ },
10403
+ "engines": {
10404
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
10405
+ }
10406
+ },
10407
+ "node_modules/jest-runtime/node_modules/glob": {
10408
+ "version": "7.2.3",
10409
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
10410
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
10411
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
10412
+ "dev": true,
10413
+ "license": "ISC",
10414
+ "dependencies": {
10415
+ "fs.realpath": "^1.0.0",
10416
+ "inflight": "^1.0.4",
10417
+ "inherits": "2",
10418
+ "minimatch": "^3.1.1",
10419
+ "once": "^1.3.0",
10420
+ "path-is-absolute": "^1.0.0"
10421
+ },
10422
+ "engines": {
10423
+ "node": "*"
10424
+ },
10425
+ "funding": {
10426
+ "url": "https://github.com/sponsors/isaacs"
10427
+ }
10428
+ },
10429
+ "node_modules/jest-runtime/node_modules/strip-bom": {
10430
+ "version": "4.0.0",
10431
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
10432
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
10433
+ "dev": true,
10434
+ "license": "MIT",
10435
+ "engines": {
10436
+ "node": ">=8"
10437
+ }
10438
+ },
10439
+ "node_modules/jest-snapshot": {
10440
+ "version": "29.7.0",
10441
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
10442
+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
10443
+ "dev": true,
10444
+ "license": "MIT",
10445
+ "dependencies": {
10446
+ "@babel/core": "^7.11.6",
10447
+ "@babel/generator": "^7.7.2",
10448
+ "@babel/plugin-syntax-jsx": "^7.7.2",
10449
+ "@babel/plugin-syntax-typescript": "^7.7.2",
10450
+ "@babel/types": "^7.3.3",
10451
+ "@jest/expect-utils": "^29.7.0",
10452
+ "@jest/transform": "^29.7.0",
10453
+ "@jest/types": "^29.6.3",
10454
+ "babel-preset-current-node-syntax": "^1.0.0",
10455
+ "chalk": "^4.0.0",
10456
+ "expect": "^29.7.0",
10457
+ "graceful-fs": "^4.2.9",
10458
+ "jest-diff": "^29.7.0",
10459
+ "jest-get-type": "^29.6.3",
10460
+ "jest-matcher-utils": "^29.7.0",
10461
+ "jest-message-util": "^29.7.0",
10462
+ "jest-util": "^29.7.0",
10463
+ "natural-compare": "^1.4.0",
10464
+ "pretty-format": "^29.7.0",
10465
+ "semver": "^7.5.3"
10466
+ },
10467
+ "engines": {
10468
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
10469
+ }
10470
+ },
10471
+ "node_modules/jest-snapshot/node_modules/semver": {
10472
+ "version": "7.8.4",
10473
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz",
10474
+ "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==",
10475
+ "dev": true,
10476
+ "license": "ISC",
10477
+ "bin": {
10478
+ "semver": "bin/semver.js"
10479
+ },
10480
+ "engines": {
10481
+ "node": ">=10"
10482
+ }
10483
+ },
8797
10484
"node_modules/jest-util": {
8798
10485
"version": "29.7.0",
8799
10486
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
@@ -8843,6 +10530,127 @@
8843
10530
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
8844
10531
}
8845
10532
},
10533
+ "node_modules/jest-watch-select-projects": {
10534
+ "version": "2.0.0",
10535
+ "resolved": "https://registry.npmjs.org/jest-watch-select-projects/-/jest-watch-select-projects-2.0.0.tgz",
10536
+ "integrity": "sha512-j00nW4dXc2NiCW6znXgFLF9g8PJ0zP25cpQ1xRro/HU2GBfZQFZD0SoXnAlaoKkIY4MlfTMkKGbNXFpvCdjl1w==",
10537
+ "dev": true,
10538
+ "license": "MIT",
10539
+ "dependencies": {
10540
+ "ansi-escapes": "^4.3.0",
10541
+ "chalk": "^3.0.0",
10542
+ "prompts": "^2.2.1"
10543
+ }
10544
+ },
10545
+ "node_modules/jest-watch-select-projects/node_modules/chalk": {
10546
+ "version": "3.0.0",
10547
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
10548
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
10549
+ "dev": true,
10550
+ "license": "MIT",
10551
+ "dependencies": {
10552
+ "ansi-styles": "^4.1.0",
10553
+ "supports-color": "^7.1.0"
10554
+ },
10555
+ "engines": {
10556
+ "node": ">=8"
10557
+ }
10558
+ },
10559
+ "node_modules/jest-watch-typeahead": {
10560
+ "version": "2.2.1",
10561
+ "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-2.2.1.tgz",
10562
+ "integrity": "sha512-jYpYmUnTzysmVnwq49TAxlmtOAwp8QIqvZyoofQFn8fiWhEDZj33ZXzg3JA4nGnzWFm1hbWf3ADpteUokvXgFA==",
10563
+ "dev": true,
10564
+ "license": "MIT",
10565
+ "dependencies": {
10566
+ "ansi-escapes": "^6.0.0",
10567
+ "chalk": "^4.0.0",
10568
+ "jest-regex-util": "^29.0.0",
10569
+ "jest-watcher": "^29.0.0",
10570
+ "slash": "^5.0.0",
10571
+ "string-length": "^5.0.1",
10572
+ "strip-ansi": "^7.0.1"
10573
+ },
10574
+ "engines": {
10575
+ "node": "^14.17.0 || ^16.10.0 || >=18.0.0"
10576
+ },
10577
+ "peerDependencies": {
10578
+ "jest": "^27.0.0 || ^28.0.0 || ^29.0.0"
10579
+ }
10580
+ },
10581
+ "node_modules/jest-watch-typeahead/node_modules/ansi-escapes": {
10582
+ "version": "6.2.1",
10583
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz",
10584
+ "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==",
10585
+ "dev": true,
10586
+ "license": "MIT",
10587
+ "engines": {
10588
+ "node": ">=14.16"
10589
+ },
10590
+ "funding": {
10591
+ "url": "https://github.com/sponsors/sindresorhus"
10592
+ }
10593
+ },
10594
+ "node_modules/jest-watch-typeahead/node_modules/char-regex": {
10595
+ "version": "2.0.2",
10596
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.2.tgz",
10597
+ "integrity": "sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==",
10598
+ "dev": true,
10599
+ "license": "MIT",
10600
+ "engines": {
10601
+ "node": ">=12.20"
10602
+ }
10603
+ },
10604
+ "node_modules/jest-watch-typeahead/node_modules/slash": {
10605
+ "version": "5.1.0",
10606
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
10607
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
10608
+ "dev": true,
10609
+ "license": "MIT",
10610
+ "engines": {
10611
+ "node": ">=14.16"
10612
+ },
10613
+ "funding": {
10614
+ "url": "https://github.com/sponsors/sindresorhus"
10615
+ }
10616
+ },
10617
+ "node_modules/jest-watch-typeahead/node_modules/string-length": {
10618
+ "version": "5.0.1",
10619
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz",
10620
+ "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==",
10621
+ "dev": true,
10622
+ "license": "MIT",
10623
+ "dependencies": {
10624
+ "char-regex": "^2.0.0",
10625
+ "strip-ansi": "^7.0.1"
10626
+ },
10627
+ "engines": {
10628
+ "node": ">=12.20"
10629
+ },
10630
+ "funding": {
10631
+ "url": "https://github.com/sponsors/sindresorhus"
10632
+ }
10633
+ },
10634
+ "node_modules/jest-watcher": {
10635
+ "version": "29.7.0",
10636
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
10637
+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
10638
+ "dev": true,
10639
+ "license": "MIT",
10640
+ "dependencies": {
10641
+ "@jest/test-result": "^29.7.0",
10642
+ "@jest/types": "^29.6.3",
10643
+ "@types/node": "*",
10644
+ "ansi-escapes": "^4.2.1",
10645
+ "chalk": "^4.0.0",
10646
+ "emittery": "^0.13.1",
10647
+ "jest-util": "^29.7.0",
10648
+ "string-length": "^4.0.1"
10649
+ },
10650
+ "engines": {
10651
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
10652
+ }
10653
+ },
8846
10654
"node_modules/jest-worker": {
8847
10655
"version": "29.7.0",
8848
10656
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
@@ -8903,6 +10711,138 @@
8903
10711
"integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==",
8904
10712
"license": "0BSD"
8905
10713
},
10714
+ "node_modules/jsdom": {
10715
+ "version": "20.0.3",
10716
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz",
10717
+ "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==",
10718
+ "dev": true,
10719
+ "license": "MIT",
10720
+ "dependencies": {
10721
+ "abab": "^2.0.6",
10722
+ "acorn": "^8.8.1",
10723
+ "acorn-globals": "^7.0.0",
10724
+ "cssom": "^0.5.0",
10725
+ "cssstyle": "^2.3.0",
10726
+ "data-urls": "^3.0.2",
10727
+ "decimal.js": "^10.4.2",
10728
+ "domexception": "^4.0.0",
10729
+ "escodegen": "^2.0.0",
10730
+ "form-data": "^4.0.0",
10731
+ "html-encoding-sniffer": "^3.0.0",
10732
+ "http-proxy-agent": "^5.0.0",
10733
+ "https-proxy-agent": "^5.0.1",
10734
+ "is-potential-custom-element-name": "^1.0.1",
10735
+ "nwsapi": "^2.2.2",
10736
+ "parse5": "^7.1.1",
10737
+ "saxes": "^6.0.0",
10738
+ "symbol-tree": "^3.2.4",
10739
+ "tough-cookie": "^4.1.2",
10740
+ "w3c-xmlserializer": "^4.0.0",
10741
+ "webidl-conversions": "^7.0.0",
10742
+ "whatwg-encoding": "^2.0.0",
10743
+ "whatwg-mimetype": "^3.0.0",
10744
+ "whatwg-url": "^11.0.0",
10745
+ "ws": "^8.11.0",
10746
+ "xml-name-validator": "^4.0.0"
10747
+ },
10748
+ "engines": {
10749
+ "node": ">=14"
10750
+ },
10751
+ "peerDependencies": {
10752
+ "canvas": "^2.5.0"
10753
+ },
10754
+ "peerDependenciesMeta": {
10755
+ "canvas": {
10756
+ "optional": true
10757
+ }
10758
+ }
10759
+ },
10760
+ "node_modules/jsdom/node_modules/agent-base": {
10761
+ "version": "6.0.2",
10762
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
10763
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
10764
+ "dev": true,
10765
+ "license": "MIT",
10766
+ "dependencies": {
10767
+ "debug": "4"
10768
+ },
10769
+ "engines": {
10770
+ "node": ">= 6.0.0"
10771
+ }
10772
+ },
10773
+ "node_modules/jsdom/node_modules/https-proxy-agent": {
10774
+ "version": "5.0.1",
10775
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
10776
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
10777
+ "dev": true,
10778
+ "license": "MIT",
10779
+ "dependencies": {
10780
+ "agent-base": "6",
10781
+ "debug": "4"
10782
+ },
10783
+ "engines": {
10784
+ "node": ">= 6"
10785
+ }
10786
+ },
10787
+ "node_modules/jsdom/node_modules/tr46": {
10788
+ "version": "3.0.0",
10789
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
10790
+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
10791
+ "dev": true,
10792
+ "license": "MIT",
10793
+ "dependencies": {
10794
+ "punycode": "^2.1.1"
10795
+ },
10796
+ "engines": {
10797
+ "node": ">=12"
10798
+ }
10799
+ },
10800
+ "node_modules/jsdom/node_modules/webidl-conversions": {
10801
+ "version": "7.0.0",
10802
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
10803
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
10804
+ "dev": true,
10805
+ "license": "BSD-2-Clause",
10806
+ "engines": {
10807
+ "node": ">=12"
10808
+ }
10809
+ },
10810
+ "node_modules/jsdom/node_modules/whatwg-url": {
10811
+ "version": "11.0.0",
10812
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
10813
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
10814
+ "dev": true,
10815
+ "license": "MIT",
10816
+ "dependencies": {
10817
+ "tr46": "^3.0.0",
10818
+ "webidl-conversions": "^7.0.0"
10819
+ },
10820
+ "engines": {
10821
+ "node": ">=12"
10822
+ }
10823
+ },
10824
+ "node_modules/jsdom/node_modules/ws": {
10825
+ "version": "8.21.0",
10826
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
10827
+ "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
10828
+ "dev": true,
10829
+ "license": "MIT",
10830
+ "engines": {
10831
+ "node": ">=10.0.0"
10832
+ },
10833
+ "peerDependencies": {
10834
+ "bufferutil": "^4.0.1",
10835
+ "utf-8-validate": ">=5.0.2"
10836
+ },
10837
+ "peerDependenciesMeta": {
10838
+ "bufferutil": {
10839
+ "optional": true
10840
+ },
10841
+ "utf-8-validate": {
10842
+ "optional": true
10843
+ }
10844
+ }
10845
+ },
8906
10846
"node_modules/jsesc": {
8907
10847
"version": "3.1.0",
8908
10848
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
@@ -8922,6 +10862,13 @@
8922
10862
"dev": true,
8923
10863
"license": "MIT"
8924
10864
},
10865
+ "node_modules/json-parse-even-better-errors": {
10866
+ "version": "2.3.1",
10867
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
10868
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
10869
+ "dev": true,
10870
+ "license": "MIT"
10871
+ },
8925
10872
"node_modules/json-schema-traverse": {
8926
10873
"version": "0.4.1",
8927
10874
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -9316,6 +11263,13 @@
9316
11263
"url": "https://github.com/sponsors/sindresorhus"
9317
11264
}
9318
11265
},
11266
+ "node_modules/lodash": {
11267
+ "version": "4.18.1",
11268
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
11269
+ "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
11270
+ "dev": true,
11271
+ "license": "MIT"
11272
+ },
9319
11273
"node_modules/lodash.debounce": {
9320
11274
"version": "4.0.8",
9321
11275
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@@ -9439,6 +11393,35 @@
9439
11393
"yallist": "^3.0.2"
9440
11394
}
9441
11395
},
11396
+ "node_modules/make-dir": {
11397
+ "version": "4.0.0",
11398
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
11399
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
11400
+ "dev": true,
11401
+ "license": "MIT",
11402
+ "dependencies": {
11403
+ "semver": "^7.5.3"
11404
+ },
11405
+ "engines": {
11406
+ "node": ">=10"
11407
+ },
11408
+ "funding": {
11409
+ "url": "https://github.com/sponsors/sindresorhus"
11410
+ }
11411
+ },
11412
+ "node_modules/make-dir/node_modules/semver": {
11413
+ "version": "7.8.4",
11414
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz",
11415
+ "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==",
11416
+ "dev": true,
11417
+ "license": "ISC",
11418
+ "bin": {
11419
+ "semver": "bin/semver.js"
11420
+ },
11421
+ "engines": {
11422
+ "node": ">=10"
11423
+ }
11424
+ },
9442
11425
"node_modules/makeerror": {
9443
11426
"version": "1.0.12",
9444
11427
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
@@ -9884,10 +11867,10 @@
9884
11867
}
9885
11868
},
9886
11869
"node_modules/minipass": {
9887
- "version": "7.1.2",
9888
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
9889
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
9890
- "license": "ISC",
11870
+ "version": "7.1.3",
11871
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
11872
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
11873
+ "license": "BlueOak-1.0.0",
9891
11874
"engines": {
9892
11875
"node": ">=16 || 14 >=14.17"
9893
11876
}
@@ -10092,12 +12075,32 @@
10092
12075
"node": ">=10"
10093
12076
}
10094
12077
},
12078
+ "node_modules/npm-run-path": {
12079
+ "version": "4.0.1",
12080
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
12081
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
12082
+ "dev": true,
12083
+ "license": "MIT",
12084
+ "dependencies": {
12085
+ "path-key": "^3.0.0"
12086
+ },
12087
+ "engines": {
12088
+ "node": ">=8"
12089
+ }
12090
+ },
10095
12091
"node_modules/nullthrows": {
10096
12092
"version": "1.1.1",
10097
12093
"resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz",
10098
12094
"integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==",
10099
12095
"license": "MIT"
10100
12096
},
12097
+ "node_modules/nwsapi": {
12098
+ "version": "2.2.24",
12099
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.24.tgz",
12100
+ "integrity": "sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==",
12101
+ "dev": true,
12102
+ "license": "MIT"
12103
+ },
10101
12104
"node_modules/ob1": {
10102
12105
"version": "0.83.2",
10103
12106
"resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.2.tgz",
@@ -10507,6 +12510,25 @@
10507
12510
"node": ">=6"
10508
12511
}
10509
12512
},
12513
+ "node_modules/parse-json": {
12514
+ "version": "5.2.0",
12515
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
12516
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
12517
+ "dev": true,
12518
+ "license": "MIT",
12519
+ "dependencies": {
12520
+ "@babel/code-frame": "^7.0.0",
12521
+ "error-ex": "^1.3.1",
12522
+ "json-parse-even-better-errors": "^2.3.0",
12523
+ "lines-and-columns": "^1.1.6"
12524
+ },
12525
+ "engines": {
12526
+ "node": ">=8"
12527
+ },
12528
+ "funding": {
12529
+ "url": "https://github.com/sponsors/sindresorhus"
12530
+ }
12531
+ },
10510
12532
"node_modules/parse-png": {
10511
12533
"version": "2.1.0",
10512
12534
"resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz",
@@ -10519,6 +12541,19 @@
10519
12541
"node": ">=10"
10520
12542
}
10521
12543
},
12544
+ "node_modules/parse5": {
12545
+ "version": "7.3.0",
12546
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
12547
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
12548
+ "dev": true,
12549
+ "license": "MIT",
12550
+ "dependencies": {
12551
+ "entities": "^6.0.0"
12552
+ },
12553
+ "funding": {
12554
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
12555
+ }
12556
+ },
10522
12557
"node_modules/parseurl": {
10523
12558
"version": "1.3.3",
10524
12559
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -10616,6 +12651,75 @@
10616
12651
"node": ">= 6"
10617
12652
}
10618
12653
},
12654
+ "node_modules/pkg-dir": {
12655
+ "version": "4.2.0",
12656
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
12657
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
12658
+ "dev": true,
12659
+ "license": "MIT",
12660
+ "dependencies": {
12661
+ "find-up": "^4.0.0"
12662
+ },
12663
+ "engines": {
12664
+ "node": ">=8"
12665
+ }
12666
+ },
12667
+ "node_modules/pkg-dir/node_modules/find-up": {
12668
+ "version": "4.1.0",
12669
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
12670
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
12671
+ "dev": true,
12672
+ "license": "MIT",
12673
+ "dependencies": {
12674
+ "locate-path": "^5.0.0",
12675
+ "path-exists": "^4.0.0"
12676
+ },
12677
+ "engines": {
12678
+ "node": ">=8"
12679
+ }
12680
+ },
12681
+ "node_modules/pkg-dir/node_modules/locate-path": {
12682
+ "version": "5.0.0",
12683
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
12684
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
12685
+ "dev": true,
12686
+ "license": "MIT",
12687
+ "dependencies": {
12688
+ "p-locate": "^4.1.0"
12689
+ },
12690
+ "engines": {
12691
+ "node": ">=8"
12692
+ }
12693
+ },
12694
+ "node_modules/pkg-dir/node_modules/p-limit": {
12695
+ "version": "2.3.0",
12696
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
12697
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
12698
+ "dev": true,
12699
+ "license": "MIT",
12700
+ "dependencies": {
12701
+ "p-try": "^2.0.0"
12702
+ },
12703
+ "engines": {
12704
+ "node": ">=6"
12705
+ },
12706
+ "funding": {
12707
+ "url": "https://github.com/sponsors/sindresorhus"
12708
+ }
12709
+ },
12710
+ "node_modules/pkg-dir/node_modules/p-locate": {
12711
+ "version": "4.1.0",
12712
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
12713
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
12714
+ "dev": true,
12715
+ "license": "MIT",
12716
+ "dependencies": {
12717
+ "p-limit": "^2.2.0"
12718
+ },
12719
+ "engines": {
12720
+ "node": ">=8"
12721
+ }
12722
+ },
10619
12723
"node_modules/plist": {
10620
12724
"version": "3.1.0",
10621
12725
"resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz",
@@ -10795,6 +12899,19 @@
10795
12899
"dev": true,
10796
12900
"license": "MIT"
10797
12901
},
12902
+ "node_modules/psl": {
12903
+ "version": "1.15.0",
12904
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
12905
+ "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
12906
+ "dev": true,
12907
+ "license": "MIT",
12908
+ "dependencies": {
12909
+ "punycode": "^2.3.1"
12910
+ },
12911
+ "funding": {
12912
+ "url": "https://github.com/sponsors/lupomontero"
12913
+ }
12914
+ },
10798
12915
"node_modules/punycode": {
10799
12916
"version": "2.3.1",
10800
12917
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -10804,6 +12921,23 @@
10804
12921
"node": ">=6"
10805
12922
}
10806
12923
},
12924
+ "node_modules/pure-rand": {
12925
+ "version": "6.1.0",
12926
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
12927
+ "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
12928
+ "dev": true,
12929
+ "funding": [
12930
+ {
12931
+ "type": "individual",
12932
+ "url": "https://github.com/sponsors/dubzzz"
12933
+ },
12934
+ {
12935
+ "type": "opencollective",
12936
+ "url": "https://opencollective.com/fast-check"
12937
+ }
12938
+ ],
12939
+ "license": "MIT"
12940
+ },
10807
12941
"node_modules/qrcode-terminal": {
10808
12942
"version": "0.11.0",
10809
12943
"resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz",
@@ -10904,7 +13038,6 @@
10904
13038
"resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
10905
13039
"integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
10906
13040
"license": "MIT",
10907
- "peer": true,
10908
13041
"engines": {
10909
13042
"node": ">=0.10.0"
10910
13043
}
@@ -10924,7 +13057,6 @@
10924
13057
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
10925
13058
"integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
10926
13059
"license": "MIT",
10927
- "peer": true,
10928
13060
"dependencies": {
10929
13061
"scheduler": "^0.26.0"
10930
13062
},
@@ -10961,7 +13093,6 @@
10961
13093
"resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.5.tgz",
10962
13094
"integrity": "sha512-1w+/oSjEXZjMqsIvmkCRsOc8UBYv163bTWKTI8+1mxztvQPhCRYGTvZ/PL1w16xXHneIj/SLGfxWg2GWN2uexw==",
10963
13095
"license": "MIT",
10964
- "peer": true,
10965
13096
"dependencies": {
10966
13097
"@jest/create-cache-key-function": "^29.7.0",
10967
13098
"@react-native/assets-registry": "0.81.5",
@@ -11019,7 +13150,6 @@
11019
13150
"resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.28.0.tgz",
11020
13151
"integrity": "sha512-0msfJ1vRxXKVgTgvL+1ZOoYw3/0z1R+Ked0+udoJhyplC2jbVKIJ8Z1bzWdpQRCV3QcQ87Op0zJVE5DhKK2A0A==",
11021
13152
"license": "MIT",
11022
- "peer": true,
11023
13153
"dependencies": {
11024
13154
"@egjs/hammerjs": "^2.0.17",
11025
13155
"hoist-non-react-statics": "^3.3.0",
@@ -11045,7 +13175,6 @@
11045
13175
"resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.9.1.tgz",
11046
13176
"integrity": "sha512-uUT0MMMbNtoSbxe9pRvdJJKEi9snjuJ3fXlZhG8F2vVMOBJVt/AFtqMPUHu9yMflmqOr08PewKzj9EPl/Yj+Gw==",
11047
13177
"license": "MIT",
11048
- "peer": true,
11049
13178
"peerDependencies": {
11050
13179
"react": "*",
11051
13180
"react-native": "*"
@@ -11056,7 +13185,6 @@
11056
13185
"resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.3.tgz",
11057
13186
"integrity": "sha512-GP8wsi1u3nqvC1fMab/m8gfFwFyldawElCcUSBJQgfrXeLmsPPUOpDw44lbLeCpcwUuLa05WTVePdTEwCLTUZg==",
11058
13187
"license": "MIT",
11059
- "peer": true,
11060
13188
"dependencies": {
11061
13189
"react-native-is-edge-to-edge": "^1.2.1",
11062
13190
"semver": "7.7.2"
@@ -11085,7 +13213,6 @@
11085
13213
"resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-5.6.2.tgz",
11086
13214
"integrity": "sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg==",
11087
13215
"license": "MIT",
11088
- "peer": true,
11089
13216
"peerDependencies": {
11090
13217
"react": "*",
11091
13218
"react-native": "*"
@@ -11096,7 +13223,6 @@
11096
13223
"resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-4.16.0.tgz",
11097
13224
"integrity": "sha512-yIAyh7F/9uWkOzCi1/2FqvNvK6Wb9Y1+Kzn16SuGfN9YFJDTbwlzGRvePCNTOX0recpLQF3kc2FmvMUhyTCH1Q==",
11098
13225
"license": "MIT",
11099
- "peer": true,
11100
13226
"dependencies": {
11101
13227
"react-freeze": "^1.0.0",
11102
13228
"react-native-is-edge-to-edge": "^1.2.1",
@@ -11126,7 +13252,6 @@
11126
13252
"resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.21.2.tgz",
11127
13253
"integrity": "sha512-SO2t9/17zM4iEnFvlu2DA9jqNbzNhoUP+AItkoCOyFmDMOhUnBBznBDCYN92fGdfAkfQlWzPoez6+zLxFNsZEg==",
11128
13254
"license": "MIT",
11129
- "peer": true,
11130
13255
"dependencies": {
11131
13256
"@babel/runtime": "^7.18.6",
11132
13257
"@react-native/normalize-colors": "^0.74.1",
@@ -11159,7 +13284,6 @@
11159
13284
"resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.5.1.tgz",
11160
13285
"integrity": "sha512-lJG6Uk9YuojjEX/tQrCbcbmpdLCSFxDK1rJlkDhgqkVi1KZzG7cdcBFQRqyNOOzR9Y0CXNuldmtWTGOyM0k0+w==",
11161
13286
"license": "MIT",
11162
- "peer": true,
11163
13287
"dependencies": {
11164
13288
"@babel/plugin-transform-arrow-functions": "^7.0.0-0",
11165
13289
"@babel/plugin-transform-class-properties": "^7.0.0-0",
@@ -11270,7 +13394,6 @@
11270
13394
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
11271
13395
"integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
11272
13396
"license": "MIT",
11273
- "peer": true,
11274
13397
"engines": {
11275
13398
"node": ">=0.10.0"
11276
13399
}
@@ -11344,6 +13467,20 @@
11344
13467
}
11345
13468
}
11346
13469
},
13470
+ "node_modules/react-test-renderer": {
13471
+ "version": "19.1.0",
13472
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-19.1.0.tgz",
13473
+ "integrity": "sha512-jXkSl3CpvPYEF+p/eGDLB4sPoDX8pKkYvRl9+rR8HxLY0X04vW7hCm1/0zHoUSjPZ3bDa+wXWNTDVIw/R8aDVw==",
13474
+ "dev": true,
13475
+ "license": "MIT",
13476
+ "dependencies": {
13477
+ "react-is": "^19.1.0",
13478
+ "scheduler": "^0.26.0"
13479
+ },
13480
+ "peerDependencies": {
13481
+ "react": "^19.1.0"
13482
+ }
13483
+ },
11347
13484
"node_modules/reflect.getprototypeof": {
11348
13485
"version": "1.0.10",
11349
13486
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
@@ -11513,6 +13650,19 @@
11513
13650
"url": "https://github.com/sponsors/ljharb"
11514
13651
}
11515
13652
},
13653
+ "node_modules/resolve-cwd": {
13654
+ "version": "3.0.0",
13655
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
13656
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
13657
+ "dev": true,
13658
+ "license": "MIT",
13659
+ "dependencies": {
13660
+ "resolve-from": "^5.0.0"
13661
+ },
13662
+ "engines": {
13663
+ "node": ">=8"
13664
+ }
13665
+ },
11516
13666
"node_modules/resolve-from": {
11517
13667
"version": "5.0.0",
11518
13668
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
@@ -11724,12 +13874,32 @@
11724
13874
"url": "https://github.com/sponsors/ljharb"
11725
13875
}
11726
13876
},
13877
+ "node_modules/safer-buffer": {
13878
+ "version": "2.1.2",
13879
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
13880
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
13881
+ "dev": true,
13882
+ "license": "MIT"
13883
+ },
11727
13884
"node_modules/sax": {
11728
13885
"version": "1.4.2",
11729
13886
"resolved": "https://registry.npmjs.org/sax/-/sax-1.4.2.tgz",
11730
13887
"integrity": "sha512-FySGAa0RGcFiN6zfrO9JvK1r7TB59xuzCcTHOBXBNoKgDejlOQCR2KL/FGk3/iDlsqyYg1ELZpOmlg09B01Czw==",
11731
13888
"license": "BlueOak-1.0.0"
11732
13889
},
13890
+ "node_modules/saxes": {
13891
+ "version": "6.0.0",
13892
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
13893
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
13894
+ "dev": true,
13895
+ "license": "ISC",
13896
+ "dependencies": {
13897
+ "xmlchars": "^2.2.0"
13898
+ },
13899
+ "engines": {
13900
+ "node": ">=v12.22.7"
13901
+ }
13902
+ },
11733
13903
"node_modules/scheduler": {
11734
13904
"version": "0.26.0",
11735
13905
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
@@ -12143,6 +14313,16 @@
12143
14313
"dev": true,
12144
14314
"license": "MIT"
12145
14315
},
14316
+ "node_modules/stack-generator": {
14317
+ "version": "2.0.10",
14318
+ "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz",
14319
+ "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==",
14320
+ "dev": true,
14321
+ "license": "MIT",
14322
+ "dependencies": {
14323
+ "stackframe": "^1.3.4"
14324
+ }
14325
+ },
12146
14326
"node_modules/stack-utils": {
12147
14327
"version": "2.0.6",
12148
14328
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
@@ -12170,6 +14350,39 @@
12170
14350
"integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
12171
14351
"license": "MIT"
12172
14352
},
14353
+ "node_modules/stacktrace-gps": {
14354
+ "version": "3.1.2",
14355
+ "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz",
14356
+ "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==",
14357
+ "dev": true,
14358
+ "license": "MIT",
14359
+ "dependencies": {
14360
+ "source-map": "0.5.6",
14361
+ "stackframe": "^1.3.4"
14362
+ }
14363
+ },
14364
+ "node_modules/stacktrace-gps/node_modules/source-map": {
14365
+ "version": "0.5.6",
14366
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
14367
+ "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==",
14368
+ "dev": true,
14369
+ "license": "BSD-3-Clause",
14370
+ "engines": {
14371
+ "node": ">=0.10.0"
14372
+ }
14373
+ },
14374
+ "node_modules/stacktrace-js": {
14375
+ "version": "2.0.2",
14376
+ "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz",
14377
+ "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==",
14378
+ "dev": true,
14379
+ "license": "MIT",
14380
+ "dependencies": {
14381
+ "error-stack-parser": "^2.0.6",
14382
+ "stack-generator": "^2.0.5",
14383
+ "stacktrace-gps": "^3.0.4"
14384
+ }
14385
+ },
12173
14386
"node_modules/stacktrace-parser": {
12174
14387
"version": "0.1.11",
12175
14388
"resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz",
@@ -12223,6 +14436,33 @@
12223
14436
"node": ">=4"
12224
14437
}
12225
14438
},
14439
+ "node_modules/string-length": {
14440
+ "version": "4.0.2",
14441
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
14442
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
14443
+ "dev": true,
14444
+ "license": "MIT",
14445
+ "dependencies": {
14446
+ "char-regex": "^1.0.2",
14447
+ "strip-ansi": "^6.0.0"
14448
+ },
14449
+ "engines": {
14450
+ "node": ">=10"
14451
+ }
14452
+ },
14453
+ "node_modules/string-length/node_modules/strip-ansi": {
14454
+ "version": "6.0.1",
14455
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
14456
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
14457
+ "dev": true,
14458
+ "license": "MIT",
14459
+ "dependencies": {
14460
+ "ansi-regex": "^5.0.1"
14461
+ },
14462
+ "engines": {
14463
+ "node": ">=8"
14464
+ }
14465
+ },
12226
14466
"node_modules/string-width": {
12227
14467
"version": "5.1.2",
12228
14468
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
@@ -12421,6 +14661,16 @@
12421
14661
"node": ">=4"
12422
14662
}
12423
14663
},
14664
+ "node_modules/strip-final-newline": {
14665
+ "version": "2.0.0",
14666
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
14667
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
14668
+ "dev": true,
14669
+ "license": "MIT",
14670
+ "engines": {
14671
+ "node": ">=6"
14672
+ }
14673
+ },
12424
14674
"node_modules/strip-json-comments": {
12425
14675
"version": "3.1.1",
12426
14676
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -12459,17 +14709,17 @@
12459
14709
"license": "MIT"
12460
14710
},
12461
14711
"node_modules/sucrase": {
12462
- "version": "3.35.0",
12463
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
12464
- "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
14712
+ "version": "3.35.1",
14713
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
14714
+ "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
12465
14715
"license": "MIT",
12466
14716
"dependencies": {
12467
14717
"@jridgewell/gen-mapping": "^0.3.2",
12468
14718
"commander": "^4.0.0",
12469
- "glob": "^10.3.10",
12470
14719
"lines-and-columns": "^1.1.6",
12471
14720
"mz": "^2.7.0",
12472
14721
"pirates": "^4.0.1",
14722
+ "tinyglobby": "^0.2.11",
12473
14723
"ts-interface-checker": "^0.1.9"
12474
14724
},
12475
14725
"bin": {
@@ -12526,6 +14776,13 @@
12526
14776
"url": "https://github.com/sponsors/ljharb"
12527
14777
}
12528
14778
},
14779
+ "node_modules/symbol-tree": {
14780
+ "version": "3.2.4",
14781
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
14782
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
14783
+ "dev": true,
14784
+ "license": "MIT"
14785
+ },
12529
14786
"node_modules/tar": {
12530
14787
"version": "7.5.2",
12531
14788
"resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz",
@@ -12666,7 +14923,6 @@
12666
14923
"version": "0.2.15",
12667
14924
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
12668
14925
"integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
12669
- "dev": true,
12670
14926
"license": "MIT",
12671
14927
"dependencies": {
12672
14928
"fdir": "^6.5.0",
@@ -12683,7 +14939,6 @@
12683
14939
"version": "6.5.0",
12684
14940
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
12685
14941
"integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
12686
- "dev": true,
12687
14942
"license": "MIT",
12688
14943
"engines": {
12689
14944
"node": ">=12.0.0"
@@ -12701,9 +14956,7 @@
12701
14956
"version": "4.0.3",
12702
14957
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
12703
14958
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
12704
- "dev": true,
12705
14959
"license": "MIT",
12706
- "peer": true,
12707
14960
"engines": {
12708
14961
"node": ">=12"
12709
14962
},
@@ -12738,6 +14991,22 @@
12738
14991
"node": ">=0.6"
12739
14992
}
12740
14993
},
14994
+ "node_modules/tough-cookie": {
14995
+ "version": "4.1.4",
14996
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
14997
+ "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
14998
+ "dev": true,
14999
+ "license": "BSD-3-Clause",
15000
+ "dependencies": {
15001
+ "psl": "^1.1.33",
15002
+ "punycode": "^2.1.1",
15003
+ "universalify": "^0.2.0",
15004
+ "url-parse": "^1.5.3"
15005
+ },
15006
+ "engines": {
15007
+ "node": ">=6"
15008
+ }
15009
+ },
12741
15010
"node_modules/tr46": {
12742
15011
"version": "0.0.3",
12743
15012
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -12910,7 +15179,6 @@
12910
15179
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
12911
15180
"dev": true,
12912
15181
"license": "Apache-2.0",
12913
- "peer": true,
12914
15182
"bin": {
12915
15183
"tsc": "bin/tsc",
12916
15184
"tsserver": "bin/tsserver"
@@ -13031,6 +15299,16 @@
13031
15299
"node": ">=8"
13032
15300
}
13033
15301
},
15302
+ "node_modules/universalify": {
15303
+ "version": "0.2.0",
15304
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
15305
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
15306
+ "dev": true,
15307
+ "license": "MIT",
15308
+ "engines": {
15309
+ "node": ">= 4.0.0"
15310
+ }
15311
+ },
13034
15312
"node_modules/unpipe": {
13035
15313
"version": "1.0.0",
13036
15314
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -13226,6 +15504,21 @@
13226
15504
"uuid": "dist/bin/uuid"
13227
15505
}
13228
15506
},
15507
+ "node_modules/v8-to-istanbul": {
15508
+ "version": "9.3.0",
15509
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
15510
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
15511
+ "dev": true,
15512
+ "license": "ISC",
15513
+ "dependencies": {
15514
+ "@jridgewell/trace-mapping": "^0.3.12",
15515
+ "@types/istanbul-lib-coverage": "^2.0.1",
15516
+ "convert-source-map": "^2.0.0"
15517
+ },
15518
+ "engines": {
15519
+ "node": ">=10.12.0"
15520
+ }
15521
+ },
13229
15522
"node_modules/validate-npm-package-name": {
13230
15523
"version": "5.0.1",
13231
15524
"resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
@@ -13440,6 +15733,19 @@
13440
15733
"integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==",
13441
15734
"license": "MIT"
13442
15735
},
15736
+ "node_modules/w3c-xmlserializer": {
15737
+ "version": "4.0.0",
15738
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
15739
+ "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==",
15740
+ "dev": true,
15741
+ "license": "MIT",
15742
+ "dependencies": {
15743
+ "xml-name-validator": "^4.0.0"
15744
+ },
15745
+ "engines": {
15746
+ "node": ">=14"
15747
+ }
15748
+ },
13443
15749
"node_modules/walker": {
13444
15750
"version": "1.0.8",
13445
15751
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
@@ -13546,12 +15852,36 @@
13546
15852
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
13547
15853
"license": "BSD-2-Clause"
13548
15854
},
15855
+ "node_modules/whatwg-encoding": {
15856
+ "version": "2.0.0",
15857
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
15858
+ "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
15859
+ "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation",
15860
+ "dev": true,
15861
+ "license": "MIT",
15862
+ "dependencies": {
15863
+ "iconv-lite": "0.6.3"
15864
+ },
15865
+ "engines": {
15866
+ "node": ">=12"
15867
+ }
15868
+ },
13549
15869
"node_modules/whatwg-fetch": {
13550
15870
"version": "3.6.20",
13551
15871
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz",
13552
15872
"integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==",
13553
15873
"license": "MIT"
13554
15874
},
15875
+ "node_modules/whatwg-mimetype": {
15876
+ "version": "3.0.0",
15877
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
15878
+ "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
15879
+ "dev": true,
15880
+ "license": "MIT",
15881
+ "engines": {
15882
+ "node": ">=12"
15883
+ }
15884
+ },
13555
15885
"node_modules/whatwg-url": {
13556
15886
"version": "5.0.0",
13557
15887
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
@@ -13842,6 +16172,16 @@
13842
16172
"node": ">=10.0.0"
13843
16173
}
13844
16174
},
16175
+ "node_modules/xml-name-validator": {
16176
+ "version": "4.0.0",
16177
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
16178
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
16179
+ "dev": true,
16180
+ "license": "Apache-2.0",
16181
+ "engines": {
16182
+ "node": ">=12"
16183
+ }
16184
+ },
13845
16185
"node_modules/xml2js": {
13846
16186
"version": "0.6.0",
13847
16187
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz",
@@ -13873,6 +16213,13 @@
13873
16213
"node": ">=8.0"
13874
16214
}
13875
16215
},
16216
+ "node_modules/xmlchars": {
16217
+ "version": "2.2.0",
16218
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
16219
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
16220
+ "dev": true,
16221
+ "license": "MIT"
16222
+ },
13876
16223
"node_modules/y18n": {
13877
16224
"version": "5.0.8",
13878
16225
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
@@ -13976,7 +16323,6 @@
13976
16323
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
13977
16324
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
13978
16325
"license": "MIT",
13979
- "peer": true,
13980
16326
"funding": {
13981
16327
"url": "https://github.com/sponsors/colinhacks"
13982
16328
}
MODIFY
package.json
+8 -1
@@ -8,7 +8,11 @@
8
8
"android": "expo start --android",
9
9
"ios": "expo start --ios",
10
10
"web": "expo start --web",
11
- "lint": "expo lint"
11
+ "lint": "expo lint",
12
+ "test": "jest"
13
+ },
14
+ "jest": {
15
+ "preset": "jest-expo"
12
16
},
13
17
"dependencies": {
14
18
"@expo/vector-icons": "^15.0.3",
@@ -50,9 +54,12 @@
50
54
"webdav": "^5.8.0"
51
55
},
52
56
"devDependencies": {
57
+ "@types/jest": "^29.5.12",
53
58
"@types/react": "~19.1.0",
54
59
"eslint": "^9.25.0",
55
60
"eslint-config-expo": "~10.0.0",
61
+ "jest": "^29.7.0",
62
+ "jest-expo": "~54.0.0",
56
63
"typescript": "~5.9.2"
57
64
},
58
65
"private": true
MODIFY
services/notification.service.ts
+68 -57
@@ -4,8 +4,17 @@
4
4
*/
5
5
6
6
import { Platform } from 'react-native';
7
+import AsyncStorage from '@react-native-async-storage/async-storage';
7
8
import type { NotificationRequest } from 'expo-notifications';
8
9
import taskService from './task.service';
10
+import {
11
+ DEFAULT_REMINDER_TIME,
12
+ ReminderTime,
13
+ buildReminderBody,
14
+ isValidReminderTime,
15
+} from '../utils/reminder';
16
+
17
+const REMINDER_TIME_KEY = '@taskflow_reminder_time';
9
18
10
19
// Only import notifications on native platforms
11
20
let Notifications: any;
@@ -64,44 +73,43 @@
64
73
}
65
74
66
75
/**
67
- * Schedule daily notification at noon
76
+ * Get the configured daily reminder time (falls back to the default).
68
77
*/
69
- async scheduleDailyNotification(): Promise<boolean> {
70
- if (Platform.OS === 'web') {
71
- return false;
72
- }
78
+ async getReminderTime(): Promise<ReminderTime> {
73
79
try {
74
- // Cancel existing notification if any
75
- if (this.notificationId) {
76
- await Notifications.cancelScheduledNotificationAsync(this.notificationId);
80
+ const json = await AsyncStorage.getItem(REMINDER_TIME_KEY);
81
+ if (json) {
82
+ const parsed = JSON.parse(json) as ReminderTime;
83
+ if (isValidReminderTime(parsed)) {
84
+ return parsed;
85
+ }
77
86
}
78
-
79
- // Schedule notification for noon every day
80
- this.notificationId = await Notifications.scheduleNotificationAsync({
81
- content: {
82
- title: 'Daily Task Reminder',
83
- body: 'Check your tasks for today',
84
- sound: true,
85
- priority: Notifications.AndroidNotificationPriority.HIGH,
86
- },
87
- trigger: {
88
- type: Notifications.SchedulableTriggerInputTypes.DAILY,
89
- hour: 12,
90
- minute: 0,
91
- repeats: true,
92
- } as any,
93
- });
94
-
95
- console.log('Daily notification scheduled:', this.notificationId);
96
- return true;
97
87
} catch (error) {
98
- console.error('Failed to schedule notification:', error);
99
- return false;
88
+ console.error('Failed to load reminder time:', error);
89
+ }
90
+ return DEFAULT_REMINDER_TIME;
91
+ }
92
+
93
+ /**
94
+ * Persist a new reminder time. If a daily reminder is currently scheduled,
95
+ * it is rescheduled at the new time.
96
+ */
97
+ async setReminderTime(time: ReminderTime): Promise<void> {
98
+ if (!isValidReminderTime(time)) {
99
+ throw new Error('Invalid reminder time');
100
+ }
101
+ await AsyncStorage.setItem(REMINDER_TIME_KEY, JSON.stringify(time));
102
+ if (Platform.OS !== 'web') {
103
+ const scheduled = await this.getScheduledNotifications();
104
+ if (scheduled.length > 0) {
105
+ await this.scheduleDailyNotificationWithCount();
106
+ }
100
107
}
101
108
}
102
109
103
110
/**
104
- * Schedule notification with task count
111
+ * Schedule the daily reminder at the configured time, with a body that
112
+ * reflects how many tasks are scheduled for today.
105
113
*/
106
114
async scheduleDailyNotificationWithCount(): Promise<boolean> {
107
115
if (Platform.OS === 'web') {
@@ -113,21 +121,15 @@
113
121
return false;
114
122
}
115
123
116
- // Cancel existing notification if any
117
- if (this.notificationId) {
118
- await Notifications.cancelScheduledNotificationAsync(this.notificationId);
119
- }
124
+ // Cancel any previously scheduled reminder. We cancel all (rather than
125
+ // by id) so duplicates can't pile up across app restarts, where the
126
+ // in-memory notificationId is lost.
127
+ await Notifications.cancelAllScheduledNotificationsAsync();
120
128
121
- // Get today's task count
122
129
const todayTasks = await taskService.getTodayTasks();
123
- const taskCount = todayTasks.length;
130
+ const body = buildReminderBody(todayTasks.length);
131
+ const { hour, minute } = await this.getReminderTime();
124
132
125
- let body = 'Check your tasks for today';
126
- if (taskCount > 0) {
127
- body = `You have ${taskCount} task${taskCount > 1 ? 's' : ''} scheduled for today`;
128
- }
129
-
130
- // Schedule notification for noon every day
131
133
this.notificationId = await Notifications.scheduleNotificationAsync({
132
134
content: {
133
135
title: '📋 Daily Task Reminder',
@@ -138,13 +140,12 @@
138
140
},
139
141
trigger: {
140
142
type: Notifications.SchedulableTriggerInputTypes.DAILY,
141
- hour: 12,
142
- minute: 0,
143
+ hour,
144
+ minute,
143
145
repeats: true,
144
146
} as any,
145
147
});
146
148
147
- console.log('Daily notification scheduled with count:', this.notificationId);
148
149
return true;
149
150
} catch (error) {
150
151
console.error('Failed to schedule notification with count:', error);
@@ -153,18 +154,33 @@
153
154
}
154
155
155
156
/**
156
- * Cancel daily notification
157
+ * Re-schedule the daily reminder if one is already active, so the task
158
+ * count and configured time stay current. Safe to call on app start.
159
+ */
160
+ async refreshDailyNotificationIfEnabled(): Promise<void> {
161
+ if (Platform.OS === 'web') {
162
+ return;
163
+ }
164
+ try {
165
+ const scheduled = await this.getScheduledNotifications();
166
+ if (scheduled.length > 0) {
167
+ await this.scheduleDailyNotificationWithCount();
168
+ }
169
+ } catch (error) {
170
+ console.error('Failed to refresh daily notification:', error);
171
+ }
172
+ }
173
+
174
+ /**
175
+ * Cancel the daily reminder.
157
176
*/
158
177
async cancelDailyNotification(): Promise<void> {
159
178
if (Platform.OS === 'web') {
160
179
return;
161
180
}
162
181
try {
163
- if (this.notificationId) {
164
- await Notifications.cancelScheduledNotificationAsync(this.notificationId);
165
- this.notificationId = null;
166
- console.log('Daily notification cancelled');
167
- }
182
+ await Notifications.cancelAllScheduledNotificationsAsync();
183
+ this.notificationId = null;
168
184
} catch (error) {
169
185
console.error('Failed to cancel notification:', error);
170
186
}
@@ -216,12 +232,7 @@
216
232
async sendTestNotification(): Promise<void> {
217
233
try {
218
234
const todayTasks = await taskService.getTodayTasks();
219
- const taskCount = todayTasks.length;
220
-
221
- let body = 'No tasks scheduled for today';
222
- if (taskCount > 0) {
223
- body = `You have ${taskCount} task${taskCount > 1 ? 's' : ''} scheduled for today`;
224
- }
235
+ const body = buildReminderBody(todayTasks.length);
225
236
226
237
await Notifications.scheduleNotificationAsync({
227
238
content: {
ADD
utils/__tests__/reminder.test.ts
+52 -0
@@ -0,0 +1,52 @@
1
+import {
2
+ DEFAULT_REMINDER_TIME,
3
+ buildReminderBody,
4
+ formatReminderTime,
5
+ isValidReminderTime,
6
+} from '../reminder';
7
+
8
+describe('buildReminderBody', () => {
9
+ it('reports when there are no tasks for today', () => {
10
+ expect(buildReminderBody(0)).toBe('No tasks scheduled for today');
11
+ });
12
+
13
+ it('uses the singular form for exactly one task', () => {
14
+ expect(buildReminderBody(1)).toBe('You have 1 task scheduled for today');
15
+ });
16
+
17
+ it('uses the plural form for multiple tasks', () => {
18
+ expect(buildReminderBody(5)).toBe('You have 5 tasks scheduled for today');
19
+ });
20
+
21
+ it('treats negative counts as zero', () => {
22
+ expect(buildReminderBody(-3)).toBe('No tasks scheduled for today');
23
+ });
24
+});
25
+
26
+describe('formatReminderTime', () => {
27
+ it('zero-pads hours and minutes (24h format)', () => {
28
+ expect(formatReminderTime({ hour: 8, minute: 5 })).toBe('08:05');
29
+ });
30
+
31
+ it('formats the noon default', () => {
32
+ expect(formatReminderTime(DEFAULT_REMINDER_TIME)).toBe('12:00');
33
+ });
34
+
35
+ it('formats late evening times', () => {
36
+ expect(formatReminderTime({ hour: 23, minute: 59 })).toBe('23:59');
37
+ });
38
+});
39
+
40
+describe('isValidReminderTime', () => {
41
+ it('accepts valid times', () => {
42
+ expect(isValidReminderTime({ hour: 0, minute: 0 })).toBe(true);
43
+ expect(isValidReminderTime({ hour: 23, minute: 59 })).toBe(true);
44
+ });
45
+
46
+ it('rejects out-of-range or non-integer values', () => {
47
+ expect(isValidReminderTime({ hour: 24, minute: 0 })).toBe(false);
48
+ expect(isValidReminderTime({ hour: -1, minute: 0 })).toBe(false);
49
+ expect(isValidReminderTime({ hour: 12, minute: 60 })).toBe(false);
50
+ expect(isValidReminderTime({ hour: 12.5, minute: 0 })).toBe(false);
51
+ });
52
+});
ADD
utils/reminder.ts
+48 -0
@@ -0,0 +1,48 @@
1
+/**
2
+ * Daily reminder helpers
3
+ *
4
+ * Pure, platform-independent logic for the daily task reminder so it can be
5
+ * unit-tested without the native notifications module.
6
+ */
7
+
8
+export interface ReminderTime {
9
+ /** Hour of day in 24h format (0-23). */
10
+ hour: number;
11
+ /** Minute of hour (0-59). */
12
+ minute: number;
13
+}
14
+
15
+/** Default reminder time: 12:00 (noon). */
16
+export const DEFAULT_REMINDER_TIME: ReminderTime = { hour: 12, minute: 0 };
17
+
18
+/**
19
+ * Build the reminder notification body, reflecting how many tasks are
20
+ * scheduled for today.
21
+ */
22
+export function buildReminderBody(taskCount: number): string {
23
+ if (!Number.isFinite(taskCount) || taskCount <= 0) {
24
+ return 'No tasks scheduled for today';
25
+ }
26
+ const noun = taskCount === 1 ? 'task' : 'tasks';
27
+ return `You have ${taskCount} ${noun} scheduled for today`;
28
+}
29
+
30
+/** Format a reminder time as a zero-padded 24h string, e.g. "08:05". */
31
+export function formatReminderTime({ hour, minute }: ReminderTime): string {
32
+ const hh = String(hour).padStart(2, '0');
33
+ const mm = String(minute).padStart(2, '0');
34
+ return `${hh}:${mm}`;
35
+}
36
+
37
+/** Validate that a reminder time has in-range, integer hour and minute. */
38
+export function isValidReminderTime(time: ReminderTime): boolean {
39
+ const { hour, minute } = time;
40
+ return (
41
+ Number.isInteger(hour) &&
42
+ Number.isInteger(minute) &&
43
+ hour >= 0 &&
44
+ hour <= 23 &&
45
+ minute >= 0 &&
46
+ minute <= 59
47
+ );
48
+}