Phecda

feat: add RNCWebView

@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
4 "parser": "@typescript-eslint/parser", 4 "parser": "@typescript-eslint/parser",
5 "plugins": ["@typescript-eslint"], 5 "plugins": ["@typescript-eslint"],
6 "rules": { 6 "rules": {
7 - "@typescript-eslint/no-unused-vars": "off" 7 + "@typescript-eslint/no-unused-vars": "off",
  8 + "no-console": "warn"
8 } 9 }
9 } 10 }
@@ -235,6 +235,8 @@ PODS: @@ -235,6 +235,8 @@ PODS:
235 - React-jsinspector (0.62.1) 235 - React-jsinspector (0.62.1)
236 - react-native-safe-area-context (0.7.3): 236 - react-native-safe-area-context (0.7.3):
237 - React 237 - React
  238 + - react-native-webview (9.1.1):
  239 + - React
238 - React-RCTActionSheet (0.62.1): 240 - React-RCTActionSheet (0.62.1):
239 - React-Core/RCTActionSheetHeaders (= 0.62.1) 241 - React-Core/RCTActionSheetHeaders (= 0.62.1)
240 - React-RCTAnimation (0.62.1): 242 - React-RCTAnimation (0.62.1):
@@ -294,6 +296,8 @@ PODS: @@ -294,6 +296,8 @@ PODS:
294 - React-cxxreact (= 0.62.1) 296 - React-cxxreact (= 0.62.1)
295 - React-jsi (= 0.62.1) 297 - React-jsi (= 0.62.1)
296 - ReactCommon/callinvoker (= 0.62.1) 298 - ReactCommon/callinvoker (= 0.62.1)
  299 + - ReactNativeART (1.2.0):
  300 + - React
297 - ReactNativeDarkMode (0.2.2): 301 - ReactNativeDarkMode (0.2.2):
298 - React 302 - React
299 - RNCMaskedView (0.1.7): 303 - RNCMaskedView (0.1.7):
@@ -335,6 +339,7 @@ DEPENDENCIES: @@ -335,6 +339,7 @@ DEPENDENCIES:
335 - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) 339 - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
336 - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) 340 - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
337 - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) 341 - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
  342 + - react-native-webview (from `../node_modules/react-native-webview`)
338 - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) 343 - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
339 - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) 344 - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
340 - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) 345 - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
@@ -346,6 +351,7 @@ DEPENDENCIES: @@ -346,6 +351,7 @@ DEPENDENCIES:
346 - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) 351 - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
347 - ReactCommon/callinvoker (from `../node_modules/react-native/ReactCommon`) 352 - ReactCommon/callinvoker (from `../node_modules/react-native/ReactCommon`)
348 - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) 353 - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
  354 + - "ReactNativeART (from `../node_modules/@react-native-community/art`)"
349 - ReactNativeDarkMode (from `../node_modules/react-native-dark-mode`) 355 - ReactNativeDarkMode (from `../node_modules/react-native-dark-mode`)
350 - "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)" 356 - "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
351 - RNDeviceInfo (from `../node_modules/react-native-device-info`) 357 - RNDeviceInfo (from `../node_modules/react-native-device-info`)
@@ -401,6 +407,8 @@ EXTERNAL SOURCES: @@ -401,6 +407,8 @@ EXTERNAL SOURCES:
401 :path: "../node_modules/react-native/ReactCommon/jsinspector" 407 :path: "../node_modules/react-native/ReactCommon/jsinspector"
402 react-native-safe-area-context: 408 react-native-safe-area-context:
403 :path: "../node_modules/react-native-safe-area-context" 409 :path: "../node_modules/react-native-safe-area-context"
  410 + react-native-webview:
  411 + :path: "../node_modules/react-native-webview"
404 React-RCTActionSheet: 412 React-RCTActionSheet:
405 :path: "../node_modules/react-native/Libraries/ActionSheetIOS" 413 :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
406 React-RCTAnimation: 414 React-RCTAnimation:
@@ -421,6 +429,8 @@ EXTERNAL SOURCES: @@ -421,6 +429,8 @@ EXTERNAL SOURCES:
421 :path: "../node_modules/react-native/Libraries/Vibration" 429 :path: "../node_modules/react-native/Libraries/Vibration"
422 ReactCommon: 430 ReactCommon:
423 :path: "../node_modules/react-native/ReactCommon" 431 :path: "../node_modules/react-native/ReactCommon"
  432 + ReactNativeART:
  433 + :path: "../node_modules/@react-native-community/art"
424 ReactNativeDarkMode: 434 ReactNativeDarkMode:
425 :path: "../node_modules/react-native-dark-mode" 435 :path: "../node_modules/react-native-dark-mode"
426 RNCMaskedView: 436 RNCMaskedView:
@@ -465,6 +475,7 @@ SPEC CHECKSUMS: @@ -465,6 +475,7 @@ SPEC CHECKSUMS:
465 React-jsiexecutor: e9698dee4fd43ceb44832baf15d5745f455b0157 475 React-jsiexecutor: e9698dee4fd43ceb44832baf15d5745f455b0157
466 React-jsinspector: f74a62727e5604119abd4a1eda52c0a12144bcd5 476 React-jsinspector: f74a62727e5604119abd4a1eda52c0a12144bcd5
467 react-native-safe-area-context: e200d4433aba6b7e60b52da5f37af11f7a0b0392 477 react-native-safe-area-context: e200d4433aba6b7e60b52da5f37af11f7a0b0392
  478 + react-native-webview: 0633fd7861a9bd7a80bacaee7da763c3afc248fa
468 React-RCTActionSheet: af8f28dd82fec89b8fe29637b8c779829e016a88 479 React-RCTActionSheet: af8f28dd82fec89b8fe29637b8c779829e016a88
469 React-RCTAnimation: 0d21fff7c20fb8ee41de5f2ebb63221127febd96 480 React-RCTAnimation: 0d21fff7c20fb8ee41de5f2ebb63221127febd96
470 React-RCTBlob: 9496bd93130b22069bfbc5d35e98653dae7c35c6 481 React-RCTBlob: 9496bd93130b22069bfbc5d35e98653dae7c35c6
@@ -475,6 +486,7 @@ SPEC CHECKSUMS: @@ -475,6 +486,7 @@ SPEC CHECKSUMS:
475 React-RCTText: 239e040f401505001327a109f9188a4e6dad1bd2 486 React-RCTText: 239e040f401505001327a109f9188a4e6dad1bd2
476 React-RCTVibration: 072c3b427dd29e730c2ee5bfc509cf5054741a50 487 React-RCTVibration: 072c3b427dd29e730c2ee5bfc509cf5054741a50
477 ReactCommon: 3585806280c51d5c2c0d3aa5a99014c3badb629d 488 ReactCommon: 3585806280c51d5c2c0d3aa5a99014c3badb629d
  489 + ReactNativeART: 78edc68dd4a1e675338cd0cd113319cf3a65f2ab
478 ReactNativeDarkMode: 0178ffca3b10f6a7c9f49d6f9810232b328fa949 490 ReactNativeDarkMode: 0178ffca3b10f6a7c9f49d6f9810232b328fa949
479 RNCMaskedView: 76c40a1d41c3e2535df09246a2b5487f04de0814 491 RNCMaskedView: 76c40a1d41c3e2535df09246a2b5487f04de0814
480 RNDeviceInfo: 6a3d16fce033f6979c4a6a41e62244d183e8c765 492 RNDeviceInfo: 6a3d16fce033f6979c4a6a41e62244d183e8c765
@@ -11,7 +11,10 @@ @@ -11,7 +11,10 @@
11 "commit": "git-cz" 11 "commit": "git-cz"
12 }, 12 },
13 "dependencies": { 13 "dependencies": {
  14 + "@huse/boolean": "^1.0.2",
  15 + "@huse/immer": "^1.0.2",
14 "@huse/previous-value": "^1.0.1", 16 "@huse/previous-value": "^1.0.1",
  17 + "@react-native-community/art": "^1.2.0",
15 "@react-native-community/masked-view": "^0.1.7", 18 "@react-native-community/masked-view": "^0.1.7",
16 "@react-navigation/bottom-tabs": "^5.2.5", 19 "@react-navigation/bottom-tabs": "^5.2.5",
17 "@react-navigation/drawer": "^5.4.0", 20 "@react-navigation/drawer": "^5.4.0",
@@ -24,11 +27,14 @@ @@ -24,11 +27,14 @@
24 "react-native-device-info": "^5.5.4", 27 "react-native-device-info": "^5.5.4",
25 "react-native-elements": "^1.2.7", 28 "react-native-elements": "^1.2.7",
26 "react-native-gesture-handler": "^1.6.1", 29 "react-native-gesture-handler": "^1.6.1",
  30 + "react-native-progress": "^4.1.2",
27 "react-native-reanimated": "^1.7.1", 31 "react-native-reanimated": "^1.7.1",
28 "react-native-safe-area-context": "^0.7.3", 32 "react-native-safe-area-context": "^0.7.3",
29 "react-native-screens": "^2.4.0", 33 "react-native-screens": "^2.4.0",
30 "react-native-tab-view": "^2.13.0", 34 "react-native-tab-view": "^2.13.0",
31 - "react-native-vector-icons": "^6.6.0" 35 + "react-native-vector-icons": "^6.6.0",
  36 + "react-native-webview": "9.1.1",
  37 + "url-parse": "^1.4.7"
32 }, 38 },
33 "devDependencies": { 39 "devDependencies": {
34 "@babel/core": "^7.6.2", 40 "@babel/core": "^7.6.2",
@@ -39,6 +45,7 @@ @@ -39,6 +45,7 @@
39 "@types/jest": "^24.0.24", 45 "@types/jest": "^24.0.24",
40 "@types/react-native": "^0.62.0", 46 "@types/react-native": "^0.62.0",
41 "@types/react-test-renderer": "16.9.2", 47 "@types/react-test-renderer": "16.9.2",
  48 + "@types/url-parse": "^1.4.3",
42 "@typescript-eslint/eslint-plugin": "^2.27.0", 49 "@typescript-eslint/eslint-plugin": "^2.27.0",
43 "@typescript-eslint/parser": "^2.27.0", 50 "@typescript-eslint/parser": "^2.27.0",
44 "@welldone-software/why-did-you-render": "^4.0.7", 51 "@welldone-software/why-did-you-render": "^4.0.7",
@@ -16,6 +16,8 @@ import DesignList from './DesignList'; @@ -16,6 +16,8 @@ import DesignList from './DesignList';
16 import { useDarkMode } from 'react-native-dark-mode'; 16 import { useDarkMode } from 'react-native-dark-mode';
17 import { themeForNav } from '../design'; 17 import { themeForNav } from '../design';
18 import RNDeviceInfoList from './RNDeviceInfo'; 18 import RNDeviceInfoList from './RNDeviceInfo';
  19 +import WebviewScreen from './WebviewScreen';
  20 +import { Platform } from 'react-native';
19 21
20 const MainTab = createBottomTabNavigator<MainTabParamList>(); 22 const MainTab = createBottomTabNavigator<MainTabParamList>();
21 23
@@ -74,7 +76,7 @@ const Home = () => { @@ -74,7 +76,7 @@ const Home = () => {
74 76
75 const MainStack = createStackNavigator<MainStackParamList>(); 77 const MainStack = createStackNavigator<MainStackParamList>();
76 78
77 -export default () => { 79 +const Container = () => {
78 const inDarkMode = useDarkMode(); 80 const inDarkMode = useDarkMode();
79 return ( 81 return (
80 <NavigationContainer 82 <NavigationContainer
@@ -96,7 +98,17 @@ export default () => { @@ -96,7 +98,17 @@ export default () => {
96 name="RNDeviceInfoList" 98 name="RNDeviceInfoList"
97 component={RNDeviceInfoList} 99 component={RNDeviceInfoList}
98 /> 100 />
  101 + <MainStack.Screen
  102 + name="WebviewScreen"
  103 + component={WebviewScreen}
  104 + options={({ navigation, route }) => ({
  105 + // FIXME: https://github.com/react-native-community/react-native-webview/issues/575#issuecomment-587267906
  106 + animationEnabled: Platform.OS === 'ios',
  107 + })}
  108 + />
99 </MainStack.Navigator> 109 </MainStack.Navigator>
100 </NavigationContainer> 110 </NavigationContainer>
101 ); 111 );
102 }; 112 };
  113 +
  114 +export default Container;
@@ -48,6 +48,15 @@ const SystemInfo = ({ @@ -48,6 +48,15 @@ const SystemInfo = ({
48 onPress={() => navigation.navigate('RNDeviceInfoList')} 48 onPress={() => navigation.navigate('RNDeviceInfoList')}
49 chevron 49 chevron
50 /> 50 />
  51 + <Divider />
  52 + <ListItem
  53 + title={'RNCWebview'}
  54 + onPress={() =>
  55 + navigation.navigate('WebviewScreen', {
  56 + uri: 'https://www.baidu.com',
  57 + })
  58 + }
  59 + />
51 </Card> 60 </Card>
52 </BGScroll> 61 </BGScroll>
53 ); 62 );
  1 +import React, { useCallback } from 'react';
  2 +import RNCWebView, { WebViewNavigation } from 'react-native-webview';
  3 +import { WebviewState, WebviewActions, webActions } from './reducer';
  4 +import {
  5 + WebViewProgressEvent,
  6 + WebViewErrorEvent,
  7 + OnShouldStartLoadWithRequest,
  8 +} from 'react-native-webview/lib/WebViewTypes';
  9 +import ErrorView from './ErrorView';
  10 +import { Linking } from 'react-native';
  11 +
  12 +const Body = React.forwardRef<
  13 + RNCWebView,
  14 + {
  15 + state: WebviewState;
  16 + dispatch: React.Dispatch<WebviewActions>;
  17 + initialUrl: string;
  18 + }
  19 +>(({ state, dispatch, initialUrl }, ref) => {
  20 + const onNavigationStateChange = useCallback(
  21 + (s: WebViewNavigation) => {
  22 + dispatch(webActions.changeNavigationState(s));
  23 + },
  24 + [dispatch]
  25 + );
  26 +
  27 + const onLoadProgress = useCallback(
  28 + (s: WebViewProgressEvent) => {
  29 + dispatch(webActions.onLoadProgress(s.nativeEvent));
  30 + },
  31 + [dispatch]
  32 + );
  33 +
  34 + const onError = useCallback(
  35 + (s: WebViewErrorEvent) => {
  36 + dispatch(webActions.onLoadError(s.nativeEvent));
  37 + },
  38 + [dispatch]
  39 + );
  40 +
  41 + const shouldRequest: OnShouldStartLoadWithRequest = useCallback(
  42 + (request) => {
  43 + const { url } = request;
  44 + if (url.startsWith('http') || url === 'about:blank') {
  45 + return true;
  46 + } else {
  47 + dispatch(webActions.changeNavigationState(request));
  48 + Linking.canOpenURL(url)
  49 + .then((canOpen) => {
  50 + if (canOpen) {
  51 + return Linking.openURL(url);
  52 + }
  53 + })
  54 + .catch(() => {});
  55 + return false;
  56 + }
  57 + },
  58 + [dispatch]
  59 + );
  60 +
  61 + return (
  62 + <RNCWebView
  63 + ref={ref}
  64 + source={{ uri: initialUrl }}
  65 + onNavigationStateChange={onNavigationStateChange}
  66 + onLoadProgress={onLoadProgress}
  67 + onError={onError}
  68 + onShouldStartLoadWithRequest={shouldRequest}
  69 + renderError={(_, code, description) => (
  70 + <ErrorView code={code} description={description} />
  71 + )}
  72 + />
  73 + );
  74 +});
  75 +
  76 +export default Body;
  1 +import React from 'react';
  2 +import { SafeAreaView, Text, StyleSheet } from 'react-native';
  3 +import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
  4 +import {
  5 + DynamicStyleSheet,
  6 + useDynamicStyleSheet,
  7 + useDynamicValue,
  8 +} from 'react-native-dark-mode';
  9 +import { colorPreset } from '../../design';
  10 +
  11 +const dynamicStyles = new DynamicStyleSheet({
  12 + background: {
  13 + backgroundColor: colorPreset.backgroundColor.secondary,
  14 + ...StyleSheet.absoluteFillObject,
  15 + alignItems: 'center',
  16 + justifyContent: 'center',
  17 + padding: 20,
  18 + },
  19 + errorCode: {
  20 + color: colorPreset.labelColor.primary,
  21 + },
  22 + description: {
  23 + color: colorPreset.labelColor.primary,
  24 + },
  25 +});
  26 +
  27 +export default function ErrorView({
  28 + code,
  29 + description,
  30 +}: {
  31 + code: number;
  32 + description: string;
  33 +}) {
  34 + const styles = useDynamicStyleSheet(dynamicStyles);
  35 + const redColor = useDynamicValue(colorPreset.rainbow.red);
  36 + return (
  37 + <SafeAreaView style={styles.background}>
  38 + <MaterialCommunityIcons
  39 + name={'close-circle'}
  40 + size={60}
  41 + color={redColor}
  42 + />
  43 + <Text style={styles.errorCode}>{code}</Text>
  44 + <Text style={styles.description}>{description}</Text>
  45 + </SafeAreaView>
  46 + );
  47 +}
  1 +import React, {
  2 + useState,
  3 + useCallback,
  4 + useEffect,
  5 + useLayoutEffect,
  6 +} from 'react';
  7 +import URL from 'url-parse';
  8 +import { useToggle } from '@huse/boolean';
  9 +import RNCWebview from 'react-native-webview';
  10 +import {
  11 + DynamicStyleSheet,
  12 + useDynamicStyleSheet,
  13 + useDynamicValue,
  14 +} from 'react-native-dark-mode';
  15 +import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
  16 +import * as Progress from 'react-native-progress';
  17 +import {
  18 + Platform,
  19 + SafeAreaView,
  20 + View,
  21 + Text,
  22 + TouchableOpacity,
  23 + StyleSheet,
  24 + Animated,
  25 + TextInput,
  26 + NativeSyntheticEvent,
  27 + TextInputSubmitEditingEventData,
  28 + LayoutAnimation,
  29 +} from 'react-native';
  30 +import { colorPreset } from '../../design';
  31 +import { WebviewState, WebviewActions, webActions } from './reducer';
  32 +
  33 +const dynamicStyles = new DynamicStyleSheet({
  34 + headerContainer: {
  35 + backgroundColor: colorPreset.backgroundColor.primary,
  36 + borderBottomWidth: StyleSheet.hairlineWidth,
  37 + borderBottomColor: colorPreset.separator.opaque,
  38 + },
  39 + containerStyle: {
  40 + backgroundColor: colorPreset.backgroundColor.secondary,
  41 + borderRadius: 10,
  42 + margin: 10,
  43 + ...Platform.select({
  44 + ios: {
  45 + height: 36,
  46 + marginTop: 4,
  47 + },
  48 + android: {
  49 + height: 36,
  50 + },
  51 + }),
  52 + overflow: 'hidden',
  53 + },
  54 + labelContainer: {
  55 + flexDirection: 'row',
  56 + flex: 1,
  57 + alignItems: 'center',
  58 + },
  59 + hostLabel: {
  60 + color: colorPreset.labelColor.primary,
  61 + flex: 1,
  62 + textAlign: 'center',
  63 + fontSize: 17,
  64 + },
  65 + refreshButton: {
  66 + width: 36,
  67 + height: 36,
  68 + justifyContent: 'center',
  69 + alignItems: 'center',
  70 + },
  71 + inputContainerStyle: {
  72 + backgroundColor: colorPreset.backgroundColor.secondary,
  73 + },
  74 + inputStyle: {
  75 + flex: 1,
  76 + paddingHorizontal: 16,
  77 + },
  78 + progressBar: {
  79 + position: 'absolute',
  80 + left: 0,
  81 + right: 0,
  82 + bottom: 0,
  83 + height: 2,
  84 + },
  85 +});
  86 +
  87 +interface Props {
  88 + state: WebviewState;
  89 + dispatch: React.Dispatch<WebviewActions>;
  90 + webview: React.RefObject<RNCWebview>;
  91 +}
  92 +
  93 +// EXPERIMENT
  94 +function WebviewHeader({ state, dispatch, webview }: Props) {
  95 + const [uri, setUri] = useState<URL>();
  96 + const [focused, toggleFocused] = useToggle(false);
  97 + const progressBarOpacity = new Animated.Value(1);
  98 +
  99 + const { url, progress, loading } = state;
  100 + useEffect(() => {
  101 + const newUrl = new URL(url);
  102 + setUri(newUrl);
  103 + }, [url]);
  104 +
  105 + useEffect(() => {
  106 + if (progress === 1) {
  107 + Animated.timing(progressBarOpacity, {
  108 + toValue: 0,
  109 + useNativeDriver: true,
  110 + duration: 1000,
  111 + }).start();
  112 + }
  113 + }, [progress, progressBarOpacity]);
  114 +
  115 + const onSubmitEditing = useCallback(
  116 + (e: NativeSyntheticEvent<TextInputSubmitEditingEventData>) => {
  117 + toggleFocused();
  118 + dispatch(webActions.loadText(e.nativeEvent.text));
  119 + },
  120 + [toggleFocused, dispatch]
  121 + );
  122 +
  123 + const onPressLoading = useCallback(() => {
  124 + if (loading) {
  125 + webview.current?.stopLoading();
  126 + } else {
  127 + webview.current?.reload();
  128 + }
  129 + }, [loading, webview]);
  130 +
  131 + useLayoutEffect(() => {
  132 + LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);
  133 + }, [focused]);
  134 +
  135 + const styles = useDynamicStyleSheet(dynamicStyles);
  136 + const redColor = useDynamicValue(colorPreset.rainbow.red);
  137 + const greenColor = useDynamicValue(colorPreset.rainbow.green);
  138 + const primaryLabelColor = useDynamicValue(colorPreset.labelColor.primary);
  139 + return (
  140 + <SafeAreaView style={styles.headerContainer}>
  141 + <View style={styles.containerStyle}>
  142 + {focused ? (
  143 + <View style={styles.labelContainer}>
  144 + <TextInput
  145 + defaultValue={url}
  146 + onSubmitEditing={onSubmitEditing}
  147 + style={styles.inputStyle}
  148 + underlineColorAndroid="transparent"
  149 + textContentType="URL"
  150 + selectTextOnFocus
  151 + keyboardType="url"
  152 + returnKeyType="go"
  153 + autoCapitalize="none"
  154 + autoCorrect={false}
  155 + autoFocus
  156 + onBlur={(e) => {
  157 + toggleFocused();
  158 + }}
  159 + clearButtonMode="while-editing"
  160 + />
  161 + </View>
  162 + ) : (
  163 + <TouchableOpacity
  164 + activeOpacity={1}
  165 + onPress={toggleFocused}
  166 + style={styles.labelContainer}
  167 + >
  168 + <View style={styles.refreshButton}>
  169 + <MaterialCommunityIcons
  170 + name={
  171 + uri?.protocol === 'https:'
  172 + ? 'shield-outline'
  173 + : 'shield-off-outline'
  174 + }
  175 + color={uri?.protocol === 'https:' ? greenColor : redColor}
  176 + size={20}
  177 + />
  178 + </View>
  179 + <Text style={styles.hostLabel}>
  180 + {uri?.hostname.replace(/^www\./, '')}
  181 + </Text>
  182 + <TouchableOpacity
  183 + onPress={onPressLoading}
  184 + style={styles.refreshButton}
  185 + >
  186 + <MaterialCommunityIcons
  187 + name={loading ? 'close' : 'refresh'}
  188 + color={primaryLabelColor}
  189 + size={20}
  190 + />
  191 + </TouchableOpacity>
  192 + <Animated.View
  193 + style={[{ opacity: progressBarOpacity }, styles.progressBar]}
  194 + >
  195 + <Progress.Bar
  196 + progress={progress}
  197 + borderWidth={0}
  198 + borderRadius={0}
  199 + width={null}
  200 + useNativeDriver
  201 + />
  202 + </Animated.View>
  203 + </TouchableOpacity>
  204 + )}
  205 + </View>
  206 + </SafeAreaView>
  207 + );
  208 +}
  209 +
  210 +export default WebviewHeader;
  1 +import React, { useEffect, useMemo, useState, useRef } from 'react';
  2 +import { Animated, StyleSheet } from 'react-native';
  3 +import * as Progress from 'react-native-progress';
  4 +
  5 +const styles = StyleSheet.create({
  6 + progressBar: {
  7 + position: 'absolute',
  8 + left: 0,
  9 + right: 0,
  10 + top: 0,
  11 + height: 1,
  12 + },
  13 +});
  14 +
  15 +export default function ProgressBar({
  16 + progress,
  17 + loading,
  18 +}: {
  19 + progress: number;
  20 + loading: boolean;
  21 +}) {
  22 + const progressBarOpacity = useRef(new Animated.Value(1)).current;
  23 +
  24 + useEffect(() => {
  25 + if (!loading) {
  26 + Animated.timing(progressBarOpacity, {
  27 + toValue: 0,
  28 + useNativeDriver: true,
  29 + duration: 1000,
  30 + }).start();
  31 + } else {
  32 + progressBarOpacity.setValue(1);
  33 + }
  34 + }, [loading, progressBarOpacity]);
  35 +
  36 + return (
  37 + <Animated.View
  38 + style={[{ opacity: progressBarOpacity }, styles.progressBar]}
  39 + >
  40 + <Progress.Bar
  41 + progress={progress}
  42 + borderWidth={0}
  43 + borderRadius={0}
  44 + width={null}
  45 + height={4}
  46 + useNativeDriver
  47 + />
  48 + </Animated.View>
  49 + );
  50 +}
  1 +import React, { useCallback } from 'react';
  2 +import { SafeAreaView, TouchableOpacity, StyleSheet, View } from 'react-native';
  3 +import RNCWebview from 'react-native-webview';
  4 +import EvilIcons from 'react-native-vector-icons/EvilIcons';
  5 +import { WebviewState, WebviewActions } from './reducer';
  6 +import {
  7 + DynamicStyleSheet,
  8 + useDynamicStyleSheet,
  9 + useDynamicValue,
  10 +} from 'react-native-dark-mode';
  11 +import { colorPreset } from '../../design';
  12 +
  13 +interface Props {
  14 + state: WebviewState;
  15 + dispatch: React.Dispatch<WebviewActions>;
  16 + webview: React.RefObject<RNCWebview>;
  17 +}
  18 +
  19 +const dynamicStyles = new DynamicStyleSheet({
  20 + background: {
  21 + backgroundColor: colorPreset.backgroundColor.primary,
  22 + borderTopWidth: StyleSheet.hairlineWidth,
  23 + borderTopColor: colorPreset.separator.opaque,
  24 + },
  25 + container: {
  26 + height: 44,
  27 + flexDirection: 'row',
  28 + justifyContent: 'space-evenly',
  29 + },
  30 + button: {
  31 + width: 44,
  32 + height: 44,
  33 + justifyContent: 'center',
  34 + alignItems: 'center',
  35 + },
  36 +});
  37 +
  38 +const Toolbar = ({ state, webview }: Props) => {
  39 + const { canGoBack, canGoForward, loading } = state;
  40 + const styles = useDynamicStyleSheet(dynamicStyles);
  41 + const primaryLabelColor = useDynamicValue(colorPreset.labelColor.primary);
  42 + const secondaryLabelColor = useDynamicValue(colorPreset.labelColor.tertiary);
  43 +
  44 + const onPressLoading = useCallback(() => {
  45 + if (loading) {
  46 + webview.current?.stopLoading();
  47 + } else {
  48 + webview.current?.reload();
  49 + }
  50 + }, [loading, webview]);
  51 +
  52 + return (
  53 + <SafeAreaView style={styles.background}>
  54 + <View style={styles.container}>
  55 + <TouchableOpacity
  56 + style={styles.button}
  57 + disabled={!canGoBack}
  58 + onPress={() => webview.current?.goBack()}
  59 + >
  60 + <EvilIcons
  61 + name="chevron-left"
  62 + size={40}
  63 + color={canGoBack ? primaryLabelColor : secondaryLabelColor}
  64 + />
  65 + </TouchableOpacity>
  66 + <TouchableOpacity
  67 + style={styles.button}
  68 + disabled={!canGoForward}
  69 + onPress={() => webview.current?.goForward()}
  70 + >
  71 + <EvilIcons
  72 + name="chevron-right"
  73 + size={40}
  74 + color={canGoForward ? primaryLabelColor : secondaryLabelColor}
  75 + />
  76 + </TouchableOpacity>
  77 + <TouchableOpacity style={styles.button} onPress={onPressLoading}>
  78 + <EvilIcons
  79 + name={loading ? 'close' : 'refresh'}
  80 + size={40}
  81 + color={primaryLabelColor}
  82 + />
  83 + </TouchableOpacity>
  84 + </View>
  85 + </SafeAreaView>
  86 + );
  87 +};
  88 +
  89 +export default Toolbar;
  1 +import React, { useRef, useEffect, useReducer } from 'react';
  2 +import { useImmerReducer } from '@huse/immer';
  3 +import RNCWebview from 'react-native-webview';
  4 +import { reducer, defaultState, webActions, WebviewActions } from './reducer';
  5 +import { BGView } from '../../component/View';
  6 +import Header from './Header';
  7 +import Body from './Body';
  8 +import { MainStackScreenProps } from '../../type/Navigation';
  9 +import Toolbar from './Toolbar';
  10 +import ProgressBar from './ProgressBar';
  11 +
  12 +const WebviewScreen = ({
  13 + navigation,
  14 + route,
  15 +}: MainStackScreenProps<'WebviewScreen'>) => {
  16 + const paramUri = route.params?.uri ?? 'https://about:blank';
  17 + const [state, dispatch] = useImmerReducer(reducer, {
  18 + ...defaultState,
  19 + url: paramUri,
  20 + });
  21 +
  22 + const webview = useRef<RNCWebview>(null);
  23 +
  24 + return (
  25 + <BGView>
  26 + <Body
  27 + initialUrl={paramUri}
  28 + state={state}
  29 + dispatch={dispatch}
  30 + ref={webview}
  31 + />
  32 + <ProgressBar progress={state.progress} loading={state.loading} />
  33 + <Toolbar state={state} dispatch={dispatch} webview={webview} />
  34 + </BGView>
  35 + );
  36 +};
  37 +
  38 +export default WebviewScreen;
  1 +import React, { Reducer } from 'react';
  2 +import { WebViewNavigation } from 'react-native-webview';
  3 +import { ImmerReducer } from '@huse/immer';
  4 +import {
  5 + WebViewError,
  6 + WebViewProgressEvent,
  7 + WebViewNativeProgressEvent,
  8 + WebViewNativeEvent,
  9 +} from 'react-native-webview/lib/WebViewTypes';
  10 +
  11 +export type WebviewActionTypes =
  12 + | 'ChangeNavigationState'
  13 + | 'OnLoadError'
  14 + | 'OnLoadProgress'
  15 + | 'LoadText';
  16 +
  17 +type PayloadAction<Type extends WebviewActionTypes, Payload> = {
  18 + type: Type;
  19 + payload: Payload;
  20 +};
  21 +
  22 +export type WebviewActions =
  23 + | PayloadAction<'ChangeNavigationState', WebViewNavigation>
  24 + | PayloadAction<'LoadText', string>
  25 + | PayloadAction<'OnLoadError', WebViewError>
  26 + | PayloadAction<'OnLoadProgress', WebViewNativeProgressEvent>;
  27 +
  28 +type PayloadOf<
  29 + A extends { type: string; payload: any },
  30 + T extends string
  31 +> = A extends {
  32 + type: T;
  33 + payload: infer R;
  34 +}
  35 + ? R
  36 + : never;
  37 +
  38 +const createAction = <
  39 + T extends WebviewActionTypes,
  40 + P extends PayloadOf<WebviewActions, T>
  41 +>(
  42 + type: T
  43 +) => (payload: P) => ({
  44 + type,
  45 + payload,
  46 +});
  47 +
  48 +export const webActions = {
  49 + changeNavigationState: createAction('ChangeNavigationState'),
  50 + onLoadError: createAction('OnLoadError'),
  51 + onLoadProgress: createAction('OnLoadProgress'),
  52 + loadText: createAction('LoadText'),
  53 +};
  54 +
  55 +export type WebviewState = WebViewNativeEvent & {
  56 + domain?: string;
  57 + code?: number;
  58 + description?: string;
  59 + progress: number;
  60 +};
  61 +
  62 +export const defaultState: WebviewState = {
  63 + canGoBack: false,
  64 + canGoForward: false,
  65 + url: 'https://about:blank',
  66 + title: '',
  67 + lockIdentifier: 0,
  68 + loading: false,
  69 + progress: 0,
  70 +};
  71 +
  72 +export const reducer: ImmerReducer<WebviewState, WebviewActions> = (
  73 + state,
  74 + action
  75 +) => {
  76 + switch (action.type) {
  77 + case 'ChangeNavigationState':
  78 + case 'OnLoadProgress':
  79 + case 'OnLoadError':
  80 + return { ...state, ...action.payload };
  81 + case 'LoadText':
  82 + state.url = action.payload;
  83 + break;
  84 + }
  85 +};
@@ -10,6 +10,7 @@ export type MainTabParamList = { @@ -10,6 +10,7 @@ export type MainTabParamList = {
10 export type MainStackParamList = { 10 export type MainStackParamList = {
11 MainTab: undefined; 11 MainTab: undefined;
12 RNDeviceInfoList: undefined; 12 RNDeviceInfoList: undefined;
  13 + WebviewScreen: { uri: string } | undefined;
13 }; 14 };
14 15
15 export type MainTabScreenProps<RouteName extends keyof MainTabParamList> = { 16 export type MainTabScreenProps<RouteName extends keyof MainTabParamList> = {
@@ -841,6 +841,27 @@ @@ -841,6 +841,27 @@
841 dependencies: 841 dependencies:
842 "@hapi/hoek" "^8.3.0" 842 "@hapi/hoek" "^8.3.0"
843 843
  844 +"@huse/boolean@^1.0.2":
  845 + version "1.0.2"
  846 + resolved "https://registry.npm.taobao.org/@huse/boolean/download/@huse/boolean-1.0.2.tgz#139cfe12703ad76dbc7a67c92a82d853d7e0ff89"
  847 + integrity sha1-E5z+EnA61228emfJKoLYU9fg/4k=
  848 + dependencies:
  849 + "@huse/methods" "^1.1.1"
  850 +
  851 +"@huse/immer@^1.0.2":
  852 + version "1.0.2"
  853 + resolved "https://registry.npm.taobao.org/@huse/immer/download/@huse/immer-1.0.2.tgz#e1bad0884284864c4ea1694377c9dc91aa7741ca"
  854 + integrity sha1-4brQiEKEhkxOoWlDd8nckap3Qco=
  855 + dependencies:
  856 + immer "^6.0.1"
  857 +
  858 +"@huse/methods@^1.1.1":
  859 + version "1.1.1"
  860 + resolved "https://registry.npm.taobao.org/@huse/methods/download/@huse/methods-1.1.1.tgz#9e1d417cdff5a068319ac1b2282b1fd784015f58"
  861 + integrity sha1-nh1BfN/1oGgxmsGyKCsf14QBX1g=
  862 + dependencies:
  863 + "@huse/immer" "^1.0.2"
  864 +
844 "@huse/previous-value@^1.0.1": 865 "@huse/previous-value@^1.0.1":
845 version "1.0.1" 866 version "1.0.1"
846 resolved "https://registry.npm.taobao.org/@huse/previous-value/download/@huse/previous-value-1.0.1.tgz#77807e59b26e2cd86ebb6aac295163a71bbf1099" 867 resolved "https://registry.npm.taobao.org/@huse/previous-value/download/@huse/previous-value-1.0.1.tgz#77807e59b26e2cd86ebb6aac295163a71bbf1099"
@@ -1016,6 +1037,15 @@ @@ -1016,6 +1037,15 @@
1016 mkdirp "^0.5.1" 1037 mkdirp "^0.5.1"
1017 rimraf "^2.5.2" 1038 rimraf "^2.5.2"
1018 1039
  1040 +"@react-native-community/art@^1.1.2", "@react-native-community/art@^1.2.0":
  1041 + version "1.2.0"
  1042 + resolved "https://registry.npm.taobao.org/@react-native-community/art/download/@react-native-community/art-1.2.0.tgz#386d95393f6042d9006f9d4bc6063fb898794460"
  1043 + integrity sha1-OG2VOT9gQtkAb51LxgY/uJh5RGA=
  1044 + dependencies:
  1045 + art "^0.10.3"
  1046 + invariant "^2.2.4"
  1047 + prop-types "^15.7.2"
  1048 +
1019 "@react-native-community/cli-debugger-ui@^4.2.1": 1049 "@react-native-community/cli-debugger-ui@^4.2.1":
1020 version "4.2.1" 1050 version "4.2.1"
1021 resolved "https://registry.npm.taobao.org/@react-native-community/cli-debugger-ui/download/@react-native-community/cli-debugger-ui-4.2.1.tgz?cache=0&sync_timestamp=1582652910092&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40react-native-community%2Fcli-debugger-ui%2Fdownload%2F%40react-native-community%2Fcli-debugger-ui-4.2.1.tgz#da22aa1cf8d04fe1aa2759873916473e81c4450b" 1051 resolved "https://registry.npm.taobao.org/@react-native-community/cli-debugger-ui/download/@react-native-community/cli-debugger-ui-4.2.1.tgz?cache=0&sync_timestamp=1582652910092&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40react-native-community%2Fcli-debugger-ui%2Fdownload%2F%40react-native-community%2Fcli-debugger-ui-4.2.1.tgz#da22aa1cf8d04fe1aa2759873916473e81c4450b"
@@ -1334,6 +1364,11 @@ @@ -1334,6 +1364,11 @@
1334 resolved "https://registry.npm.taobao.org/@types/stack-utils/download/@types/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" 1364 resolved "https://registry.npm.taobao.org/@types/stack-utils/download/@types/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
1335 integrity sha1-CoUdO9lkmPolwzq3J47TvWXwbD4= 1365 integrity sha1-CoUdO9lkmPolwzq3J47TvWXwbD4=
1336 1366
  1367 +"@types/url-parse@^1.4.3":
  1368 + version "1.4.3"
  1369 + resolved "https://registry.npm.taobao.org/@types/url-parse/download/@types/url-parse-1.4.3.tgz#fba49d90f834951cb000a674efee3d6f20968329"
  1370 + integrity sha1-+6SdkPg0lRywAKZ07+49byCWgyk=
  1371 +
1337 "@types/yargs-parser@*": 1372 "@types/yargs-parser@*":
1338 version "15.0.0" 1373 version "15.0.0"
1339 resolved "https://registry.npm.taobao.org/@types/yargs-parser/download/@types/yargs-parser-15.0.0.tgz?cache=0&sync_timestamp=1580844965117&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs-parser%2Fdownload%2F%40types%2Fyargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" 1374 resolved "https://registry.npm.taobao.org/@types/yargs-parser/download/@types/yargs-parser-15.0.0.tgz?cache=0&sync_timestamp=1580844965117&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs-parser%2Fdownload%2F%40types%2Fyargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
@@ -1685,6 +1720,11 @@ arrify@^1.0.1: @@ -1685,6 +1720,11 @@ arrify@^1.0.1:
1685 resolved "https://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 1720 resolved "https://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
1686 integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= 1721 integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
1687 1722
  1723 +art@^0.10.3:
  1724 + version "0.10.3"
  1725 + resolved "https://registry.npm.taobao.org/art/download/art-0.10.3.tgz#b01d84a968ccce6208df55a733838c96caeeaea2"
  1726 + integrity sha1-sB2EqWjMzmII31WnM4OMlsrurqI=
  1727 +
1688 asap@~2.0.3: 1728 asap@~2.0.3:
1689 version "2.0.6" 1729 version "2.0.6"
1690 resolved "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 1730 resolved "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
@@ -1707,6 +1747,13 @@ assign-symbols@^1.0.0: @@ -1707,6 +1747,13 @@ assign-symbols@^1.0.0:
1707 resolved "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 1747 resolved "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
1708 integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= 1748 integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
1709 1749
  1750 +assign@>=0.1.7:
  1751 + version "0.1.7"
  1752 + resolved "https://registry.npm.taobao.org/assign/download/assign-0.1.7.tgz#e63bfe3a887b8630913c27663e4cc9bff1ddd25f"
  1753 + integrity sha1-5jv+Ooh7hjCRPCdmPkzJv/Hd0l8=
  1754 + dependencies:
  1755 + fusing "0.4.x"
  1756 +
1710 astral-regex@^1.0.0: 1757 astral-regex@^1.0.0:
1711 version "1.0.0" 1758 version "1.0.0"
1712 resolved "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 1759 resolved "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
@@ -1717,6 +1764,11 @@ async-limiter@~1.0.0: @@ -1717,6 +1764,11 @@ async-limiter@~1.0.0:
1717 resolved "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" 1764 resolved "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
1718 integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0= 1765 integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=
1719 1766
  1767 +async@0.6.x:
  1768 + version "0.6.2"
  1769 + resolved "https://registry.npm.taobao.org/async/download/async-0.6.2.tgz#41fd038a3812c0a8bc1842ecf08ba63eb0392bef"
  1770 + integrity sha1-Qf0DijgSwKi8GELs8IumPrA5K+8=
  1771 +
1720 async@^2.4.0: 1772 async@^2.4.0:
1721 version "2.6.3" 1773 version "2.6.3"
1722 resolved "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" 1774 resolved "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
@@ -1856,6 +1908,13 @@ babel-runtime@^6.23.0, babel-runtime@^6.26.0: @@ -1856,6 +1908,13 @@ babel-runtime@^6.23.0, babel-runtime@^6.26.0:
1856 core-js "^2.4.0" 1908 core-js "^2.4.0"
1857 regenerator-runtime "^0.11.0" 1909 regenerator-runtime "^0.11.0"
1858 1910
  1911 +back@1.0.x:
  1912 + version "1.0.2"
  1913 + resolved "https://registry.npm.taobao.org/back/download/back-1.0.2.tgz#a93f5e6ce69729984d5901a2bb16e3b01a4d6369"
  1914 + integrity sha1-qT9ebOaXKZhNWQGiuxbjsBpNY2k=
  1915 + dependencies:
  1916 + xtend "^4.0.0"
  1917 +
1859 balanced-match@^1.0.0: 1918 balanced-match@^1.0.0:
1860 version "1.0.0" 1919 version "1.0.0"
1861 resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 1920 resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@@ -1962,7 +2021,7 @@ bser@2.1.1: @@ -1962,7 +2021,7 @@ bser@2.1.1:
1962 dependencies: 2021 dependencies:
1963 node-int64 "^0.4.0" 2022 node-int64 "^0.4.0"
1964 2023
1965 -buffer-crc32@^0.2.13: 2024 +buffer-crc32@^0.2.13, buffer-crc32@~0.2.3:
1966 version "0.2.13" 2025 version "0.2.13"
1967 resolved "https://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" 2026 resolved "https://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
1968 integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= 2027 integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
@@ -2200,6 +2259,11 @@ collection-visit@^1.0.0: @@ -2200,6 +2259,11 @@ collection-visit@^1.0.0:
2200 map-visit "^1.0.0" 2259 map-visit "^1.0.0"
2201 object-visit "^1.0.0" 2260 object-visit "^1.0.0"
2202 2261
  2262 +color-convert@^0.5.0:
  2263 + version "0.5.3"
  2264 + resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd"
  2265 + integrity sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=
  2266 +
2203 color-convert@^1.9.0, color-convert@^1.9.1: 2267 color-convert@^1.9.0, color-convert@^1.9.1:
2204 version "1.9.3" 2268 version "1.9.3"
2205 resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 2269 resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -2224,6 +2288,13 @@ color-name@^1.0.0, color-name@~1.1.4: @@ -2224,6 +2288,13 @@ color-name@^1.0.0, color-name@~1.1.4:
2224 resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 2288 resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
2225 integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= 2289 integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=
2226 2290
  2291 +color-string@^0.3.0:
  2292 + version "0.3.0"
  2293 + resolved "https://registry.npm.taobao.org/color-string/download/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
  2294 + integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=
  2295 + dependencies:
  2296 + color-name "^1.0.0"
  2297 +
2227 color-string@^1.5.2: 2298 color-string@^1.5.2:
2228 version "1.5.3" 2299 version "1.5.3"
2229 resolved "https://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" 2300 resolved "https://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
@@ -2237,6 +2308,14 @@ color-support@^1.1.3: @@ -2237,6 +2308,14 @@ color-support@^1.1.3:
2237 resolved "https://registry.npm.taobao.org/color-support/download/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" 2308 resolved "https://registry.npm.taobao.org/color-support/download/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
2238 integrity sha1-k4NDeaHMmgxh+C9S8NBDIiUb1aI= 2309 integrity sha1-k4NDeaHMmgxh+C9S8NBDIiUb1aI=
2239 2310
  2311 +color@0.8.x:
  2312 + version "0.8.0"
  2313 + resolved "https://registry.npm.taobao.org/color/download/color-0.8.0.tgz#890c07c3fd4e649537638911cf691e5458b6fca5"
  2314 + integrity sha1-iQwHw/1OZJU3Y4kRz2keVFi2/KU=
  2315 + dependencies:
  2316 + color-convert "^0.5.0"
  2317 + color-string "^0.3.0"
  2318 +
2240 color@^3.1.0, color@^3.1.2: 2319 color@^3.1.0, color@^3.1.2:
2241 version "3.1.2" 2320 version "3.1.2"
2242 resolved "https://registry.npm.taobao.org/color/download/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" 2321 resolved "https://registry.npm.taobao.org/color/download/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
@@ -2250,6 +2329,19 @@ colorette@^1.0.7: @@ -2250,6 +2329,19 @@ colorette@^1.0.7:
2250 resolved "https://registry.npm.taobao.org/colorette/download/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7" 2329 resolved "https://registry.npm.taobao.org/colorette/download/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7"
2251 integrity sha1-H5Q+WjV/rBC04PWq7zsUzcGvbsc= 2330 integrity sha1-H5Q+WjV/rBC04PWq7zsUzcGvbsc=
2252 2331
  2332 +colornames@0.0.2:
  2333 + version "0.0.2"
  2334 + resolved "https://registry.npm.taobao.org/colornames/download/colornames-0.0.2.tgz#d811fd6c84f59029499a8ac4436202935b92be31"
  2335 + integrity sha1-2BH9bIT1kClJmorEQ2ICk1uSvjE=
  2336 +
  2337 +colorspace@1.0.x:
  2338 + version "1.0.1"
  2339 + resolved "https://registry.npm.taobao.org/colorspace/download/colorspace-1.0.1.tgz#c99c796ed31128b9876a52e1ee5ee03a4a719749"
  2340 + integrity sha1-yZx5btMRKLmHalLh7l7gOkpxl0k=
  2341 + dependencies:
  2342 + color "0.8.x"
  2343 + text-hex "0.0.x"
  2344 +
2253 combined-stream@^1.0.6, combined-stream@~1.0.6: 2345 combined-stream@^1.0.6, combined-stream@~1.0.6:
2254 version "1.0.8" 2346 version "1.0.8"
2255 resolved "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 2347 resolved "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
@@ -2346,7 +2438,7 @@ concat-map@0.0.1: @@ -2346,7 +2438,7 @@ concat-map@0.0.1:
2346 resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 2438 resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
2347 integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 2439 integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
2348 2440
2349 -concat-stream@^1.6.0: 2441 +concat-stream@^1.6.0, concat-stream@^1.6.2:
2350 version "1.6.2" 2442 version "1.6.2"
2351 resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 2443 resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
2352 integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ= 2444 integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=
@@ -2755,7 +2847,17 @@ debounce@^1.2.0: @@ -2755,7 +2847,17 @@ debounce@^1.2.0:
2755 resolved "https://registry.npm.taobao.org/debounce/download/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" 2847 resolved "https://registry.npm.taobao.org/debounce/download/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131"
2756 integrity sha1-RKVAq8DqmUMBjcDqqVzOh/Zc0TE= 2848 integrity sha1-RKVAq8DqmUMBjcDqqVzOh/Zc0TE=
2757 2849
2758 -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: 2850 +debug@0.7.x:
  2851 + version "0.7.4"
  2852 + resolved "https://registry.npm.taobao.org/debug/download/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
  2853 + integrity sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=
  2854 +
  2855 +debug@0.8.x:
  2856 + version "0.8.1"
  2857 + resolved "https://registry.npm.taobao.org/debug/download/debug-0.8.1.tgz#20ff4d26f5e422cb68a1bacbbb61039ad8c1c130"
  2858 + integrity sha1-IP9NJvXkIstoobrLu2EDmtjBwTA=
  2859 +
  2860 +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
2759 version "2.6.9" 2861 version "2.6.9"
2760 resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 2862 resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
2761 integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= 2863 integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=
@@ -2878,6 +2980,15 @@ detect-newline@^2.1.0: @@ -2878,6 +2980,15 @@ detect-newline@^2.1.0:
2878 resolved "https://registry.npm.taobao.org/detect-newline/download/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" 2980 resolved "https://registry.npm.taobao.org/detect-newline/download/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
2879 integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= 2981 integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
2880 2982
  2983 +diagnostics@1.0.x:
  2984 + version "1.0.1"
  2985 + resolved "https://registry.npm.taobao.org/diagnostics/download/diagnostics-1.0.1.tgz#accdb080c82bb25d0dd73430a9e6a87fbb431541"
  2986 + integrity sha1-rM2wgMgrsl0N1zQwqeaof7tDFUE=
  2987 + dependencies:
  2988 + colorspace "1.0.x"
  2989 + enabled "1.0.x"
  2990 + kuler "0.0.x"
  2991 +
2881 diff-sequences@^24.9.0: 2992 diff-sequences@^24.9.0:
2882 version "24.9.0" 2993 version "24.9.0"
2883 resolved "https://registry.npm.taobao.org/diff-sequences/download/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" 2994 resolved "https://registry.npm.taobao.org/diff-sequences/download/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"
@@ -2937,6 +3048,16 @@ elegant-spinner@^1.0.1: @@ -2937,6 +3048,16 @@ elegant-spinner@^1.0.1:
2937 resolved "https://registry.npm.taobao.org/elegant-spinner/download/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" 3048 resolved "https://registry.npm.taobao.org/elegant-spinner/download/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
2938 integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= 3049 integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=
2939 3050
  3051 +emits@1.0.x:
  3052 + version "1.0.2"
  3053 + resolved "https://registry.npm.taobao.org/emits/download/emits-1.0.2.tgz#db20ec6668325071c313441e30cfe2a69ea73859"
  3054 + integrity sha1-2yDsZmgyUHHDE0QeMM/ipp6nOFk=
  3055 +
  3056 +emits@3.0.x:
  3057 + version "3.0.0"
  3058 + resolved "https://registry.npm.taobao.org/emits/download/emits-3.0.0.tgz#32752bba95e1707b219562384ab9bb8b1fd62f70"
  3059 + integrity sha1-MnUrupXhcHshlWI4Srm7ix/WL3A=
  3060 +
2940 emoji-regex@^7.0.1: 3061 emoji-regex@^7.0.1:
2941 version "7.0.3" 3062 version "7.0.3"
2942 resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 3063 resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
@@ -2947,6 +3068,13 @@ emoji-regex@^8.0.0: @@ -2947,6 +3068,13 @@ emoji-regex@^8.0.0:
2947 resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 3068 resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
2948 integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= 3069 integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=
2949 3070
  3071 +enabled@1.0.x:
  3072 + version "1.0.2"
  3073 + resolved "https://registry.npm.taobao.org/enabled/download/enabled-1.0.2.tgz#965f6513d2c2d1c5f4652b64a2e3396467fc2f93"
  3074 + integrity sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=
  3075 + dependencies:
  3076 + env-variable "0.0.x"
  3077 +
2950 encodeurl@~1.0.2: 3078 encodeurl@~1.0.2:
2951 version "1.0.2" 3079 version "1.0.2"
2952 resolved "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 3080 resolved "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
@@ -2966,6 +3094,11 @@ end-of-stream@^1.1.0: @@ -2966,6 +3094,11 @@ end-of-stream@^1.1.0:
2966 dependencies: 3094 dependencies:
2967 once "^1.4.0" 3095 once "^1.4.0"
2968 3096
  3097 +env-variable@0.0.x:
  3098 + version "0.0.6"
  3099 + resolved "https://registry.npm.taobao.org/env-variable/download/env-variable-0.0.6.tgz#74ab20b3786c545b62b4a4813ab8cf22726c9808"
  3100 + integrity sha1-dKsgs3hsVFtitKSBOrjPInJsmAg=
  3101 +
2969 envinfo@^7.1.0: 3102 envinfo@^7.1.0:
2970 version "7.5.0" 3103 version "7.5.0"
2971 resolved "https://registry.npm.taobao.org/envinfo/download/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4" 3104 resolved "https://registry.npm.taobao.org/envinfo/download/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4"
@@ -3017,16 +3150,16 @@ escape-html@~1.0.3: @@ -3017,16 +3150,16 @@ escape-html@~1.0.3:
3017 resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 3150 resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
3018 integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 3151 integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
3019 3152
  3153 +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0:
  3154 + version "2.0.0"
  3155 + resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
  3156 + integrity sha1-owME6Z2qMuI7L9IPUbq9B8/8o0Q=
  3157 +
3020 escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 3158 escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
3021 version "1.0.5" 3159 version "1.0.5"
3022 resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 3160 resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
3023 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 3161 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
3024 3162
3025 -escape-string-regexp@^2.0.0:  
3026 - version "2.0.0"  
3027 - resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"  
3028 - integrity sha1-owME6Z2qMuI7L9IPUbq9B8/8o0Q=  
3029 -  
3030 escodegen@^1.9.1: 3163 escodegen@^1.9.1:
3031 version "1.14.1" 3164 version "1.14.1"
3032 resolved "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.1.tgz?cache=0&sync_timestamp=1580955044375&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescodegen%2Fdownload%2Fescodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" 3165 resolved "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.1.tgz?cache=0&sync_timestamp=1580955044375&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescodegen%2Fdownload%2Fescodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457"
@@ -3238,6 +3371,11 @@ event-target-shim@^5.0.0, event-target-shim@^5.0.1: @@ -3238,6 +3371,11 @@ event-target-shim@^5.0.0, event-target-shim@^5.0.1:
3238 resolved "https://registry.npm.taobao.org/event-target-shim/download/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" 3371 resolved "https://registry.npm.taobao.org/event-target-shim/download/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
3239 integrity sha1-XU0+vflYPWOlMzzi3rdICrKwV4k= 3372 integrity sha1-XU0+vflYPWOlMzzi3rdICrKwV4k=
3240 3373
  3374 +eventemitter3@1.2.x:
  3375 + version "1.2.0"
  3376 + resolved "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
  3377 + integrity sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=
  3378 +
3241 eventemitter3@^3.0.0: 3379 eventemitter3@^3.0.0:
3242 version "3.1.2" 3380 version "3.1.2"
3243 resolved "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" 3381 resolved "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
@@ -3346,6 +3484,11 @@ extend@~3.0.2: @@ -3346,6 +3484,11 @@ extend@~3.0.2:
3346 resolved "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 3484 resolved "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
3347 integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= 3485 integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=
3348 3486
  3487 +extendible@0.1.x:
  3488 + version "0.1.1"
  3489 + resolved "https://registry.npm.taobao.org/extendible/download/extendible-0.1.1.tgz#e2a37ed87129fb4f9533e8a8d7506230a539c905"
  3490 + integrity sha1-4qN+2HEp+0+VM+io11BiMKU5yQU=
  3491 +
3349 external-editor@^2.0.4: 3492 external-editor@^2.0.4:
3350 version "2.2.0" 3493 version "2.2.0"
3351 resolved "https://registry.npm.taobao.org/external-editor/download/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" 3494 resolved "https://registry.npm.taobao.org/external-editor/download/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
@@ -3378,6 +3521,21 @@ extglob@^2.0.4: @@ -3378,6 +3521,21 @@ extglob@^2.0.4:
3378 snapdragon "^0.8.1" 3521 snapdragon "^0.8.1"
3379 to-regex "^3.0.1" 3522 to-regex "^3.0.1"
3380 3523
  3524 +extract-github@0.0.x:
  3525 + version "0.0.5"
  3526 + resolved "https://registry.npm.taobao.org/extract-github/download/extract-github-0.0.5.tgz#f542536db8c19b983a3bec9db96d2ef2a5ff1a86"
  3527 + integrity sha1-9UJTbbjBm5g6O+yduW0u8qX/GoY=
  3528 +
  3529 +extract-zip@^1.6.7:
  3530 + version "1.7.0"
  3531 + resolved "https://registry.npm.taobao.org/extract-zip/download/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927"
  3532 + integrity sha1-VWzDrp339FLEk6DPtRzDAneUCSc=
  3533 + dependencies:
  3534 + concat-stream "^1.6.2"
  3535 + debug "^2.6.9"
  3536 + mkdirp "^0.5.4"
  3537 + yauzl "^2.10.0"
  3538 +
3381 extsprintf@1.3.0: 3539 extsprintf@1.3.0:
3382 version "1.3.0" 3540 version "1.3.0"
3383 resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 3541 resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
@@ -3473,6 +3631,13 @@ fbjs@^1.0.0: @@ -3473,6 +3631,13 @@ fbjs@^1.0.0:
3473 setimmediate "^1.0.5" 3631 setimmediate "^1.0.5"
3474 ua-parser-js "^0.7.18" 3632 ua-parser-js "^0.7.18"
3475 3633
  3634 +fd-slicer@~1.1.0:
  3635 + version "1.1.0"
  3636 + resolved "https://registry.npm.taobao.org/fd-slicer/download/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
  3637 + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
  3638 + dependencies:
  3639 + pend "~1.2.0"
  3640 +
3476 figures@3.1.0: 3641 figures@3.1.0:
3477 version "3.1.0" 3642 version "3.1.0"
3478 resolved "https://registry.npm.taobao.org/figures/download/figures-3.1.0.tgz?cache=0&sync_timestamp=1581865349068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" 3643 resolved "https://registry.npm.taobao.org/figures/download/figures-3.1.0.tgz?cache=0&sync_timestamp=1581865349068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec"
@@ -3683,6 +3848,15 @@ fs-extra@^1.0.0: @@ -3683,6 +3848,15 @@ fs-extra@^1.0.0:
3683 jsonfile "^2.1.0" 3848 jsonfile "^2.1.0"
3684 klaw "^1.0.0" 3849 klaw "^1.0.0"
3685 3850
  3851 +fs-extra@^7.0.1:
  3852 + version "7.0.1"
  3853 + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
  3854 + integrity sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=
  3855 + dependencies:
  3856 + graceful-fs "^4.1.2"
  3857 + jsonfile "^4.0.0"
  3858 + universalify "^0.1.0"
  3859 +
3686 fs.realpath@^1.0.0: 3860 fs.realpath@^1.0.0:
3687 version "1.0.0" 3861 version "1.0.0"
3688 resolved "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 3862 resolved "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -3706,6 +3880,29 @@ functional-red-black-tree@^1.0.1: @@ -3706,6 +3880,29 @@ functional-red-black-tree@^1.0.1:
3706 resolved "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 3880 resolved "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
3707 integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 3881 integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
3708 3882
  3883 +fusing@0.2.x:
  3884 + version "0.2.3"
  3885 + resolved "https://registry.npm.taobao.org/fusing/download/fusing-0.2.3.tgz#d0eefaf985d2bafded44af8b185316f6e429e1db"
  3886 + integrity sha1-0O76+YXSuv3tRK+LGFMW9uQp4ds=
  3887 + dependencies:
  3888 + predefine "0.1.x"
  3889 +
  3890 +fusing@0.4.x:
  3891 + version "0.4.0"
  3892 + resolved "https://registry.npm.taobao.org/fusing/download/fusing-0.4.0.tgz#c99068f54ca3e11dc0118902152abf367aba4a4d"
  3893 + integrity sha1-yZBo9Uyj4R3AEYkCFSq/Nnq6Sk0=
  3894 + dependencies:
  3895 + emits "1.0.x"
  3896 + predefine "0.1.x"
  3897 +
  3898 +fusing@1.0.x:
  3899 + version "1.0.0"
  3900 + resolved "https://registry.npm.taobao.org/fusing/download/fusing-1.0.0.tgz#550c15d76af9265778aa051ece44d4000a098d45"
  3901 + integrity sha1-VQwV12r5Jld4qgUezkTUAAoJjUU=
  3902 + dependencies:
  3903 + emits "3.0.x"
  3904 + predefine "0.1.x"
  3905 +
3709 gensync@^1.0.0-beta.1: 3906 gensync@^1.0.0-beta.1:
3710 version "1.0.0-beta.1" 3907 version "1.0.0-beta.1"
3711 resolved "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" 3908 resolved "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
@@ -3823,6 +4020,15 @@ gitconfiglocal@^1.0.0: @@ -3823,6 +4020,15 @@ gitconfiglocal@^1.0.0:
3823 dependencies: 4020 dependencies:
3824 ini "^1.3.2" 4021 ini "^1.3.2"
3825 4022
  4023 +githulk@0.0.x:
  4024 + version "0.0.7"
  4025 + resolved "https://registry.npm.taobao.org/githulk/download/githulk-0.0.7.tgz#d96ca29f0ec43117c538e521d663566ea84b4eff"
  4026 + integrity sha1-2Wyinw7EMRfFOOUh1mNWbqhLTv8=
  4027 + dependencies:
  4028 + debug "0.7.x"
  4029 + extract-github "0.0.x"
  4030 + mana "0.1.x"
  4031 +
3826 glob-parent@^5.0.0: 4032 glob-parent@^5.0.0:
3827 version "5.1.1" 4033 version "5.1.1"
3828 resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 4034 resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
@@ -4099,6 +4305,11 @@ image-size@^0.6.0: @@ -4099,6 +4305,11 @@ image-size@^0.6.0:
4099 resolved "https://registry.npm.taobao.org/image-size/download/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" 4305 resolved "https://registry.npm.taobao.org/image-size/download/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2"
4100 integrity sha1-5+XGW7U0vXzc7dbLUWYnKoX3X7I= 4306 integrity sha1-5+XGW7U0vXzc7dbLUWYnKoX3X7I=
4101 4307
  4308 +immer@^6.0.1:
  4309 + version "6.0.3"
  4310 + resolved "https://registry.npm.taobao.org/immer/download/immer-6.0.3.tgz?cache=0&sync_timestamp=1585688720113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimmer%2Fdownload%2Fimmer-6.0.3.tgz#94d5051cd724668160a900d66d85ec02816f29bd"
  4311 + integrity sha1-lNUFHNckZoFgqQDWbYXsAoFvKb0=
  4312 +
4102 import-fresh@^2.0.0: 4313 import-fresh@^2.0.0:
4103 version "2.0.0" 4314 version "2.0.0"
4104 resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" 4315 resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
@@ -4230,7 +4441,7 @@ interpret@^1.0.0: @@ -4230,7 +4441,7 @@ interpret@^1.0.0:
4230 resolved "https://registry.npm.taobao.org/interpret/download/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" 4441 resolved "https://registry.npm.taobao.org/interpret/download/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
4231 integrity sha1-1QYaYiS+WOgIOYX1AU2EQ1lXYpY= 4442 integrity sha1-1QYaYiS+WOgIOYX1AU2EQ1lXYpY=
4232 4443
4233 -invariant@^2.2.4: 4444 +invariant@2.2.4, invariant@^2.2.4:
4234 version "2.2.4" 4445 version "2.2.4"
4235 resolved "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 4446 resolved "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
4236 integrity sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY= 4447 integrity sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=
@@ -5109,6 +5320,13 @@ kleur@^3.0.3: @@ -5109,6 +5320,13 @@ kleur@^3.0.3:
5109 resolved "https://registry.npm.taobao.org/kleur/download/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 5320 resolved "https://registry.npm.taobao.org/kleur/download/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
5110 integrity sha1-p5yezIbuHOP6YgbRIWxQHxR/wH4= 5321 integrity sha1-p5yezIbuHOP6YgbRIWxQHxR/wH4=
5111 5322
  5323 +kuler@0.0.x:
  5324 + version "0.0.0"
  5325 + resolved "https://registry.npm.taobao.org/kuler/download/kuler-0.0.0.tgz#b66bb46b934e550f59d818848e0abba4f7f5553c"
  5326 + integrity sha1-tmu0a5NOVQ9Z2BiEjgq7pPf1VTw=
  5327 + dependencies:
  5328 + colornames "0.0.2"
  5329 +
5112 lcid@^2.0.0: 5330 lcid@^2.0.0:
5113 version "2.0.0" 5331 version "2.0.0"
5114 resolved "https://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" 5332 resolved "https://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
@@ -5134,6 +5352,17 @@ levn@^0.3.0, levn@~0.3.0: @@ -5134,6 +5352,17 @@ levn@^0.3.0, levn@~0.3.0:
5134 prelude-ls "~1.1.2" 5352 prelude-ls "~1.1.2"
5135 type-check "~0.3.2" 5353 type-check "~0.3.2"
5136 5354
  5355 +licenses@0.0.x:
  5356 + version "0.0.20"
  5357 + resolved "https://registry.npm.taobao.org/licenses/download/licenses-0.0.20.tgz#f18a57b26a78eaf28a873e2a378a33e81f59d136"
  5358 + integrity sha1-8YpXsmp46vKKhz4qN4oz6B9Z0TY=
  5359 + dependencies:
  5360 + async "0.6.x"
  5361 + debug "0.8.x"
  5362 + fusing "0.2.x"
  5363 + githulk "0.0.x"
  5364 + npm-registry "0.1.x"
  5365 +
5137 lines-and-columns@^1.1.6: 5366 lines-and-columns@^1.1.6:
5138 version "1.1.6" 5367 version "1.1.6"
5139 resolved "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" 5368 resolved "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
@@ -5373,6 +5602,19 @@ makeerror@1.0.x: @@ -5373,6 +5602,19 @@ makeerror@1.0.x:
5373 dependencies: 5602 dependencies:
5374 tmpl "1.0.x" 5603 tmpl "1.0.x"
5375 5604
  5605 +mana@0.1.x:
  5606 + version "0.1.41"
  5607 + resolved "https://registry.npm.taobao.org/mana/download/mana-0.1.41.tgz#7cb13f73218668654229635c4fc5b17e26f93b7d"
  5608 + integrity sha1-fLE/cyGGaGVCKWNcT8Wxfib5O30=
  5609 + dependencies:
  5610 + assign ">=0.1.7"
  5611 + back "1.0.x"
  5612 + diagnostics "1.0.x"
  5613 + eventemitter3 "1.2.x"
  5614 + fusing "1.0.x"
  5615 + millisecond "0.1.x"
  5616 + request "2.x.x"
  5617 +
5376 map-age-cleaner@^0.1.1: 5618 map-age-cleaner@^0.1.1:
5377 version "0.1.3" 5619 version "0.1.3"
5378 resolved "https://registry.npm.taobao.org/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" 5620 resolved "https://registry.npm.taobao.org/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
@@ -5722,6 +5964,11 @@ micromatch@^4.0.2: @@ -5722,6 +5964,11 @@ micromatch@^4.0.2:
5722 braces "^3.0.1" 5964 braces "^3.0.1"
5723 picomatch "^2.0.5" 5965 picomatch "^2.0.5"
5724 5966
  5967 +millisecond@0.1.x:
  5968 + version "0.1.2"
  5969 + resolved "https://registry.npm.taobao.org/millisecond/download/millisecond-0.1.2.tgz#6cc5ad386241cab8e78aff964f87028eec92dac5"
  5970 + integrity sha1-bMWtOGJByrjniv+WT4cCjuyS2sU=
  5971 +
5725 mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": 5972 mime-db@1.43.0, "mime-db@>= 1.43.0 < 2":
5726 version "1.43.0" 5973 version "1.43.0"
5727 resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.43.0.tgz?cache=0&sync_timestamp=1578281104943&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" 5974 resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.43.0.tgz?cache=0&sync_timestamp=1578281104943&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
@@ -5799,7 +6046,7 @@ mixin-deep@^1.2.0: @@ -5799,7 +6046,7 @@ mixin-deep@^1.2.0:
5799 for-in "^1.0.2" 6046 for-in "^1.0.2"
5800 is-extendable "^1.0.1" 6047 is-extendable "^1.0.1"
5801 6048
5802 -mkdirp@^0.5.1: 6049 +mkdirp@^0.5.1, mkdirp@^0.5.4:
5803 version "0.5.5" 6050 version "0.5.5"
5804 resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 6051 resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
5805 integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8= 6052 integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=
@@ -5944,6 +6191,17 @@ normalize-path@^3.0.0: @@ -5944,6 +6191,17 @@ normalize-path@^3.0.0:
5944 resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 6191 resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
5945 integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= 6192 integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=
5946 6193
  6194 +npm-registry@0.1.x, npm-registry@^0.1.13:
  6195 + version "0.1.13"
  6196 + resolved "https://registry.npm.taobao.org/npm-registry/download/npm-registry-0.1.13.tgz#9e5d8b2fdfc1ab5990d47f7debbe231d79a9e822"
  6197 + integrity sha1-nl2LL9/Bq1mQ1H99674jHXmp6CI=
  6198 + dependencies:
  6199 + debug "0.8.x"
  6200 + extract-github "0.0.x"
  6201 + licenses "0.0.x"
  6202 + mana "0.1.x"
  6203 + semver "2.2.x"
  6204 +
5947 npm-run-path@^2.0.0: 6205 npm-run-path@^2.0.0:
5948 version "2.0.2" 6206 version "2.0.2"
5949 resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 6207 resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
@@ -6364,6 +6622,11 @@ path-type@^4.0.0: @@ -6364,6 +6622,11 @@ path-type@^4.0.0:
6364 resolved "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 6622 resolved "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
6365 integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= 6623 integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=
6366 6624
  6625 +pend@~1.2.0:
  6626 + version "1.2.0"
  6627 + resolved "https://registry.npm.taobao.org/pend/download/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
  6628 + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
  6629 +
6367 performance-now@^2.1.0: 6630 performance-now@^2.1.0:
6368 version "2.1.0" 6631 version "2.1.0"
6369 resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 6632 resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
@@ -6459,6 +6722,13 @@ posix-character-classes@^0.1.0: @@ -6459,6 +6722,13 @@ posix-character-classes@^0.1.0:
6459 resolved "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 6722 resolved "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
6460 integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= 6723 integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
6461 6724
  6725 +predefine@0.1.x:
  6726 + version "0.1.2"
  6727 + resolved "https://registry.npm.taobao.org/predefine/download/predefine-0.1.2.tgz#2aa92b4496bc1f8554e43a45f76bfbe50d33d37f"
  6728 + integrity sha1-KqkrRJa8H4VU5DpF92v75Q0z038=
  6729 + dependencies:
  6730 + extendible "0.1.x"
  6731 +
6462 prelude-ls@~1.1.2: 6732 prelude-ls@~1.1.2:
6463 version "1.1.2" 6733 version "1.1.2"
6464 resolved "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 6734 resolved "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
@@ -6518,7 +6788,7 @@ promise@^7.1.1: @@ -6518,7 +6788,7 @@ promise@^7.1.1:
6518 dependencies: 6788 dependencies:
6519 asap "~2.0.3" 6789 asap "~2.0.3"
6520 6790
6521 -prompts@^2.0.1: 6791 +prompts@^2.0.1, prompts@^2.3.0:
6522 version "2.3.2" 6792 version "2.3.2"
6523 resolved "https://registry.npm.taobao.org/prompts/download/prompts-2.3.2.tgz?cache=0&sync_timestamp=1584535655273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprompts%2Fdownload%2Fprompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" 6793 resolved "https://registry.npm.taobao.org/prompts/download/prompts-2.3.2.tgz?cache=0&sync_timestamp=1584535655273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprompts%2Fdownload%2Fprompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068"
6524 integrity sha1-SAVy2J7POVZtK9P+LJ/Mt8TAsGg= 6794 integrity sha1-SAVy2J7POVZtK9P+LJ/Mt8TAsGg=
@@ -6577,6 +6847,11 @@ query-string@^6.11.1: @@ -6577,6 +6847,11 @@ query-string@^6.11.1:
6577 split-on-first "^1.0.0" 6847 split-on-first "^1.0.0"
6578 strict-uri-encode "^2.0.0" 6848 strict-uri-encode "^2.0.0"
6579 6849
  6850 +querystringify@^2.1.1:
  6851 + version "2.1.1"
  6852 + resolved "https://registry.npm.taobao.org/querystringify/download/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
  6853 + integrity sha1-YOWl/WSn+L+k0qsu1v30yFutFU4=
  6854 +
6580 quick-lru@^1.0.0: 6855 quick-lru@^1.0.0:
6581 version "1.1.0" 6856 version "1.1.0"
6582 resolved "https://registry.npm.taobao.org/quick-lru/download/quick-lru-1.1.0.tgz?cache=0&sync_timestamp=1586159910337&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquick-lru%2Fdownload%2Fquick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" 6857 resolved "https://registry.npm.taobao.org/quick-lru/download/quick-lru-1.1.0.tgz?cache=0&sync_timestamp=1586159910337&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquick-lru%2Fdownload%2Fquick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
@@ -6645,6 +6920,14 @@ react-native-iphone-x-helper@^1.2.1: @@ -6645,6 +6920,14 @@ react-native-iphone-x-helper@^1.2.1:
6645 resolved "https://registry.npm.taobao.org/react-native-iphone-x-helper/download/react-native-iphone-x-helper-1.2.1.tgz#645e2ffbbb49e80844bb4cbbe34a126fda1e6772" 6920 resolved "https://registry.npm.taobao.org/react-native-iphone-x-helper/download/react-native-iphone-x-helper-1.2.1.tgz#645e2ffbbb49e80844bb4cbbe34a126fda1e6772"
6646 integrity sha1-ZF4v+7tJ6AhEu0y740oSb9oeZ3I= 6921 integrity sha1-ZF4v+7tJ6AhEu0y740oSb9oeZ3I=
6647 6922
  6923 +react-native-progress@^4.1.2:
  6924 + version "4.1.2"
  6925 + resolved "https://registry.npm.taobao.org/react-native-progress/download/react-native-progress-4.1.2.tgz#ffb2264ddfeba409c730e36a9791bb7bbe07a00d"
  6926 + integrity sha1-/7ImTd/rpAnHMONql5G7e74HoA0=
  6927 + dependencies:
  6928 + "@react-native-community/art" "^1.1.2"
  6929 + prop-types "^15.7.2"
  6930 +
6648 react-native-ratings@^6.3.0: 6931 react-native-ratings@^6.3.0:
6649 version "6.5.0" 6932 version "6.5.0"
6650 resolved "https://registry.npm.taobao.org/react-native-ratings/download/react-native-ratings-6.5.0.tgz#a1606ccba3c5b54eec8e6cfa4765a45cf0e4ab8d" 6933 resolved "https://registry.npm.taobao.org/react-native-ratings/download/react-native-ratings-6.5.0.tgz#a1606ccba3c5b54eec8e6cfa4765a45cf0e4ab8d"
@@ -6691,6 +6974,15 @@ react-native-vector-icons@^6.6.0: @@ -6691,6 +6974,15 @@ react-native-vector-icons@^6.6.0:
6691 prop-types "^15.6.2" 6974 prop-types "^15.6.2"
6692 yargs "^13.2.2" 6975 yargs "^13.2.2"
6693 6976
  6977 +react-native-webview@9.1.1:
  6978 + version "9.1.1"
  6979 + resolved "https://registry.npm.taobao.org/react-native-webview/download/react-native-webview-9.1.1.tgz#8a83da99650093aee192506704084f850face482"
  6980 + integrity sha1-ioPamWUAk67hklBnBAhPhQ+s5II=
  6981 + dependencies:
  6982 + escape-string-regexp "2.0.0"
  6983 + invariant "2.2.4"
  6984 + rnpm-plugin-windows "^0.5.1-0"
  6985 +
6694 react-native@0.62.1: 6986 react-native@0.62.1:
6695 version "0.62.1" 6987 version "0.62.1"
6696 resolved "https://registry.npm.taobao.org/react-native/download/react-native-0.62.1.tgz#fd0324bedf4c3237c928de582c29403f1e46ea80" 6988 resolved "https://registry.npm.taobao.org/react-native/download/react-native-0.62.1.tgz#fd0324bedf4c3237c928de582c29403f1e46ea80"
@@ -6969,7 +7261,7 @@ request-promise-native@^1.0.5: @@ -6969,7 +7261,7 @@ request-promise-native@^1.0.5:
6969 stealthy-require "^1.1.1" 7261 stealthy-require "^1.1.1"
6970 tough-cookie "^2.3.3" 7262 tough-cookie "^2.3.3"
6971 7263
6972 -request@^2.87.0: 7264 +request@2.x.x, request@^2.87.0, request@^2.88.0:
6973 version "2.88.2" 7265 version "2.88.2"
6974 resolved "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 7266 resolved "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
6975 integrity sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM= 7267 integrity sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=
@@ -7010,6 +7302,11 @@ require-main-filename@^2.0.0: @@ -7010,6 +7302,11 @@ require-main-filename@^2.0.0:
7010 resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 7302 resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
7011 integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs= 7303 integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=
7012 7304
  7305 +requires-port@^1.0.0:
  7306 + version "1.0.0"
  7307 + resolved "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
  7308 + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
  7309 +
7013 resolve-cwd@^2.0.0: 7310 resolve-cwd@^2.0.0:
7014 version "2.0.0" 7311 version "2.0.0"
7015 resolved "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" 7312 resolved "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
@@ -7109,6 +7406,20 @@ rimraf@~2.2.6: @@ -7109,6 +7406,20 @@ rimraf@~2.2.6:
7109 resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.2.8.tgz?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" 7406 resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.2.8.tgz?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
7110 integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= 7407 integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=
7111 7408
  7409 +rnpm-plugin-windows@^0.5.1-0:
  7410 + version "0.5.1-0"
  7411 + resolved "https://registry.npm.taobao.org/rnpm-plugin-windows/download/rnpm-plugin-windows-0.5.1-0.tgz#9ffdd38653c6024c538a98a1046a37625d56eddb"
  7412 + integrity sha1-n/3ThlPGAkxTipihBGo3Yl1W7ds=
  7413 + dependencies:
  7414 + chalk "^1.1.3"
  7415 + extract-zip "^1.6.7"
  7416 + fs-extra "^7.0.1"
  7417 + npm-registry "^0.1.13"
  7418 + prompts "^2.3.0"
  7419 + request "^2.88.0"
  7420 + semver "^6.1.1"
  7421 + valid-url "^1.0.9"
  7422 +
7112 rsvp@^4.8.4: 7423 rsvp@^4.8.4:
7113 version "4.8.5" 7424 version "4.8.5"
7114 resolved "https://registry.npm.taobao.org/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" 7425 resolved "https://registry.npm.taobao.org/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
@@ -7212,7 +7523,12 @@ semver-regex@^2.0.0: @@ -7212,7 +7523,12 @@ semver-regex@^2.0.0:
7212 resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 7523 resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
7213 integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= 7524 integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=
7214 7525
7215 -semver@6.3.0, semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: 7526 +semver@2.2.x:
  7527 + version "2.2.1"
  7528 + resolved "https://registry.npm.taobao.org/semver/download/semver-2.2.1.tgz?cache=0&sync_timestamp=1586534511518&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-2.2.1.tgz#7941182b3ffcc580bff1c17942acdf7951c0d213"
  7529 + integrity sha1-eUEYKz/8xYC/8cF5QqzfeVHA0hM=
  7530 +
  7531 +semver@6.3.0, semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
7216 version "6.3.0" 7532 version "6.3.0"
7217 resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 7533 resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
7218 integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= 7534 integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=
@@ -7872,6 +8188,11 @@ text-extensions@^1.0.0: @@ -7872,6 +8188,11 @@ text-extensions@^1.0.0:
7872 resolved "https://registry.npm.taobao.org/text-extensions/download/text-extensions-1.9.0.tgz?cache=0&sync_timestamp=1581859528571&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftext-extensions%2Fdownload%2Ftext-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" 8188 resolved "https://registry.npm.taobao.org/text-extensions/download/text-extensions-1.9.0.tgz?cache=0&sync_timestamp=1581859528571&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftext-extensions%2Fdownload%2Ftext-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
7873 integrity sha1-GFPkX+45yUXOb2w2stZZtaq8KiY= 8189 integrity sha1-GFPkX+45yUXOb2w2stZZtaq8KiY=
7874 8190
  8191 +text-hex@0.0.x:
  8192 + version "0.0.0"
  8193 + resolved "https://registry.npm.taobao.org/text-hex/download/text-hex-0.0.0.tgz#578fbc85a6a92636e42dd17b41d0218cce9eb2b3"
  8194 + integrity sha1-V4+8haapJjbkLdF7QdAhjM6esrM=
  8195 +
7875 text-table@^0.2.0: 8196 text-table@^0.2.0:
7876 version "0.2.0" 8197 version "0.2.0"
7877 resolved "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 8198 resolved "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@@ -8141,6 +8462,14 @@ urix@^0.1.0: @@ -8141,6 +8462,14 @@ urix@^0.1.0:
8141 resolved "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 8462 resolved "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
8142 integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= 8463 integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
8143 8464
  8465 +url-parse@^1.4.7:
  8466 + version "1.4.7"
  8467 + resolved "https://registry.npm.taobao.org/url-parse/download/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
  8468 + integrity sha1-qKg1NejACjFuQDpdtKwbm4U64ng=
  8469 + dependencies:
  8470 + querystringify "^2.1.1"
  8471 + requires-port "^1.0.0"
  8472 +
8144 use-subscription@^1.0.0, use-subscription@^1.4.0: 8473 use-subscription@^1.0.0, use-subscription@^1.4.0:
8145 version "1.4.1" 8474 version "1.4.1"
8146 resolved "https://registry.npm.taobao.org/use-subscription/download/use-subscription-1.4.1.tgz#edcbcc220f1adb2dd4fa0b2f61b6cc308e620069" 8475 resolved "https://registry.npm.taobao.org/use-subscription/download/use-subscription-1.4.1.tgz#edcbcc220f1adb2dd4fa0b2f61b6cc308e620069"
@@ -8183,6 +8512,11 @@ v8-compile-cache@^2.0.3: @@ -8183,6 +8512,11 @@ v8-compile-cache@^2.0.3:
8183 resolved "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" 8512 resolved "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
8184 integrity sha1-4U3jezGm0ZT1aQ1n78Tn9vxqsw4= 8513 integrity sha1-4U3jezGm0ZT1aQ1n78Tn9vxqsw4=
8185 8514
  8515 +valid-url@^1.0.9:
  8516 + version "1.0.9"
  8517 + resolved "https://registry.npm.taobao.org/valid-url/download/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200"
  8518 + integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=
  8519 +
8186 validate-npm-package-license@^3.0.1: 8520 validate-npm-package-license@^3.0.1:
8187 version "3.0.4" 8521 version "3.0.4"
8188 resolved "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 8522 resolved "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
@@ -8431,7 +8765,7 @@ xregexp@^4.3.0: @@ -8431,7 +8765,7 @@ xregexp@^4.3.0:
8431 dependencies: 8765 dependencies:
8432 "@babel/runtime-corejs3" "^7.8.3" 8766 "@babel/runtime-corejs3" "^7.8.3"
8433 8767
8434 -xtend@~4.0.1: 8768 +xtend@^4.0.0, xtend@~4.0.1:
8435 version "4.0.2" 8769 version "4.0.2"
8436 resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 8770 resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
8437 integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= 8771 integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=
@@ -8559,3 +8893,11 @@ yargs@^14.2.0: @@ -8559,3 +8893,11 @@ yargs@^14.2.0:
8559 which-module "^2.0.0" 8893 which-module "^2.0.0"
8560 y18n "^4.0.0" 8894 y18n "^4.0.0"
8561 yargs-parser "^15.0.1" 8895 yargs-parser "^15.0.1"
  8896 +
  8897 +yauzl@^2.10.0:
  8898 + version "2.10.0"
  8899 + resolved "https://registry.npm.taobao.org/yauzl/download/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
  8900 + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
  8901 + dependencies:
  8902 + buffer-crc32 "~0.2.3"
  8903 + fd-slicer "~1.1.0"