From 735cc0b90379d9a9739f5483bc88e3bfda6e6297 Mon Sep 17 00:00:00 2001 From: Zhiyuan Zheng Date: Sat, 28 Nov 2020 17:07:30 +0100 Subject: [PATCH] A lot of updates --- App.tsx | 12 +- package.json | 3 +- src/@types/untyped.d.ts | 1 + src/Index.tsx | 7 +- src/api/client.ts | 5 +- src/components/BottomSheet.tsx | 128 +++ src/components/BottomSheet/Row.tsx | 37 + src/components/Menu/Button.tsx | 2 +- src/components/ParseContent.tsx | 36 +- src/components/Timelines.tsx | 116 +-- src/components/Timelines/Timeline.tsx | 104 ++- src/components/Timelines/Timeline/Default.tsx | 84 +- .../Timelines/Timeline/Shared/Actioned.tsx | 2 +- .../Timeline/Shared/ActionsStatus.tsx | 343 ++++---- .../Timelines/Timeline/Shared/Attachment.tsx | 2 +- .../Timelines/Timeline/Shared/Avatar.tsx | 19 +- .../Timelines/Timeline/Shared/Card.tsx | 49 +- .../Timeline/Shared/HeaderDefault.tsx | 304 +++---- src/components/toast.tsx | 102 +++ src/screens/Me.tsx | 19 +- src/screens/Me/Lists.tsx | 15 +- src/screens/Me/Root/Settings.tsx | 2 +- src/screens/Me/Settings.tsx | 9 + src/screens/Shared/Account/Header.tsx | 1 - src/screens/Shared/Compose.tsx | 1 - src/screens/Shared/Compose/PostMain.tsx | 4 - src/utils/styles/constants.ts | 1 + src/utils/styles/themes.ts | 19 +- yarn.lock | 788 ++---------------- 29 files changed, 940 insertions(+), 1275 deletions(-) create mode 100644 src/@types/untyped.d.ts create mode 100644 src/components/BottomSheet.tsx create mode 100644 src/components/BottomSheet/Row.tsx create mode 100644 src/components/toast.tsx create mode 100644 src/screens/Me/Settings.tsx diff --git a/App.tsx b/App.tsx index 5637a813..dfe2d708 100644 --- a/App.tsx +++ b/App.tsx @@ -15,10 +15,14 @@ setConsole({ error: console.warn }) -if (__DEV__) { - const whyDidYouRender = require('@welldone-software/why-did-you-render') - // whyDidYouRender(React) -} +// if (__DEV__) { +// const whyDidYouRender = require('@welldone-software/why-did-you-render') +// whyDidYouRender(React, { +// trackAllPureComponents: true, +// trackHooks: true, +// hotReloadBufferMs: 1000 +// }) +// } const App: React.FC = () => { return ( diff --git a/package.json b/package.json index 012fa88d..eaadcd04 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,6 @@ "@types/react": "~16.9.35", "@types/react-dom": "^16.9.9", "@types/react-native": "~0.63.2", - "@types/react-native-htmlview": "^0.12.2", "@types/react-navigation": "^3.4.0", "@types/react-redux": "^7.1.11", "@welldone-software/why-did-you-render": "^6.0.0-rc.1", @@ -61,4 +60,4 @@ "typescript": "~3.9.2" }, "private": true -} +} \ No newline at end of file diff --git a/src/@types/untyped.d.ts b/src/@types/untyped.d.ts new file mode 100644 index 00000000..b1a5b417 --- /dev/null +++ b/src/@types/untyped.d.ts @@ -0,0 +1 @@ +declare module 'react-native-toast-message' diff --git a/src/Index.tsx b/src/Index.tsx index ee9eb5da..0a5f1a3f 100644 --- a/src/Index.tsx +++ b/src/Index.tsx @@ -4,10 +4,8 @@ import { NavigationContainer } from '@react-navigation/native' import { enableScreens } from 'react-native-screens' import React from 'react' -import { Feather } from '@expo/vector-icons' - -// @ts-ignore import Toast from 'react-native-toast-message' +import { Feather } from '@expo/vector-icons' import ScreenLocal from 'src/screens/Local' import ScreenPublic from 'src/screens/Public' @@ -17,6 +15,7 @@ import ScreenMe from 'src/screens/Me' import { themes } from 'src/utils/styles/themes' import { useTheme } from 'src/utils/styles/ThemeManager' import getCurrentTab from 'src/utils/getCurrentTab' +import { toastConfig } from 'src/components/toast' enableScreens() const Tab = createBottomTabNavigator() @@ -89,7 +88,7 @@ export const Index: React.FC = () => { - Toast.setRef(ref)} /> + Toast.setRef(ref)} config={toastConfig} /> ) } diff --git a/src/api/client.ts b/src/api/client.ts index e8536891..f1bdb16c 100644 --- a/src/api/client.ts +++ b/src/api/client.ts @@ -45,9 +45,8 @@ const client = async ({ // } catch (error) { // return Promise.reject('ky error: ' + error.json()) // } - console.log('upload done') - if (response?.ok) { - console.log('returning ok') + console.log('Query: /' + endpoint) + if (response.ok) { return Promise.resolve({ headers: response.headers, body: await response.json() diff --git a/src/components/BottomSheet.tsx b/src/components/BottomSheet.tsx new file mode 100644 index 00000000..f30c4f1e --- /dev/null +++ b/src/components/BottomSheet.tsx @@ -0,0 +1,128 @@ +import React, { useEffect, useRef } from 'react' +import { + Animated, + Dimensions, + Modal, + PanResponder, + Pressable, + StyleSheet, + Text, + View +} from 'react-native' +import { useSafeAreaInsets } from 'react-native-safe-area-context' +import { useTheme } from 'src/utils/styles/ThemeManager' + +import constants from 'src/utils/styles/constants' + +export interface Props { + children: React.ReactNode + visible: boolean + handleDismiss: () => void +} + +const BottomSheet: React.FC = ({ children, visible, handleDismiss }) => { + const { theme } = useTheme() + const insets = useSafeAreaInsets() + + const panY = useRef(new Animated.Value(Dimensions.get('screen').height)) + .current + const top = panY.interpolate({ + inputRange: [-1, 0, 1], + outputRange: [0, 0, 1] + }) + const resetModal = Animated.timing(panY, { + toValue: 0, + duration: 300, + useNativeDriver: false + }) + + const closeModal = Animated.timing(panY, { + toValue: Dimensions.get('screen').height, + duration: 350, + useNativeDriver: false + }) + + const panResponder = useRef( + PanResponder.create({ + onStartShouldSetPanResponder: () => true, + onMoveShouldSetPanResponder: () => true, + onPanResponderMove: Animated.event([null, { dy: panY }], { + useNativeDriver: false + }), + onPanResponderRelease: (e, gs) => { + if (gs.dy > 0 && gs.vy > 1) { + return closeModal.start(() => handleDismiss()) + } else if (gs.dy === 0 && gs.vy === 0) { + return closeModal.start(() => handleDismiss()) + } + return resetModal.start() + } + }) + ).current + + useEffect(() => { + if (visible) { + resetModal.start() + } + }, [visible]) + + return ( + + + + + {children} + closeModal.start(() => handleDismiss())} + style={[styles.cancel, { borderColor: theme.primary }]} + > + 取消 + + + + + ) +} + +const styles = StyleSheet.create({ + overlay: { + flex: 1, + justifyContent: 'flex-end' + }, + container: { + padding: constants.SPACING_L, + paddingTop: constants.SPACING_M + }, + handle: { + alignSelf: 'center', + width: constants.GLOBAL_SPACING_BASE * 8, + height: constants.GLOBAL_SPACING_BASE / 2, + borderRadius: 100, + top: -constants.SPACING_M * 2 + }, + cancel: { + padding: constants.SPACING_S, + borderWidth: 1, + borderRadius: 100 + }, + text: { + fontSize: constants.FONT_SIZE_L, + textAlign: 'center' + } +}) + +export default BottomSheet diff --git a/src/components/BottomSheet/Row.tsx b/src/components/BottomSheet/Row.tsx new file mode 100644 index 00000000..bf5a6f81 --- /dev/null +++ b/src/components/BottomSheet/Row.tsx @@ -0,0 +1,37 @@ +import React from 'react' +import { Pressable, StyleSheet, Text } from 'react-native' +import { Feather } from '@expo/vector-icons' + +import constants from 'src/utils/styles/constants' +import { useTheme } from 'src/utils/styles/ThemeManager' + +export interface Props { + onPressFunction: () => void + icon: string + text: string +} + +const BottomSheetRow: React.FC = ({ onPressFunction, icon, text }) => { + const { theme } = useTheme() + + return ( + onPressFunction()} style={styles.pressable}> + + {text} + + ) +} + +const styles = StyleSheet.create({ + pressable: { + flexDirection: 'row', + marginBottom: constants.SPACING_L + }, + text: { + fontSize: constants.FONT_SIZE_M, + lineHeight: constants.FONT_SIZE_L, + marginLeft: constants.SPACING_S + } +}) + +export default BottomSheetRow diff --git a/src/components/Menu/Button.tsx b/src/components/Menu/Button.tsx index 98b873ca..a46d0188 100644 --- a/src/components/Menu/Button.tsx +++ b/src/components/Menu/Button.tsx @@ -28,7 +28,7 @@ const Core: React.FC = ({ text, destructive = false }) => { return ( - + {text} diff --git a/src/components/ParseContent.tsx b/src/components/ParseContent.tsx index 8c984371..ff37e394 100644 --- a/src/components/ParseContent.tsx +++ b/src/components/ParseContent.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import React, { useCallback } from 'react' import { Text } from 'react-native' import HTMLView, { HTMLViewNode } from 'react-native-htmlview' import { useNavigation } from '@react-navigation/native' @@ -102,22 +102,30 @@ const ParseContent: React.FC = ({ const navigation = useNavigation() const { theme } = useTheme() + const renderNodeCallback = useCallback( + (node, index) => + renderNode({ theme, node, index, navigation, mentions, showFullLink }), + [] + ) + const textComponent = useCallback( + ({ children }) => + emojis && children ? ( + + ) : ( + {children} + ), + [] + ) + const rootComponent = useCallback(({ children }) => { + return {children} + }, []) + return ( - renderNode({ theme, node, index, navigation, mentions, showFullLink }) - } - TextComponent={({ children }) => - emojis && children ? ( - - ) : ( - {children} - ) - } - RootComponent={({ children }) => { - return {children} - }} + TextComponent={textComponent} + RootComponent={rootComponent} + renderNode={renderNodeCallback} /> ) } diff --git a/src/components/Timelines.tsx b/src/components/Timelines.tsx index 715dabec..d7b0edcb 100644 --- a/src/components/Timelines.tsx +++ b/src/components/Timelines.tsx @@ -1,5 +1,5 @@ -import React, { useEffect, useRef, useState } from 'react' -import { Dimensions, FlatList, Text, View } from 'react-native' +import React, { useCallback, useEffect, useRef, useState } from 'react' +import { Dimensions, FlatList, StyleSheet, Text, View } from 'react-native' import SegmentedControl from '@react-native-community/segmented-control' import { createNativeStackNavigator } from 'react-native-screens/native-stack' import { useSelector } from 'react-redux' @@ -59,6 +59,52 @@ const Timelines: React.FC = ({ name, content }) => { const horizontalPaging = useRef(null!) + const onChangeSegment = useCallback(({ nativeEvent }) => { + setSegmentManuallyTriggered(true) + setSegment(nativeEvent.selectedSegmentIndex) + horizontalPaging.current.scrollToIndex({ + index: nativeEvent.selectedSegmentIndex + }) + }, []) + const onPressSearch = useCallback(() => { + navigation.navigate(getCurrentTab(navigation), { + screen: 'Screen-Shared-Search' + }) + }, []) + + const flGetItemLayout = useCallback( + (data, index) => ({ + length: Dimensions.get('window').width, + offset: Dimensions.get('window').width * index, + index + }), + [] + ) + const flKeyExtrator = useCallback(({ page }) => page, []) + const flRenderItem = useCallback( + ({ item, index }) => { + if (!localRegistered && index === 0) { + return null + } + return + }, + [localRegistered] + ) + const flOnMomentumScrollEnd = useCallback( + () => setSegmentManuallyTriggered(false), + [] + ) + const flOnScroll = useCallback( + ({ nativeEvent }) => + !segmentManuallyTriggered && + setSegment( + nativeEvent.contentOffset.x <= Dimensions.get('window').width / 2 + ? 0 + : 1 + ), + [] + ) + return ( = ({ name, content }) => { { - setSegmentManuallyTriggered(true) - setSegment(nativeEvent.selectedSegmentIndex) - horizontalPaging.current.scrollToIndex({ - index: nativeEvent.selectedSegmentIndex - }) - }} + onChange={onChangeSegment} style={{ width: 150, height: 30 }} /> ), @@ -86,11 +126,7 @@ const Timelines: React.FC = ({ name, content }) => { name='search' size={24} color={theme.secondary} - onPress={() => { - navigation.navigate(getCurrentTab(navigation), { - screen: 'Screen-Shared-Search' - }) - }} + onPress={onPressSearch} /> ) }) @@ -99,42 +135,19 @@ const Timelines: React.FC = ({ name, content }) => { {() => { return ( page} - renderItem={({ item, index }) => { - if (!localRegistered && index === 0) { - return null - } - return ( - - ) - }} - ref={horizontalPaging} - bounces={false} - getItemLayout={(data, index) => ({ - length: Dimensions.get('window').width, - offset: Dimensions.get('window').width * index, - index - })} horizontal - onMomentumScrollEnd={() => setSegmentManuallyTriggered(false)} - onScroll={({ nativeEvent }) => - !segmentManuallyTriggered && - setSegment( - nativeEvent.contentOffset.x <= - Dimensions.get('window').width / 2 - ? 0 - : 1 - ) - } pagingEnabled + data={content} + bounces={false} + onScroll={flOnScroll} + ref={horizontalPaging} + style={styles.flatList} + renderItem={flRenderItem} + extraData={localRegistered} + keyExtractor={flKeyExtrator} + getItemLayout={flGetItemLayout} showsHorizontalScrollIndicator={false} + onMomentumScrollEnd={flOnMomentumScrollEnd} /> ) }} @@ -145,4 +158,11 @@ const Timelines: React.FC = ({ name, content }) => { ) } -export default Timelines +const styles = StyleSheet.create({ + flatList: { + width: Dimensions.get('window').width, + height: '100%' + } +}) + +export default React.memo(Timelines, () => true) diff --git a/src/components/Timelines/Timeline.tsx b/src/components/Timelines/Timeline.tsx index 748ea2a3..285cf4ad 100644 --- a/src/components/Timelines/Timeline.tsx +++ b/src/components/Timelines/Timeline.tsx @@ -1,5 +1,12 @@ -import React from 'react' -import { ActivityIndicator, AppState, FlatList, Text, View } from 'react-native' +import React, { useCallback } from 'react' +import { + ActivityIndicator, + AppState, + FlatList, + StyleSheet, + Text, + View +} from 'react-native' import { setFocusHandler, useInfiniteQuery } from 'react-query' import TimelineNotifications from 'src/components/Timelines/Timeline/Notifications' @@ -51,6 +58,40 @@ const Timeline: React.FC = ({ const flattenData = data ? data.flatMap(d => [...d?.toots]) : [] // const flattenPointer = data ? data.flatMap(d => [d?.pointer]) : [] + const flKeyExtrator = useCallback(({ id }) => id, []) + const flRenderItem = useCallback(({ item }) => { + switch (page) { + case 'Conversations': + return + case 'Notifications': + return + default: + return + } + }, []) + const flItemSeparatorComponent = useCallback(() => , []) + const flOnRefresh = useCallback( + () => + !disableRefresh && + fetchMore( + { + direction: 'prev', + id: flattenData[0].id + }, + { previous: true } + ), + [disableRefresh] + ) + const flOnEndReach = useCallback( + () => + !disableRefresh && + fetchMore({ + direction: 'next', + id: flattenData[flattenData.length - 1].id + }), + [disableRefresh] + ) + let content if (!isSuccess) { content = @@ -60,53 +101,18 @@ const Timeline: React.FC = ({ content = ( <> id} - renderItem={({ item, index, separators }) => { - switch (page) { - case 'Conversations': - return - case 'Notifications': - return ( - - ) - default: - return ( - - ) - } - }} - ItemSeparatorComponent={() => } + onRefresh={flOnRefresh} + renderItem={flRenderItem} + onEndReached={flOnEndReach} + keyExtractor={flKeyExtrator} + style={styles.flatList} + scrollEnabled={scrollEnabled} // For timeline in Account view + ItemSeparatorComponent={flItemSeparatorComponent} + refreshing={!disableRefresh && isLoading} + onEndReachedThreshold={!disableRefresh ? 0.5 : null} // require getItemLayout // {...(flattenPointer[0] && { initialScrollIndex: flattenPointer[0] })} - {...(!disableRefresh && { - onRefresh: () => - fetchMore( - { - direction: 'prev', - id: flattenData[0].id - }, - { previous: true } - ), - refreshing: isLoading, - onEndReached: () => { - fetchMore({ - direction: 'next', - id: flattenData[flattenData.length - 1].id - }) - }, - onEndReachedThreshold: 0.5 - })} /> {isFetchingMore && } @@ -116,4 +122,10 @@ const Timeline: React.FC = ({ return {content} } +const styles = StyleSheet.create({ + flatList: { + minHeight: '100%' + } +}) + export default Timeline diff --git a/src/components/Timelines/Timeline/Default.tsx b/src/components/Timelines/Timeline/Default.tsx index 4c1e473c..63196b74 100644 --- a/src/components/Timelines/Timeline/Default.tsx +++ b/src/components/Timelines/Timeline/Default.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react' +import React, { useCallback, useMemo } from 'react' import { Dimensions, Pressable, StyleSheet, View } from 'react-native' import { useNavigation } from '@react-navigation/native' @@ -24,6 +24,43 @@ const TimelineDefault: React.FC = ({ item, queryKey }) => { let actualStatus = item.reblog ? item.reblog : item + const pressableToot = useCallback( + () => + navigation.navigate('Screen-Shared-Toot', { + toot: actualStatus.id + }), + [] + ) + const childrenToot = useMemo( + () => ( + <> + {actualStatus.content ? ( + + ) : ( + <> + )} + {actualStatus.poll && } + {actualStatus.media_attachments.length > 0 && ( + + )} + {actualStatus.card && } + + ), + [] + ) + const statusView = useMemo(() => { return ( @@ -54,40 +91,7 @@ const TimelineDefault: React.FC = ({ item, queryKey }) => { application={item.application} /> {/* Can pass toot info to next page to speed up performance */} - - navigation.navigate('Screen-Shared-Toot', { - toot: actualStatus.id - }) - } - > - {actualStatus.content ? ( - - ) : ( - <> - )} - {actualStatus.poll && } - {actualStatus.media_attachments.length > 0 && ( - - )} - {actualStatus.card && } - + @@ -114,4 +118,12 @@ const styles = StyleSheet.create({ } }) -export default TimelineDefault +export default React.memo(TimelineDefault, (prev, next) => { + let skipUpdate = true + skipUpdate = prev.item.id === next.item.id + skipUpdate = prev.item.replies_count === next.item.replies_count + skipUpdate = prev.item.favourited === next.item.favourited + skipUpdate = prev.item.reblogged === next.item.reblogged + skipUpdate = prev.item.bookmarked === next.item.bookmarked + return skipUpdate +}) diff --git a/src/components/Timelines/Timeline/Shared/Actioned.tsx b/src/components/Timelines/Timeline/Shared/Actioned.tsx index e69fd293..a8480d48 100644 --- a/src/components/Timelines/Timeline/Shared/Actioned.tsx +++ b/src/components/Timelines/Timeline/Shared/Actioned.tsx @@ -108,4 +108,4 @@ const styles = StyleSheet.create({ } }) -export default Actioned +export default React.memo(Actioned) diff --git a/src/components/Timelines/Timeline/Shared/ActionsStatus.tsx b/src/components/Timelines/Timeline/Shared/ActionsStatus.tsx index 2c6549a0..b3a7f1b3 100644 --- a/src/components/Timelines/Timeline/Shared/ActionsStatus.tsx +++ b/src/components/Timelines/Timeline/Shared/ActionsStatus.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import React, { useCallback, useMemo, useState } from 'react' import { ActionSheetIOS, Clipboard, @@ -11,12 +11,14 @@ import { import Toast from 'react-native-toast-message' import { useMutation, useQueryCache } from 'react-query' import { Feather } from '@expo/vector-icons' +import { findIndex } from 'lodash' import client from 'src/api/client' import { getLocalAccountId } from 'src/utils/slices/instancesSlice' import { store } from 'src/store' import { useTheme } from 'src/utils/styles/ThemeManager' import constants from 'src/utils/styles/constants' +import { toast } from 'src/components/toast' const fireMutation = async ({ id, @@ -25,14 +27,7 @@ const fireMutation = async ({ prevState }: { id: string - type: - | 'favourite' - | 'reblog' - | 'bookmark' - | 'mute' - | 'pin' - | 'delete' - | 'account/mute' + type: 'favourite' | 'reblog' | 'bookmark' | 'mute' | 'pin' | 'delete' stateKey: | 'favourited' | 'reblogged' @@ -53,27 +48,13 @@ const fireMutation = async ({ method: 'post', instance: 'local', endpoint: `statuses/${id}/${prevState ? 'un' : ''}${type}` - }) + }) // bug in response from Mastodon if (!res.body[stateKey] === prevState) { - if (type === 'bookmark' || 'mute' || 'pin') - Toast.show({ - type: 'success', - position: 'bottom', - text1: '功能成功', - visibilityTime: 2000, - autoHide: true, - bottomOffset: 65 - }) + toast({ type: 'success', content: '功能成功' }) return Promise.resolve(res.body) } else { - Toast.show({ - type: 'error', - position: 'bottom', - text1: '请重试', - autoHide: false, - bottomOffset: 65 - }) + toast({ type: 'error', content: '功能错误' }) return Promise.reject() } break @@ -85,23 +66,10 @@ const fireMutation = async ({ }) if (res.body[stateKey] === id) { - Toast.show({ - type: 'success', - position: 'bottom', - text1: '删除成功', - visibilityTime: 2000, - autoHide: true, - bottomOffset: 65 - }) + toast({ type: 'success', content: '删除成功' }) return Promise.resolve(res.body) } else { - Toast.show({ - type: 'error', - position: 'bottom', - text1: '请重试', - autoHide: false, - bottomOffset: 65 - }) + toast({ type: 'error', content: '删除失败' }) return Promise.reject() } break @@ -120,136 +88,204 @@ const ActionsStatus: React.FC = ({ queryKey, status }) => { state ? theme.primary : theme.secondary const localAccountId = getLocalAccountId(store.getState()) - const [modalVisible, setModalVisible] = useState(false) + const [bottomSheetVisible, setBottomSheetVisible] = useState(false) const queryCache = useQueryCache() const [mutateAction] = useMutation(fireMutation, { - onMutate: () => { + onMutate: ({ id, type, stateKey, prevState }) => { queryCache.cancelQueries(queryKey) - const prevData = queryCache.getQueryData(queryKey) - return prevData - }, - onSuccess: (newData, params) => { - if (params.type === 'reblog') { - queryCache.invalidateQueries(['Following', { page: 'Following' }]) + const oldData = queryCache.getQueryData(queryKey) + + switch (type) { + case 'favourite': + case 'reblog': + case 'bookmark': + case 'mute': + case 'pin': + queryCache.setQueryData(queryKey, old => + (old as {}[]).map((paging: any) => ({ + toots: paging.toots.map((toot: any) => { + if (toot.id === id) { + toot[stateKey] = + typeof prevState === 'boolean' ? !prevState : true + } + return toot + }), + pointer: paging.pointer + })) + ) + break + case 'delete': + queryCache.setQueryData(queryKey, old => + (old as {}[]).map((paging: any) => ({ + toots: paging.toots.map((toot: any, index: number) => { + if (toot.id === id) { + paging.toots.splice(index, 1) + } + return toot + }), + pointer: paging.pointer + })) + ) + break } - // queryCache.setQueryData(queryKey, (oldData: any) => { - // oldData && - // oldData.map((paging: any) => { - // paging.toots.map( - // (status: Mastodon.Status | Mastodon.Notification, i: number) => { - // if (status.id === newData.id) { - // paging.toots[i] = newData - // } - // } - // ) - // }) - // return oldData - // }) - return Promise.resolve() + + return oldData }, - onError: (err, variables, prevData) => { - queryCache.setQueryData(queryKey, prevData) - }, - onSettled: () => { - queryCache.invalidateQueries(queryKey) + onError: (err, _, oldData) => { + toast({ type: 'error', content: '请重试' }) + queryCache.setQueryData(queryKey, oldData) } }) + const onPressReply = useCallback(() => {}, []) + const onPressReblog = useCallback( + () => + mutateAction({ + id: status.id, + type: 'reblog', + stateKey: 'reblogged', + prevState: status.reblogged + }), + [status.reblogged] + ) + const onPressFavourite = useCallback( + () => + mutateAction({ + id: status.id, + type: 'favourite', + stateKey: 'favourited', + prevState: status.favourited + }), + [status.favourited] + ) + const onPressBookmark = useCallback( + () => + mutateAction({ + id: status.id, + type: 'bookmark', + stateKey: 'bookmarked', + prevState: status.bookmarked + }), + [status.bookmarked] + ) + const onPressShare = useCallback(() => setBottomSheetVisible(true), []) + + const childrenReply = useMemo( + () => ( + <> + + {status.replies_count > 0 && ( + + {status.replies_count} + + )} + + ), + [status.replies_count] + ) + const childrenReblog = useMemo( + () => ( + + ), + [status.reblogged] + ) + const childrenFavourite = useMemo( + () => ( + + ), + [status.favourited] + ) + const childrenBookmark = useMemo( + () => ( + + ), + [status.bookmarked] + ) + const childrenShare = useMemo( + () => ( + + ), + [] + ) + return ( <> - - - {status.replies_count > 0 && ( - - {status.replies_count} - - )} - + - mutateAction({ - id: status.id, - type: 'reblog', - stateKey: 'reblogged', - prevState: status.reblogged - }) + onPress={ + status.visibility === 'public' || status.visibility === 'unlisted' + ? onPressReblog + : null } - > - - + children={childrenReblog} + /> - mutateAction({ - id: status.id, - type: 'favourite', - stateKey: 'favourited', - prevState: status.favourited - }) - } - > - - + onPress={onPressFavourite} + children={childrenFavourite} + /> - mutateAction({ - id: status.id, - type: 'bookmark', - stateKey: 'bookmarked', - prevState: status.bookmarked - }) - } - > - - + onPress={onPressBookmark} + children={childrenBookmark} + /> - setModalVisible(true)}> - - + setModalVisible(false)} + onPress={() => setBottomSheetVisible(false)} > = ({ queryKey, status }) => { }, () => {}, () => { - setModalVisible(false) - Toast.show({ - type: 'success', - position: 'bottom', - text1: '分享成功', - visibilityTime: 2000, - autoHide: true, - bottomOffset: 65 - }) + setBottomSheetVisible(false) + toast({ type: 'success', content: '分享成功' }) } ) } @@ -284,15 +313,8 @@ const ActionsStatus: React.FC = ({ queryKey, status }) => { { Clipboard.setString(status.uri) - setModalVisible(false) - Toast.show({ - type: 'success', - position: 'bottom', - text1: '链接复制成功', - visibilityTime: 2000, - autoHide: true, - bottomOffset: 65 - }) + setBottomSheetVisible(false) + toast({ type: 'success', content: '链接复制成功' }) }} > 复制链接 @@ -300,7 +322,7 @@ const ActionsStatus: React.FC = ({ queryKey, status }) => { {status.account.id === localAccountId && ( { - setModalVisible(false) + setBottomSheetVisible(false) mutateAction({ id: status.id, type: 'delete', @@ -314,7 +336,7 @@ const ActionsStatus: React.FC = ({ queryKey, status }) => { (删除并重发) { - setModalVisible(false) + setBottomSheetVisible(false) mutateAction({ id: status.id, type: 'mute', @@ -325,10 +347,11 @@ const ActionsStatus: React.FC = ({ queryKey, status }) => { > {status.muted ? '取消静音' : '静音'} + {/* Also note that reblogs cannot be pinned. */} {status.account.id === localAccountId && ( { - setModalVisible(false) + setBottomSheetVisible(false) mutateAction({ id: status.id, type: 'pin', diff --git a/src/components/Timelines/Timeline/Shared/Attachment.tsx b/src/components/Timelines/Timeline/Shared/Attachment.tsx index 860c555e..be6c24cd 100644 --- a/src/components/Timelines/Timeline/Shared/Attachment.tsx +++ b/src/components/Timelines/Timeline/Shared/Attachment.tsx @@ -84,4 +84,4 @@ const Attachment: React.FC = ({ ) } -export default Attachment +export default React.memo(Attachment, () => true) diff --git a/src/components/Timelines/Timeline/Shared/Avatar.tsx b/src/components/Timelines/Timeline/Shared/Avatar.tsx index 079f0fb2..6f820cee 100644 --- a/src/components/Timelines/Timeline/Shared/Avatar.tsx +++ b/src/components/Timelines/Timeline/Shared/Avatar.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import React, { useCallback } from 'react' import { Image, Pressable, StyleSheet } from 'react-native' import { useNavigation } from '@react-navigation/native' @@ -12,15 +12,14 @@ export interface Props { const Avatar: React.FC = ({ uri, id }) => { const navigation = useNavigation() // Need to fix go back root + const onPress = useCallback(() => { + navigation.navigate('Screen-Shared-Account', { + id: id + }) + }, []) + return ( - { - navigation.navigate('Screen-Shared-Account', { - id: id - }) - }} - > + ) @@ -39,4 +38,4 @@ const styles = StyleSheet.create({ } }) -export default Avatar +export default React.memo(Avatar, () => true) diff --git a/src/components/Timelines/Timeline/Shared/Card.tsx b/src/components/Timelines/Timeline/Shared/Card.tsx index c21d0c7f..a3c2d59c 100644 --- a/src/components/Timelines/Timeline/Shared/Card.tsx +++ b/src/components/Timelines/Timeline/Shared/Card.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import React, { useCallback } from 'react' import { Image, Pressable, StyleSheet, Text, View } from 'react-native' import { useNavigation } from '@react-navigation/native' @@ -8,32 +8,29 @@ export interface Props { const Card: React.FC = ({ card }) => { const navigation = useNavigation() + const onPress = useCallback(() => { + navigation.navigate('Screen-Shared-Webview', { + uri: card.url + }) + }, []) + return ( - card && ( - { - navigation.navigate('Webview', { - uri: card.url - }) - }} - > - {card.image && ( - - - - )} - - {card.title} - {card.description ? ( - {card.description} - ) : ( - <> - )} - {card.url} + + {card.image && ( + + - - ) + )} + + {card.title} + {card.description ? ( + {card.description} + ) : ( + <> + )} + {card.url} + + ) } @@ -56,4 +53,4 @@ const styles = StyleSheet.create({ } }) -export default Card +export default React.memo(Card, () => true) diff --git a/src/components/Timelines/Timeline/Shared/HeaderDefault.tsx b/src/components/Timelines/Timeline/Shared/HeaderDefault.tsx index 85cbb4d0..06c15be5 100644 --- a/src/components/Timelines/Timeline/Shared/HeaderDefault.tsx +++ b/src/components/Timelines/Timeline/Shared/HeaderDefault.tsx @@ -1,5 +1,5 @@ -import React, { useEffect, useState } from 'react' -import { Modal, Pressable, StyleSheet, Text, View } from 'react-native' +import React, { useCallback, useEffect, useMemo, useState } from 'react' +import { Pressable, StyleSheet, Text, View } from 'react-native' import { useNavigation } from '@react-navigation/native' import { Feather } from '@expo/vector-icons' import Toast from 'react-native-toast-message' @@ -12,6 +12,9 @@ import { getLocalAccountId, getLocalUrl } from 'src/utils/slices/instancesSlice' import { store } from 'src/store' import { useTheme } from 'src/utils/styles/ThemeManager' import constants from 'src/utils/styles/constants' +import BottomSheet from 'src/components/BottomSheet' +import BottomSheetRow from 'src/components/BottomSheet/Row' +import { toast } from 'src/components/toast' const fireMutation = async ({ id, @@ -32,24 +35,11 @@ const fireMutation = async ({ endpoint: `accounts/${id}/${type}` }) - if (res.body[stateKey] === true) { - Toast.show({ - type: 'success', - position: 'bottom', - text1: '功能成功', - visibilityTime: 2000, - autoHide: true, - bottomOffset: 65 - }) + if (res.body[stateKey!] === true) { + toast({ type: 'success', content: '功能成功' }) return Promise.resolve() } else { - Toast.show({ - type: 'error', - position: 'bottom', - text1: '请重试', - autoHide: false, - bottomOffset: 65 - }) + toast({ type: 'error', content: '功能错误', autoHide: false }) return Promise.reject() } break @@ -64,57 +54,40 @@ const fireMutation = async ({ }) if (!res.body.error) { - Toast.show({ - type: 'success', - position: 'bottom', - text1: '隐藏域名成功', - visibilityTime: 2000, - autoHide: true, - bottomOffset: 65 - }) + toast({ type: 'success', content: '隐藏域名成功' }) return Promise.resolve() } else { - Toast.show({ + toast({ type: 'error', - position: 'bottom', - text1: '隐藏域名失败,请重试', - autoHide: false, - bottomOffset: 65 + content: '隐藏域名失败,请重试', + autoHide: false + }) + return Promise.reject() + } + break + case 'reports': + console.log('reporting') + res = await client({ + method: 'post', + instance: 'local', + endpoint: `reports`, + query: { + account_id: id || '' + } + }) + console.log(res.body) + if (!res.body.error) { + toast({ type: 'success', content: '举报账户成功' }) + return Promise.resolve() + } else { + toast({ + type: 'error', + content: '举报账户失败,请重试', + autoHide: false }) return Promise.reject() } break - // case 'reports': - // res = await client({ - // method: 'post', - // instance: 'local', - // endpoint: `reports`, - // query: { - // domain: id || '' - // } - // }) - - // if (!res.body.error) { - // Toast.show({ - // type: 'success', - // position: 'bottom', - // text1: '隐藏域名成功', - // visibilityTime: 2000, - // autoHide: true, - // bottomOffset: 65 - // }) - // return Promise.resolve() - // } else { - // Toast.show({ - // type: 'error', - // position: 'bottom', - // text1: '隐藏域名失败,请重试', - // autoHide: false, - // bottomOffset: 65 - // }) - // return Promise.reject() - // } - // break } } @@ -151,31 +124,12 @@ const HeaderDefault: React.FC = ({ const [mutateAction] = useMutation(fireMutation, { onMutate: () => { queryCache.cancelQueries(queryKey) - const prevData = queryCache.getQueryData(queryKey) - return prevData + const oldData = queryCache.getQueryData(queryKey) + return oldData }, - onSuccess: (newData, params) => { - if (params.type === 'domain_blocks') { - console.log('clearing cache') - queryCache.invalidateQueries(['Following', { page: 'Following' }]) - } - // queryCache.setQueryData(queryKey, (oldData: any) => { - // oldData && - // oldData.map((paging: any) => { - // paging.toots.map( - // (status: Mastodon.Status | Mastodon.Notification, i: number) => { - // if (status.id === newData.id) { - // paging.toots[i] = newData - // } - // } - // ) - // }) - // return oldData - // }) - return Promise.resolve() - }, - onError: (err, variables, prevData) => { - queryCache.setQueryData(queryKey, prevData) + onError: (err, _, oldData) => { + toast({ type: 'error', content: '请重试', autoHide: false }) + queryCache.setQueryData(queryKey, oldData) }, onSettled: () => { queryCache.invalidateQueries(queryKey) @@ -189,6 +143,24 @@ const HeaderDefault: React.FC = ({ }, 1000) }, [since]) + const onPressAction = useCallback(() => setModalVisible(true), []) + const onPressApplication = useCallback(() => { + navigation.navigate('Webview', { + uri: application!.website + }) + }, []) + + const pressableAction = useMemo( + () => ( + + ), + [] + ) + return ( @@ -212,17 +184,12 @@ const HeaderDefault: React.FC = ({ @{account} - {accountId !== localAccountId && domain !== localDomain && ( + {(accountId !== localAccountId || domain !== localDomain) && ( setModalVisible(true)} - > - - + onPress={onPressAction} + children={pressableAction} + /> )} @@ -234,11 +201,7 @@ const HeaderDefault: React.FC = ({ {application && application.name !== 'Web' && ( { - navigation.navigate('Webview', { - uri: application.website - }) - }} + onPress={onPressApplication} style={[styles.application, { color: theme.secondary }]} > 发自于 - {application.name} @@ -246,75 +209,65 @@ const HeaderDefault: React.FC = ({ )} - - setModalVisible(false)} > - setModalVisible(false)} - > - - {accountId !== localAccountId && ( - { - setModalVisible(false) - mutateAction({ - id: accountId, - type: 'mute', - stateKey: 'muting' - }) - }} - > - 静音用户 - - )} - {accountId !== localAccountId && ( - { - setModalVisible(false) - mutateAction({ - id: accountId, - type: 'block', - stateKey: 'blocking' - }) - }} - > - 屏蔽用户 - - )} - {domain !== localDomain && ( - { - setModalVisible(false) - mutateAction({ - id: domain, - type: 'domain_blocks' - }) - }} - > - 屏蔽域名 - - )} - {accountId !== localAccountId && ( - { - setModalVisible(false) - mutateAction({ - id: accountId, - type: 'reports' - }) - }} - > - 举报用户 - - )} - - - + {accountId !== localAccountId && ( + { + setModalVisible(false) + mutateAction({ + id: accountId, + type: 'mute', + stateKey: 'muting' + }) + }} + icon='eye-off' + text={`隐藏 @${account} 的嘟嘟`} + /> + )} + {accountId !== localAccountId && ( + { + setModalVisible(false) + mutateAction({ + id: accountId, + type: 'block', + stateKey: 'blocking' + }) + }} + icon='x-circle' + text={`屏蔽用户 @${account}`} + /> + )} + {domain !== localDomain && ( + { + setModalVisible(false) + mutateAction({ + id: domain, + type: 'domain_blocks' + }) + }} + icon='cloud-off' + text={`屏蔽域名 ${domain}`} + /> + )} + {accountId !== localAccountId && ( + { + setModalVisible(false) + mutateAction({ + id: accountId, + type: 'reports' + }) + }} + icon='alert-triangle' + text={`举报 @${account}`} + /> + )} + ) } @@ -349,22 +302,7 @@ const styles = StyleSheet.create({ application: { fontSize: constants.FONT_SIZE_S, marginLeft: constants.SPACING_S - }, - modalBackground: { - width: '100%', - height: '100%', - backgroundColor: 'rgba(0, 0, 0, 0.75)', - flex: 1, - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'flex-end' - }, - modalSheet: { - width: '100%', - height: '50%', - backgroundColor: 'white', - flex: 1 } }) -export default HeaderDefault +export default React.memo(HeaderDefault, () => true) diff --git a/src/components/toast.tsx b/src/components/toast.tsx new file mode 100644 index 00000000..a55f6f20 --- /dev/null +++ b/src/components/toast.tsx @@ -0,0 +1,102 @@ +import React from 'react' +import { StyleSheet, Text, View } from 'react-native' +import { SafeAreaView } from 'react-native-safe-area-context' +import Toast from 'react-native-toast-message' +import { useTheme } from 'src/utils/styles/ThemeManager' +import constants from 'src/utils/styles/constants' +import { Feather } from '@expo/vector-icons' + +export interface Params { + type: 'success' | 'error' | 'warning' + position?: 'top' | 'bottom' + content: string + description?: string + autoHide?: boolean + onShow?: () => void + onHide?: () => void +} + +type Config = { + type: Params['type'] + position: Params['position'] + text1: Params['content'] + text2: Params['description'] +} + +const toast = ({ + type, + position = 'top', + content, + description, + autoHide = true, + onShow, + onHide +}: Params) => { + Toast.show({ + type: type, + position: position, + text1: content, + text2: description, + visibilityTime: 2000, + autoHide: autoHide, + topOffset: 0, + bottomOffset: 0, + onShow: onShow, + onHide: onHide + }) +} + +const ToastBase = ({ config }: { config: Config }) => { + const { theme } = useTheme() + const iconSet = { + success: 'check-circle', + error: 'x-circle', + warning: 'alert-circle' + } + + return ( + + + + + {config.text1} + + + + ) +} + +const toastConfig = { + success: (config: Config) => , + error: (config: Config) => , + warning: (config: Config) => +} + +const styles = StyleSheet.create({ + base: { + width: '100%', + shadowOpacity: 1, + shadowRadius: 6 + }, + container: { + flex: 1, + flexDirection: 'row', + justifyContent: 'center', + padding: constants.SPACING_M + }, + text: { + fontSize: constants.FONT_SIZE_M, + marginLeft: constants.SPACING_S + } +}) + +export { toast, toastConfig } diff --git a/src/screens/Me.tsx b/src/screens/Me.tsx index e2ee6fd0..b028088c 100644 --- a/src/screens/Me.tsx +++ b/src/screens/Me.tsx @@ -1,5 +1,6 @@ import React from 'react' import { createNativeStackNavigator } from 'react-native-screens/native-stack' +import { useSelector } from 'react-redux' import ScreenMeRoot from 'src/screens/Me/Root' import ScreenMeConversations from './Me/Cconversations' @@ -8,7 +9,8 @@ import ScreenMeFavourites from './Me/Favourites' import ScreenMeLists from './Me/Lists' import sharedScreens from 'src/screens/Shared/sharedScreens' import ScreenMeListsList from './Me/Root/Lists/List' -import { useSelector } from 'react-redux' +import ScreenMeSettings from './Me/Settings' + import { RootState } from 'src/store' const Stack = createNativeStackNavigator() @@ -37,7 +39,7 @@ const ScreenMe: React.FC = () => { name='Screen-Me-Conversations' component={ScreenMeConversations} options={{ - headerTitle: '对话' + headerTitle: '私信' }} /> { name='Screen-Me-Favourites' component={ScreenMeFavourites} options={{ - headerTitle: '书签' + headerTitle: '喜欢' }} /> ({ + headerTitle: `列表:${route.params.title}` + })} + /> + diff --git a/src/screens/Me/Lists.tsx b/src/screens/Me/Lists.tsx index 49b60ae4..63e5d5d5 100644 --- a/src/screens/Me/Lists.tsx +++ b/src/screens/Me/Lists.tsx @@ -1,7 +1,7 @@ import React from 'react' import { ActivityIndicator, Text } from 'react-native' import { useQuery } from 'react-query' -import { MenuContainer, MenuHeader, MenuItem } from 'src/components/Menu' +import { MenuContainer, MenuItem } from 'src/components/Menu' import { listsFetch } from 'src/utils/fetches/listsFetch' @@ -17,25 +17,22 @@ const ScreenMeLists: React.FC = () => { lists = 载入错误 break case 'success': - lists = data?.map(d => ( + lists = data?.map((d: Mastodon.List, i: number) => ( )) break } - return ( - - - {lists} - - ) + return {lists} } export default ScreenMeLists diff --git a/src/screens/Me/Root/Settings.tsx b/src/screens/Me/Root/Settings.tsx index 221c3487..c20521ec 100644 --- a/src/screens/Me/Root/Settings.tsx +++ b/src/screens/Me/Root/Settings.tsx @@ -4,7 +4,7 @@ import { MenuContainer, MenuItem } from 'src/components/Menu' const Settings: React.FC = () => { return ( - + ) } diff --git a/src/screens/Me/Settings.tsx b/src/screens/Me/Settings.tsx new file mode 100644 index 00000000..83128404 --- /dev/null +++ b/src/screens/Me/Settings.tsx @@ -0,0 +1,9 @@ +import React from 'react' + +import { MenuContainer } from 'src/components/Menu' + +const ScreenMeSettings: React.FC = () => { + return +} + +export default ScreenMeSettings diff --git a/src/screens/Shared/Account/Header.tsx b/src/screens/Shared/Account/Header.tsx index 073cde91..74fca51c 100644 --- a/src/screens/Shared/Account/Header.tsx +++ b/src/screens/Shared/Account/Header.tsx @@ -9,7 +9,6 @@ export interface Props { const limitRatio = 0.4 const AccountHeader: React.FC = ({ uri, limitHeight = false }) => { - console.log(uri) useEffect(() => { if (uri) { if (uri.includes('/headers/original/missing.png')) { diff --git a/src/screens/Shared/Compose.tsx b/src/screens/Shared/Compose.tsx index e246b1ff..333c69ce 100644 --- a/src/screens/Shared/Compose.tsx +++ b/src/screens/Shared/Compose.tsx @@ -303,6 +303,5 @@ const Compose: React.FC = () => { ) } -// ;(PostMain as any).whyDidYouRender = true export default Compose diff --git a/src/screens/Shared/Compose/PostMain.tsx b/src/screens/Shared/Compose/PostMain.tsx index 67075b4a..f302f93a 100644 --- a/src/screens/Shared/Compose/PostMain.tsx +++ b/src/screens/Shared/Compose/PostMain.tsx @@ -304,10 +304,6 @@ const PostMain: React.FC = ({ postState, postDispatch }) => { ) } -// (PostSuggestions as any).whyDidYouRender = true, -// (PostPoll as any).whyDidYouRender = true, -// (PostEmojis as any).whyDidYouRender = true - const styles = StyleSheet.create({ base: { flex: 1 diff --git a/src/utils/styles/constants.ts b/src/utils/styles/constants.ts index 9d2a8a71..68daaec3 100644 --- a/src/utils/styles/constants.ts +++ b/src/utils/styles/constants.ts @@ -12,6 +12,7 @@ export default { SPACING_XL: 40, GLOBAL_PAGE_PADDING: 16, // SPACING_M + GLOBAL_SPACING_BASE: 8, // SPACING_S AVATAR_S: 52, AVATAR_L: 104 diff --git a/src/utils/styles/themes.ts b/src/utils/styles/themes.ts index 986ed06a..aa4f9ca7 100644 --- a/src/utils/styles/themes.ts +++ b/src/utils/styles/themes.ts @@ -3,11 +3,14 @@ import { DefaultTheme, DarkTheme } from '@react-navigation/native' export type ColorDefinitions = | 'primary' | 'secondary' + | 'disabled' | 'background' | 'link' | 'border' | 'separator' - | 'dangerous' + | 'success' + | 'error' + | 'warning' const themeColors: { [key in ColorDefinitions]: { @@ -23,6 +26,10 @@ const themeColors: { light: 'rgb(153, 153, 153)', dark: 'rgb(117, 117, 117)' }, + disabled: { + light: 'rgb(229, 229, 234)', + dark: 'rgb(44, 44, 46)' + }, background: { light: 'rgb(255, 255, 255)', dark: 'rgb(0, 0, 0)' @@ -39,9 +46,17 @@ const themeColors: { light: 'rgba(0, 0, 0, 0.1)', dark: 'rgba(255, 255, 255, 0.1)' }, - dangerous: { + success: { + light: 'rgb(52, 199, 89)', + dark: 'rgb(48, 209, 88)' + }, + error: { light: 'rgb(255, 59, 48)', dark: 'rgb(255, 69, 58)' + }, + warning: { + light: 'rgb(255, 149, 0)', + dark: 'rgb(255, 159, 10)' } } diff --git a/yarn.lock b/yarn.lock index 7a69b766..3ae41fb8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.44", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.8.3", "@babel/code-frame@~7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== @@ -37,9 +37,9 @@ source-map "^0.5.0" "@babel/core@^7.0.0", "@babel/core@^7.4.5", "@babel/core@~7.12.3": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.7.tgz#bf55363c08c8352a37691f7216ec30090bf7e3bf" - integrity sha512-tRKx9B53kJe8NCGGIxEQb2Bkr0riUIEuN7Sc1fxhs5H8lKlCWUvQCSNMVIB0Meva7hcbCRJ76de15KoLltdoqw== + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/generator" "^7.12.5" @@ -47,7 +47,7 @@ "@babel/helpers" "^7.12.5" "@babel/parser" "^7.12.7" "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.7" + "@babel/traverse" "^7.12.9" "@babel/types" "^7.12.7" convert-source-map "^1.7.0" debug "^4.1.0" @@ -958,7 +958,7 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== @@ -974,10 +974,10 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.7", "@babel/traverse@^7.9.0": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.7.tgz#572a722408681cef17d6b0bef69ef2e728ca69f1" - integrity sha512-nMWaqsQEeSvMNypswUDzjqQ+0rR6pqCtoQpsqGJC4/Khm9cISwPTSpai57F6/jDaOoEGz8yE/WxcO3PV6tKSmQ== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.9.0": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f" + integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw== dependencies: "@babel/code-frame" "^7.10.4" "@babel/generator" "^7.12.5" @@ -1032,27 +1032,20 @@ integrity sha512-hTp+6ZIKK57O8qhVoO+GBCkx0UCdOhwcWxaXfjpsELIR8LfXDGz8OmCxTzGvb7nnadcrGCccHBX5dO1NmPBbmg== "@expo/config@^3.3.15": - version "3.3.15" - resolved "https://registry.yarnpkg.com/@expo/config/-/config-3.3.15.tgz#8241eb575f3f9071dc0277b260906ab32eb9ca95" - integrity sha512-AxsmTd0JtJTiaYos+maWCMjQOAVcN/Z+edj0SUUh46O3003LBnr7SZCOysqmtwY2437MD5IkzU/YL9wkQYuWtw== + version "3.3.16" + resolved "https://registry.yarnpkg.com/@expo/config/-/config-3.3.16.tgz#d05cf57623414e2df6815a790c2a3be81ac171fb" + integrity sha512-iEjyV8OfaA0fPPsKYkkcod6wCd6sAtWOxAAT+7xriGqJV5aYnpL1hcBxPkPKavYzWMJUEEOwajmqoJy1uVP6ig== dependencies: "@babel/core" "7.9.0" "@expo/babel-preset-cli" "0.2.18" "@expo/config-types" "^40.0.0-beta.1" - "@expo/configure-splash-screen" "0.2.1" - "@expo/image-utils" "0.3.7" - "@expo/json-file" "8.2.24" - "@expo/plist" "0.0.10" + "@expo/json-file" "8.2.25" fs-extra "9.0.0" glob "7.1.6" - invariant "^2.2.4" require-from-string "^2.0.2" resolve-from "^5.0.0" semver "^7.1.3" - slash "^3.0.0" slugify "^1.3.4" - xcode "^2.1.0" - xml2js "^0.4.23" "@expo/configure-splash-screen@0.2.0": version "0.2.0" @@ -1071,67 +1064,17 @@ xcode "^3.0.0" xml-js "^1.6.11" -"@expo/configure-splash-screen@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@expo/configure-splash-screen/-/configure-splash-screen-0.2.1.tgz#de29b781990d32d9f48d630b912aaf017afccbf3" - integrity sha512-6n7ji1WKDCdLe2Mto4u4W72kTLhAbhXhC7ydVk1HxDYCcbewNLfgiwhchPtPGyUMnSDizVWph5aDoiKxqVHqNQ== +"@expo/json-file@8.2.25": + version "8.2.25" + resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.25.tgz#3f7f403612efab98b6043868b8bb8b27a7189ed1" + integrity sha512-KFX6grWVzttaDskq/NK8ByqFPgpDZGFnyeZVeecGoKx5kU61zuR7/xQM04OvN6BNXq3jTUst1TyS8fXEfJuscA== dependencies: - "@react-native-community/cli-platform-android" "^4.10.0" - "@react-native-community/cli-platform-ios" "^4.10.0" - color-string "^1.5.3" - commander "^5.1.0" - core-js "^3.6.5" - deep-equal "^2.0.3" - fs-extra "^9.0.0" - lodash "^4.17.15" - pngjs "^5.0.0" - xcode "^3.0.0" - xml-js "^1.6.11" - -"@expo/image-utils@0.3.7": - version "0.3.7" - resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.3.7.tgz#48436a5f509818dc43a30f73dbfd4baed88a5f23" - integrity sha512-Vo1p5uv1JlRacgVIiVa+83oRoHfC7grSU8cypAtgvOYpbmdCWR8+3F4v+vaabHe6ktvIKRE78jh6vHMGwv2aOA== - dependencies: - "@expo/spawn-async" "1.5.0" - chalk "^4.0.0" - fs-extra "9.0.0" - getenv "0.7.0" - jimp "^0.9.6" - mime "^2.4.4" - node-fetch "^2.6.0" - parse-png "^2.1.0" - resolve-from "^5.0.0" - semver "6.1.1" - tempy "0.3.0" - -"@expo/json-file@8.2.24": - version "8.2.24" - resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.24.tgz#02a9dd75c9ca6d70d4cc04729f0586eb80bcd1ba" - integrity sha512-i34lfcMVt5Wv2Cf5apZUj3o9JlFt8WOPSZjrECryunBQ9/BsQQYY5NHgGjhhZnnRE+6JFf0CPQTjXdoQ1w3w0w== - dependencies: - "@babel/code-frame" "^7.0.0-beta.44" + "@babel/code-frame" "~7.10.4" fs-extra "9.0.0" json5 "^1.0.1" lodash "^4.17.15" write-file-atomic "^2.3.0" -"@expo/plist@0.0.10": - version "0.0.10" - resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.0.10.tgz#e126a15543c6c67fd159947ca9e35969657a97f4" - integrity sha512-uKbi7ANPCNJqeAvxLa+ZcS/Qf0fTPOySMqw5T2L4TrycSAdiAxV1VUZ69IzIbUsWb7GdriUVR2i38M/xa6+BvA== - dependencies: - base64-js "^1.2.3" - xmlbuilder "^14.0.0" - xmldom "~0.1.31" - -"@expo/spawn-async@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.5.0.tgz#799827edd8c10ef07eb1a2ff9dcfe081d596a395" - integrity sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew== - dependencies: - cross-spawn "^6.0.5" - "@expo/vector-icons@^10.0.0", "@expo/vector-icons@^10.0.2": version "10.2.1" resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-10.2.1.tgz#47fb2fa12d7ad601835babde6bd3ddea7f6fde89" @@ -1237,325 +1180,6 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@jimp/bmp@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.9.8.tgz#5933ab8fb359889bec380b0f7802163374933624" - integrity sha512-CZYQPEC3iUBMuaGWrtIG+GKNl93q/PkdudrCKJR/B96dfNngsmoosEm3LuFgJHEcJIfvnJkNqKw74l+zEiqCbg== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - bmp-js "^0.1.0" - core-js "^3.4.1" - -"@jimp/core@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.9.8.tgz#b2b74263a80559c0ee244e0f2d1052b36a358b85" - integrity sha512-N4GCjcXb0QwR5GBABDK2xQ3cKyaF7LlCYeJEG9mV7G/ynBoRqJe4JA6YKU9Ww9imGkci/4A594nQo8tUIqdcBw== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - any-base "^1.1.0" - buffer "^5.2.0" - core-js "^3.4.1" - exif-parser "^0.1.12" - file-type "^9.0.0" - load-bmfont "^1.3.1" - mkdirp "^0.5.1" - phin "^2.9.1" - pixelmatch "^4.0.2" - tinycolor2 "^1.4.1" - -"@jimp/custom@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.9.8.tgz#1e9d904b1b05aa22b00b899baba2be7c0704a5d1" - integrity sha512-1UpJjI7fhX02BWLJ/KEqPwkHH60eNkCNeD6hEd+IZdTwLXfZCfFiM5BVlpgiZYZJSsVoRiAL4ne2Q5mCiKPKyw== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/core" "^0.9.8" - core-js "^3.4.1" - -"@jimp/gif@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.9.8.tgz#513aff511634c338d1ab33a7bba1ba3412220b5b" - integrity sha512-LEbfpcO1sBJIQCJHchZjNlyNxzPjZQQ4X32klpQHZJG58n9FvL7Uuh1rpkrJRbqv3cU3P0ENNtTrsBDxsYwcfA== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - omggif "^1.0.9" - -"@jimp/jpeg@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.9.8.tgz#8c086f69d0e8c46e43a7db9725576edc30925cb1" - integrity sha512-5u29SUzbZ32ZMmOaz3gO0hXatwSCnsvEAXRCKZoPPgbsPoyFAiZKVxjfLzjkeQF6awkvJ8hZni5chM15SNMg+g== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - jpeg-js "^0.3.4" - -"@jimp/plugin-blit@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.9.8.tgz#916bf6f261e6a91dbecca0ca866b8d9cba563753" - integrity sha512-6xTDomxJybhBcby1IUVaPydZFhxf+V0DRgfDlVK81kR9kSCoshJpzWqDuWrMqjNEPspPE7jRQwHMs0FdU7mVwQ== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-blur@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.9.8.tgz#00055d54b90532b7951dae377b3e40352c187f07" - integrity sha512-dqbxuNFBRbmt35iIRacdgma7nlXklmPThsKcGWNTDmqb/hniK5IC+0xSPzBV4qMI2fLGP39LWHqqDZ0xDz14dA== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-circle@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.9.8.tgz#5de8735f32f931d9160d0f5211e9aab6413a1d4b" - integrity sha512-+UStXUPCzPqzTixLC8eVqcFcEa6TS+BEM/6/hyM11TDb9sbiMGeUtgpwZP/euR5H5gfpAQDA1Ppzqhh5fuMDlw== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-color@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.9.8.tgz#3c633f22955a4f5013025e9e9e78a267ac4c3a88" - integrity sha512-SDHxOQsJHpt75hk6+sSlCPc2B3UJlXosFW+iLZ11xX1Qr0IdDtbfYlIoPmjKQFIDUNzqLSue/z7sKQ1OMZr/QA== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - tinycolor2 "^1.4.1" - -"@jimp/plugin-contain@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.9.8.tgz#f892fb7fc87134a47b37281f0ff17d608f3e51af" - integrity sha512-oK52CPt7efozuLYCML7qOmpFeDt3zpU8qq8UZlnjsDs15reU6L8EiUbwYpJvzoEnEOh1ZqamB8F/gymViEO5og== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-cover@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.9.8.tgz#37474b19027ac0155100b71ca17266aab19e50fc" - integrity sha512-nnamtHzMrNd5j5HRSPd1VzpZ8v9YYtUJPtvCdHOOiIjqG72jxJ2kTBlsS3oG5XS64h/2MJwpl/fmmMs1Tj1CmQ== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-crop@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.9.8.tgz#2308696597a8bcb528d09eeebbbadb22248e7c1c" - integrity sha512-Nv/6AIp4aJmbSIH2uiIqm+kSoShKM8eaX2fyrUTj811kio0hwD3f/vIxrWebvAqwDZjAFIAmMufFoFCVg6caoQ== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-displace@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.9.8.tgz#00331047039cb2d0d9d5f7c3d8ce542e07eea791" - integrity sha512-0OgPjkOVa2xdbqI8P6gBKX/UK36RbaYVrFyXL8Jy9oNF69+LYWyTskuCu9YbGxzlCVjY/JFqQOvrKDbxgMYAKA== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-dither@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.9.8.tgz#9cca12997f2917f27d5681275b32affdb3083450" - integrity sha512-jGM/4ByniZJnmV2fv8hKwyyydXZe/YzvgBcnB8XxzCq8kVR3Imcn+qnd2PEPZzIPKOTH4Cig/zo9Vk9Bs+m5FQ== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-fisheye@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.9.8.tgz#e3f5f616ec06a9ef99aa268446f0096eac863437" - integrity sha512-VnsalrD05f4pxG1msjnkwIFi5QveOqRm4y7VkoZKNX+iqs4TvRnH5+HpBnfdMzX/RXBi+Lf/kpTtuZgbOu/QWw== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-flip@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.9.8.tgz#c00559a8543a684c7cff4d1128b7152e598fbb1c" - integrity sha512-XbiZ4OfHD6woc0f6Sk7XxB6a7IyMjTRQ4pNU7APjaNxsl3L6qZC8qfCQphWVe3DHx7f3y7jEiPMvNnqRDP1xgA== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-gaussian@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.9.8.tgz#d1666167ce1b947b65db5093bb9a00d319bcfe4d" - integrity sha512-ZBl5RA6+4XAD+mtqLfiG7u+qd8W5yqq3RBNca8eFqUSVo1v+eB2tzeLel0CWfVC/z6cw93Awm/nVnm6/CL2Oew== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-invert@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.9.8.tgz#41d6e87faf01a5d8fe7554e322d2aad25f596ab1" - integrity sha512-ESploqCoF6qUv5IWhVLaO5fEcrYZEsAWPFflh6ROiD2mmFKQxfeK+vHnk3IDLHtUwWTkAZQNbk89BVq7xvaNpQ== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-mask@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.9.8.tgz#fe92132db1a2b9f7718226bc3c37794dd148ce36" - integrity sha512-zSvEisTV4iGsBReitEdnQuGJq9/1xB5mPATadYZmIlp8r5HpD72HQb0WdEtb51/pu9Odt8KAxUf0ASg/PRVUiQ== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-normalize@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.9.8.tgz#05646aa15b6a789c4ba447edcad77c83c1d51f16" - integrity sha512-dPFBfwTa67K1tRw1leCidQT25R3ozrTUUOpO4jcGFHqXvBTWaR8sML1qxdfOBWs164mE5YpfdTvu6MM/junvCg== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-print@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.9.8.tgz#808f723176d0a57186d7558290c7e53a7a8bf812" - integrity sha512-nLLPv1/faehRsOjecXXUb6kzhRcZzImO55XuFZ0c90ZyoiHm4UFREwO5sKxHGvpLXS6RnkhvSav4+IWD2qGbEQ== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - load-bmfont "^1.4.0" - -"@jimp/plugin-resize@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.9.8.tgz#eef750b77f1cc06e8bcf9b390860c95c489dcc02" - integrity sha512-L80NZ+HKsiKFyeDc6AfneC4+5XACrdL2vnyAVfAAsb3pmamgT/jDInWvvGhyI0Y76vx2w6XikplzEznW/QQvWg== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-rotate@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.9.8.tgz#5eba01f75a397777c6782b7999c9ac6c7ed8a411" - integrity sha512-bpqzQheISYnBXKyU1lIj46uR7mRs0UhgEREWK70HnvFJSlRshdcoNMIrKamyrJeFdJrkYPSfR/a6D0d5zsWf1Q== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-scale@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.9.8.tgz#c875d5e0b377b15b8b398ee402f45e3fc43fea40" - integrity sha512-QU3ZS4Lre8nN66U9dKCOC4FNfaOh/QJFYUmQPKpPS924oYbtnm4OlmsdfpK2hVMSVVyVOis8M+xpA1rDBnIp7w== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-shadow@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.9.8.tgz#ca2d18afa29a1027b77b3e1fb2ce7d4e073a7170" - integrity sha512-t/pE+QS3r1ZUxGIQNmwWDI3c5+/hLU+gxXD+C3EEC47/qk3gTBHpj/xDdGQBoObdT/HRjR048vC2BgBfzjj2hg== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugin-threshold@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.9.8.tgz#2d1dde0791f70b2ff2d0b915cab8d40b0e446594" - integrity sha512-WWmC3lnIwOTPvkKu55w4DUY8Ehlzf3nU98bY0QtIzkqxkAOZU5m+lvgC/JxO5FyGiA57j9FLMIf0LsWkjARj7g== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - -"@jimp/plugins@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.9.8.tgz#5279dfe22d0d27633f4201ab36103e587b32eb85" - integrity sha512-tD+cxS9SuEZaQ1hhAkNKw9TkUAqfoBAhdWPBrEZDr/GvGPrvJR4pYmmpSYhc5IZmMbXfQayHTTGqjj8D18bToA== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/plugin-blit" "^0.9.8" - "@jimp/plugin-blur" "^0.9.8" - "@jimp/plugin-circle" "^0.9.8" - "@jimp/plugin-color" "^0.9.8" - "@jimp/plugin-contain" "^0.9.8" - "@jimp/plugin-cover" "^0.9.8" - "@jimp/plugin-crop" "^0.9.8" - "@jimp/plugin-displace" "^0.9.8" - "@jimp/plugin-dither" "^0.9.8" - "@jimp/plugin-fisheye" "^0.9.8" - "@jimp/plugin-flip" "^0.9.8" - "@jimp/plugin-gaussian" "^0.9.8" - "@jimp/plugin-invert" "^0.9.8" - "@jimp/plugin-mask" "^0.9.8" - "@jimp/plugin-normalize" "^0.9.8" - "@jimp/plugin-print" "^0.9.8" - "@jimp/plugin-resize" "^0.9.8" - "@jimp/plugin-rotate" "^0.9.8" - "@jimp/plugin-scale" "^0.9.8" - "@jimp/plugin-shadow" "^0.9.8" - "@jimp/plugin-threshold" "^0.9.8" - core-js "^3.4.1" - timm "^1.6.1" - -"@jimp/png@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.9.8.tgz#f88dacc9b9da1c2ea8e91026a9530d0fb45c4409" - integrity sha512-9CqR8d40zQCDhbnXHqcwkAMnvlV0vk9xSyE6LHjkYHS7x18Unsz5txQdsaEkEcXxCrOQSoWyITfLezlrWXRJAA== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.9.8" - core-js "^3.4.1" - pngjs "^3.3.3" - -"@jimp/tiff@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.9.8.tgz#91dc3eab2f222e23414f139e917f3407caa73560" - integrity sha512-eMxcpJivJqMByn2dZxUHLeh6qvVs5J/52kBF3TFa3C922OJ97D9l1C1h0WKUCBqFMWzMYapQQ4vwnLgpJ5tkow== - dependencies: - "@babel/runtime" "^7.7.2" - core-js "^3.4.1" - utif "^2.0.1" - -"@jimp/types@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.9.8.tgz#46980a4a7bfcadf2f0484d187c32b4e7d6d61b8e" - integrity sha512-H5y/uqt0lqJ/ZN8pWqFG+pv8jPAppMKkTMByuC8YBIjWSsornwv44hjiWl93sbYhduLZY8ubz/CbX9jH2X6EwA== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/bmp" "^0.9.8" - "@jimp/gif" "^0.9.8" - "@jimp/jpeg" "^0.9.8" - "@jimp/png" "^0.9.8" - "@jimp/tiff" "^0.9.8" - core-js "^3.4.1" - timm "^1.6.1" - -"@jimp/utils@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.9.8.tgz#6a6f47158ec6b424f03df0f55f0baff5b4b5e096" - integrity sha512-UK0Fu0eevQlpRXq5ff4o/71HJlpX9wJMddJjMYg9vUqCCl8ZnumRAljfShHFhGyO+Vc9IzN6dd8Y5JZZTp1KOw== - dependencies: - "@babel/runtime" "^7.7.2" - core-js "^3.4.1" - "@react-native-community/cli-debugger-ui@^4.13.1": version "4.13.1" resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-4.13.1.tgz#07de6d4dab80ec49231de1f1fbf658b4ad39b32c" @@ -1788,9 +1412,9 @@ integrity sha512-tjSSOTHhI5mCHTy/OOXYIhi2Wt1qcbHmuXD1Ha7q70CgI/I71afO4XtLb/cVexki1oVYchpul/TOuu3Arcdxrg== "@types/node@^14.14.7": - version "14.14.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.9.tgz#04afc9a25c6ff93da14deabd65dc44485b53c8d6" - integrity sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw== + version "14.14.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.10.tgz#5958a82e41863cfc71f2307b3748e3491ba03785" + integrity sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ== "@types/prop-types@*": version "15.7.3" @@ -1804,18 +1428,10 @@ dependencies: "@types/react" "^16" -"@types/react-native-htmlview@^0.12.2": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@types/react-native-htmlview/-/react-native-htmlview-0.12.2.tgz#f4875fcb6cb214d0ccbf7670d8a41ccdc8790187" - integrity sha512-r5lWdZcZmcxLrfhIAAzBCEpDUuDFRiB5V9d0QvCqhTRh9vorlEjXgyZ5K8/HzbIOuvGb9/mQJPK0rItEAQk0dw== - dependencies: - "@types/react" "*" - "@types/react-native" "*" - -"@types/react-native@*", "@types/react-native@~0.63.2": - version "0.63.36" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.63.36.tgz#649ca8fd2b0cda9e41b961e7501e33b71246e88d" - integrity sha512-mCWEiPgi55MkXXMuDe0VsOWO3C4hhj6mO/jnTvy0sXcRD6MbAmGwXnVe5+m1FRCuEQMaJwgG1ZNahZvvyvuGUA== +"@types/react-native@~0.63.2": + version "0.63.37" + resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.63.37.tgz#c43df90c9d3cc082a97a49a53e989de26cb8ab45" + integrity sha512-xr9SZG7tQQBKT6840tAGaWEC65D2gjyxZtuZxz631UgeW1ofItuu9HMVhoyYqot2hRSa6Q4YC8FYkRVUpM53/w== dependencies: "@types/react" "*" @@ -1845,11 +1461,12 @@ csstype "^3.0.2" "@types/react@^16": - version "16.14.1" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.1.tgz#da2ecb638385614a5573e16e4aa7daf936dbead5" - integrity sha512-32mxrbX62m5b+lMTSzucFKNIr8Eq4T6T3rDVxYzKqyRwyfnPcwZppWW0YXUlPNPUE+r6phBtHXYRgr8ad/Zl9A== + version "16.14.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.2.tgz#85dcc0947d0645349923c04ccef6018a1ab7538c" + integrity sha512-BzzcAlyDxXl2nANlabtT4thtvbbnhee8hMmH/CcJrISDBVcJS1iOsP1f0OAgSdGE0MsY9tqcrb9YoZcOFv9dbQ== dependencies: "@types/prop-types" "*" + csstype "^3.0.2" "@types/react@~16.9.35": version "16.9.56" @@ -1899,9 +1516,9 @@ lodash "^4.5.0" "@welldone-software/why-did-you-render@^6.0.0-rc.1": - version "6.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@welldone-software/why-did-you-render/-/why-did-you-render-6.0.0-rc.1.tgz#b0e92edb2e34e7af695cca1822844f02018d9814" - integrity sha512-qQe5w89tYnYtwRqlhdF33ivWjsQlGXkan5lFzNwpAoMEUFIbDuwvFiBUAbE76Lfz63GabSaf1vyuCusgJ7Rtqg== + version "6.0.3" + resolved "https://registry.yarnpkg.com/@welldone-software/why-did-you-render/-/why-did-you-render-6.0.3.tgz#99c58ea8e3f2ea8c042fb1d58ebf147d345fff26" + integrity sha512-9HskvqZrCVEnKur2WIZ2Jm36u+1bCbb1c+iHa8QljjHmEVOA2US1qKq3HeUcwsjgKZRo5xucV6td2FeJP8agmQ== dependencies: lodash "^4" @@ -2006,11 +1623,6 @@ ansi-wrap@0.1.0, ansi-wrap@^0.1.0: resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= -any-base@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" - integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg== - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -2221,7 +1833,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.1.2, base64-js@^1.2.3, base64-js@^1.3.0, base64-js@^1.3.1: +base64-js@^1.1.2, base64-js@^1.2.3, base64-js@^1.3.0: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -2256,11 +1868,6 @@ blueimp-md5@^2.10.0: resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.18.0.tgz#1152be1335f0c6b3911ed9e36db54f3e6ac52935" integrity sha512-vE52okJvzsVWhcgUHOv+69OG3Mdg151xyn41aVQN/5W5S+S43qZhxECtYLAEHMSFWX6Mv5IZrzj3T5+JqXfj5Q== -bmp-js@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" - integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM= - bplist-creator@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" @@ -2299,7 +1906,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -browserslist@^4.14.5, browserslist@^4.14.6: +browserslist@^4.14.5, browserslist@^4.14.7: version "4.14.7" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6" integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ== @@ -2335,11 +1942,6 @@ buffer-crc32@^0.2.13: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= -buffer-equal@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" - integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= - buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -2350,14 +1952,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -buffer@^5.2.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -2416,9 +2010,9 @@ camelcase@^5.0.0, camelcase@^5.3.1: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30001157: - version "1.0.30001159" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz#bebde28f893fa9594dadcaa7d6b8e2aa0299df20" - integrity sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA== + version "1.0.30001161" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001161.tgz#64f7ffe79ee780b8c92843ff34feb36cea4651e0" + integrity sha512-JharrCDxOqPLBULF9/SPa6yMcBRTjZARJ6sc3cuKrPfyIk64JN6kuMINWqA99Xc8uElMFcROliwtz0n9pYej+g== capture-exit@^2.0.0: version "2.0.0" @@ -2444,14 +2038,6 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" @@ -2670,11 +2256,11 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-compat@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.7.0.tgz#8479c5d3d672d83f1f5ab94cf353e57113e065ed" - integrity sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg== + version "3.8.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.0.tgz#3248c6826f4006793bd637db608bca6e4cd688b1" + integrity sha512-o9QKelQSxQMYWHXc/Gc4L8bx/4F7TTraE5rhuN8I7mKBt5dBIUpXpIR3omv70ebr8ST5R3PqbDQr+ZI3+Tt1FQ== dependencies: - browserslist "^4.14.6" + browserslist "^4.14.7" semver "7.0.0" core-js@^1.0.0: @@ -2683,14 +2269,14 @@ core-js@^1.0.0: integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= core-js@^2.2.2, core-js@^2.4.1: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.4.1, core-js@^3.6.5: - version "3.7.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.7.0.tgz#b0a761a02488577afbf97179e4681bf49568520f" - integrity sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA== +core-js@^3.6.5: + version "3.8.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.0.tgz#0fc2d4941cadf80538b030648bb64d230b4da0ce" + integrity sha512-W2VYNB0nwQQE7tKS7HzXd7r2y/y2SVJl4ga6oH/dnaLFzM0o2lB2P3zCkWj5Wc/zyMYjtgd5Hmhk0ObkQFZOIA== core-util-is@~1.0.0: version "1.0.2" @@ -2727,11 +2313,6 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - csstype@^3.0.2: version "3.0.5" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.5.tgz#7fdec6a28a67ae18647c51668a9ff95bb2fa7bb8" @@ -2850,11 +2431,6 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - domelementtype@1, domelementtype@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" @@ -2886,9 +2462,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.591: - version "1.3.603" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.603.tgz#1b71bec27fb940eccd79245f6824c63d5f7e8abf" - integrity sha512-J8OHxOeJkoSLgBXfV9BHgKccgfLMHh+CoeRo6wJsi6m0k3otaxS/5vrHpMNSEYY4MISwewqanPOuhAtuE8riQQ== + version "1.3.610" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.610.tgz#1254eb394acd220a836ea1f203f8cded4e487052" + integrity sha512-eFDC+yVQpEhtlapk4CYDPfV9ajF9cEof5TBcO49L1ETO+aYogrKWDmYpZyxBScMNe8Bo/gJamH4amQ4yyvXg4g== emoji-regex@^7.0.1: version "7.0.3" @@ -3080,11 +2656,6 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -exif-parser@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" - integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI= - expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -3242,9 +2813,9 @@ expo-web-browser@^8.5.0: compare-urls "^2.0.0" expo@~39.0.4: - version "39.0.4" - resolved "https://registry.yarnpkg.com/expo/-/expo-39.0.4.tgz#320b7453ac055fc37c64942d5ba442f4e2781993" - integrity sha512-lyd7VSg0DG+I2CwWtOHwhmMwgANoqggqU1ooWRdO4KdWPYA8hWMMsLC2vBBBemKv3PPwxhl9hhzFxtjJ/MaR7g== + version "39.0.5" + resolved "https://registry.yarnpkg.com/expo/-/expo-39.0.5.tgz#d2a37a65859c8c5c1821a49012548bdf541a4c7f" + integrity sha512-uLywo0Gvx0SUz/Bso/2IMDeMr9Lvr4/4YB8yAYS3BW3872duFHKHVccKEqLzBN+q/5DuW5fmSNkOeQCThMFo/w== dependencies: "@babel/runtime" "^7.1.2" "@expo/vector-icons" "^10.0.2" @@ -3410,11 +2981,6 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -file-type@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18" - integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw== - file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -3596,11 +3162,6 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -getenv@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/getenv/-/getenv-0.7.0.tgz#39b91838707e2086fd1cf6ef8777d1c93e14649e" - integrity sha1-ObkYOHB+IIb9HPbvh3fRyT4UZJ4= - glob@7.1.6, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -3613,14 +3174,6 @@ glob@7.1.6, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -global@~4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" - integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= - dependencies: - min-document "^2.19.0" - process "~0.5.1" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -3746,11 +3299,6 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - image-size@^0.6.0: version "0.6.3" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" @@ -3881,9 +3429,9 @@ is-ci@^2.0.0: ci-info "^2.0.0" is-core-module@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946" - integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== dependencies: has "^1.0.3" @@ -3951,11 +3499,6 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-function@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - is-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" @@ -4182,23 +3725,6 @@ jetifier@^1.6.2: resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.6.tgz#fec8bff76121444c12dc38d2dad6767c421dab68" integrity sha512-JNAkmPeB/GS2tCRqUzRPsTOHpGDah7xP18vGJfIjZC+W2sxEHbxgJxetIjIqhjQ3yYbYNEELkM/spKLtwoOSUQ== -jimp@^0.9.6: - version "0.9.8" - resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.9.8.tgz#2ee87b81b42e723ad74c73b8012f879c0abe5b04" - integrity sha512-DHN4apKMwLIvD/TKO9tFfPuankNuVK98vCwHm/Jv9z5cJnrd38xhi+4I7IAGmDU3jIDlrEVhzTkFH1Ymv5yTQQ== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/custom" "^0.9.8" - "@jimp/plugins" "^0.9.8" - "@jimp/types" "^0.9.8" - core-js "^3.4.1" - regenerator-runtime "^0.13.3" - -jpeg-js@^0.3.4: - version "0.3.7" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.7.tgz#471a89d06011640592d314158608690172b1028d" - integrity sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4332,20 +3858,6 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -load-bmfont@^1.3.1, load-bmfont@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.1.tgz#c0f5f4711a1e2ccff725a7b6078087ccfcddd3e9" - integrity sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA== - dependencies: - buffer-equal "0.0.1" - mime "^1.3.4" - parse-bmfont-ascii "^1.0.3" - parse-bmfont-binary "^1.0.5" - parse-bmfont-xml "^1.1.4" - phin "^2.9.1" - xhr "^2.0.1" - xtend "^4.0.0" - locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -4826,12 +4338,12 @@ mime-types@~2.1.24: dependencies: mime-db "1.44.0" -mime@1.6.0, mime@^1.3.4: +mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.1, mime@^2.4.4: +mime@^2.4.1: version "2.4.6" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== @@ -4841,13 +4353,6 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= - dependencies: - dom-walk "^0.1.0" - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -5033,12 +4538,12 @@ object-inspect@^1.8.0: integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== object-is@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" - integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== + version "1.1.4" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" + integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -5069,11 +4574,6 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -omggif@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" - integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -5179,34 +4679,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@^1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parse-bmfont-ascii@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" - integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU= - -parse-bmfont-binary@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" - integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY= - -parse-bmfont-xml@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389" - integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ== - dependencies: - xml-parse-from-string "^1.0.0" - xml2js "^0.4.5" - -parse-headers@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" - integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -5220,13 +4692,6 @@ parse-node-version@^1.0.0: resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== -parse-png@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/parse-png/-/parse-png-2.1.0.tgz#2a42ad719fedf90f81c59ebee7ae59b280d6b338" - integrity sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ== - dependencies: - pngjs "^3.3.0" - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -5274,11 +4739,6 @@ path-to-regexp@^1.8.0: dependencies: isarray "0.0.1" -phin@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" - integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== - pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -5291,13 +4751,6 @@ pirates@^4.0.0: dependencies: node-modules-regexp "^1.0.0" -pixelmatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" - integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ= - dependencies: - pngjs "^3.0.0" - pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -5339,11 +4792,6 @@ plugin-error@^0.1.2: arr-union "^2.0.1" extend-shallow "^1.1.2" -pngjs@^3.0.0, pngjs@^3.3.0, pngjs@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" - integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== - pngjs@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" @@ -5397,11 +4845,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -5580,9 +5023,9 @@ react-native-shimmer-placeholder@^2.0.6: integrity sha512-eq0Jxi/j/WseijfSeNjoAsaz1164XUCDvKpG/+My+c5YeVMfjTnl9SwoVAIr9uOpuDXXia67j8xME+eFJZvBXw== react-native-toast-message@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/react-native-toast-message/-/react-native-toast-message-1.3.4.tgz#19ea1c5d3ad8e9d12f7550c4719a9e0258dca6bd" - integrity sha512-83rKaLNC8/JPEPlrONVTurVepIlXKuHnFnxm7mJ58CA3XN4fT6ayRBubs/pd8u980mDFHqo8ysJOSHF3dwPg4g== + version "1.3.6" + resolved "https://registry.yarnpkg.com/react-native-toast-message/-/react-native-toast-message-1.3.6.tgz#78f90f78bbd8c97ce987f5dabc99ecc4a2d5eaef" + integrity sha512-75hsiPEcdsxdyn3N9FK3+N8cPStC6HPuo+HzQW36FpkmER1710Ipc0f9afebkmmKM3+Q65wyk81rXuwL6hcwow== react-native-webview@10.7.0: version "10.7.0" @@ -5712,7 +5155,7 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== @@ -5918,7 +5361,7 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sax@>=0.6.0, sax@^1.2.1, sax@^1.2.4: +sax@^1.2.1, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -5931,11 +5374,6 @@ scheduler@0.19.1, scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" -semver@6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" - integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== - semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" @@ -6194,9 +5632,9 @@ sprintf-js@~1.0.2: integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= stack-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.3.tgz#db7a475733b5b8bf6521907b18891d29006f7751" - integrity sha512-WldO+YmqhEpjp23eHZRhOT1NQF51STsbxZ+/AdpFD+EhheFxAe5d0WoK4DQVJkSHacPrJJX3OqRAl9CgHf78pg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.4.tgz#4b600971dcfc6aed0cbdf2a8268177cc916c87c8" + integrity sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w== dependencies: escape-string-regexp "^2.0.0" @@ -6346,11 +5784,6 @@ symbol-observable@^1.2.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= - temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -6359,15 +5792,6 @@ temp@0.8.3: os-tmpdir "^1.0.0" rimraf "~2.2.6" -tempy@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" - integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ== - dependencies: - temp-dir "^1.0.0" - type-fest "^0.3.1" - unique-string "^1.0.0" - throat@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" @@ -6391,21 +5815,11 @@ time-stamp@^1.0.0: resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= -timm@^1.6.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" - integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw== - tiny-queue@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.1.tgz#25a67f2c6e253b2ca941977b5ef7442ef97a6046" integrity sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY= -tinycolor2@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" - integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -6458,11 +5872,6 @@ tslib@^2.0.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== -type-fest@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - type-fest@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" @@ -6584,13 +5993,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -6644,13 +6046,6 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -utif@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759" - integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg== - dependencies: - pako "^1.0.5" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -6809,7 +6204,7 @@ ws@^7: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== -xcode@^2.0.0, xcode@^2.1.0: +xcode@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.1.0.tgz#bab64a7e954bb50ca8d19da7e09531c65a43ecfe" integrity sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ== @@ -6825,16 +6220,6 @@ xcode@^3.0.0: simple-plist "^1.1.0" uuid "^7.0.3" -xhr@^2.0.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" - integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ== - dependencies: - global "~4.3.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - xml-js@^1.6.11: version "1.6.11" resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" @@ -6842,34 +6227,11 @@ xml-js@^1.6.11: dependencies: sax "^1.2.4" -xml-parse-from-string@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" - integrity sha1-qQKekp09vN7RafPG4oI42VpdWig= - -xml2js@^0.4.23, xml2js@^0.4.5: - version "0.4.23" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" - integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== - dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" - -xmlbuilder@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-14.0.0.tgz#876b5aec4f05ffd5feb97b0a871c855d16fbeb8c" - integrity sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg== - xmlbuilder@^9.0.7: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== - xmldoc@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-1.1.2.tgz#6666e029fe25470d599cd30e23ff0d1ed50466d7" @@ -6877,7 +6239,7 @@ xmldoc@^1.1.2: dependencies: sax "^1.2.1" -xmldom@0.1.x, xmldom@~0.1.31: +xmldom@0.1.x: version "0.1.31" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== @@ -6887,7 +6249,7 @@ xpipe@^1.0.5: resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" integrity sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98= -xtend@^4.0.0, xtend@~4.0.1: +xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==