Commit 54ef480e by zeven

基本代码重构完成

parent f07c3001
module.exports = { module.exports = {
root: true, root: true,
extends: '@react-native-community', extends: '@react-native-community',
rules: {
"react-native/no-inline-styles": 0,
"no-eval": 0
}
}; };
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
* @flow strict-local
*/
import React from 'react';
import {
SafeAreaView,
StyleSheet,
ScrollView,
View,
Text,
StatusBar,
} from 'react-native';
import {
Header,
LearnMoreLinks,
Colors,
DebugInstructions,
ReloadInstructions,
} from 'react-native/Libraries/NewAppScreen';
const App: () => React$Node = () => {
return (
<>
<StatusBar barStyle="dark-content" />
<SafeAreaView>
<ScrollView
contentInsetAdjustmentBehavior="automatic"
style={styles.scrollView}>
<Header />
{global.HermesInternal == null ? null : (
<View style={styles.engine}>
<Text style={styles.footer}>Engine: Hermes</Text>
</View>
)}
<View style={styles.body}>
<View style={styles.sectionContainer}>
<Text style={styles.sectionTitle}>Step One</Text>
<Text style={styles.sectionDescription}>
Edit <Text style={styles.highlight}>App.js</Text> to change this
screen and then come back to see your edits.
</Text>
</View>
<View style={styles.sectionContainer}>
<Text style={styles.sectionTitle}>See Your Changes</Text>
<Text style={styles.sectionDescription}>
<ReloadInstructions />
</Text>
</View>
<View style={styles.sectionContainer}>
<Text style={styles.sectionTitle}>Debug</Text>
<Text style={styles.sectionDescription}>
<DebugInstructions />
</Text>
</View>
<View style={styles.sectionContainer}>
<Text style={styles.sectionTitle}>Learn More</Text>
<Text style={styles.sectionDescription}>
Read the docs to discover what to do next:
</Text>
</View>
<LearnMoreLinks />
</View>
</ScrollView>
</SafeAreaView>
</>
);
};
const styles = StyleSheet.create({
scrollView: {
backgroundColor: Colors.lighter,
},
engine: {
position: 'absolute',
right: 0,
},
body: {
backgroundColor: Colors.white,
},
sectionContainer: {
marginTop: 32,
paddingHorizontal: 24,
},
sectionTitle: {
fontSize: 24,
fontWeight: '600',
color: Colors.black,
},
sectionDescription: {
marginTop: 8,
fontSize: 18,
fontWeight: '400',
color: Colors.dark,
},
highlight: {
fontWeight: '700',
},
footer: {
color: Colors.dark,
fontSize: 12,
fontWeight: '600',
padding: 4,
paddingRight: 12,
textAlign: 'right',
},
});
export default App;
module.exports = { module.exports = {
presets: ['module:metro-react-native-babel-preset'], presets: ['module:metro-react-native-babel-preset'],
plugins: [
['@babel/plugin-proposal-decorators', {legacy: true}],
['import', {libraryName: 'antd-mobile'}],
],
}; };
...@@ -3,7 +3,12 @@ ...@@ -3,7 +3,12 @@
*/ */
import {AppRegistry} from 'react-native'; import {AppRegistry} from 'react-native';
import App from './App'; import App from './src/App';
import {name as appName} from './app.json'; import {name as appName} from './app.json';
console.ignoredYellowBox = [
'Please update the following components: t',
'Require cycle: node_modules/redux-saga',
];
AppRegistry.registerComponent(appName, () => App); AppRegistry.registerComponent(appName, () => App);
{ {
"name": "ZmFaceCounter", "name": "zm-face-counter",
"version": "0.0.1", "version": "0.0.1",
"private": true, "private": true,
"scripts": { "scripts": {
"android": "react-native run-android", "android": "react-native run-android",
"ios": "react-native run-ios",
"start": "react-native start", "start": "react-native start",
"test": "jest", "test": "jest",
"lint": "eslint ." "lint": "eslint --ext .js index.js src",
"apk": "cd android && ./gradlew assembleRelease && cp ./app/build/outputs/apk/release/app-release.apk ../release.apk"
}, },
"pre-commit": [
"lint"
],
"dependencies": { "dependencies": {
"@react-native-community/async-storage": "1.11.0",
"antd-mobile-rn": "^2.3.3",
"axios": "0.19.2",
"dva-core": "2.0.2",
"moment": "2.27.0",
"qs": "6.9.4",
"react": "16.11.0", "react": "16.11.0",
"react-native": "0.62.2" "react-native": "0.62.2",
"react-native-keyevent": "0.2.8",
"react-native-qrcode-svg": "6.0.6",
"react-native-svg": "12.1.0",
"react-native-swiper": "1.6.0",
"react-native-vector-icons": "6.6.0",
"react-redux": "7.2.0",
"redux": "4.0.5",
"socket.io-client": "2.0.4",
"throttle-debounce": "2.2.1"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.6.2", "@babel/core": "7.6.2",
"@babel/runtime": "^7.6.2", "@babel/plugin-proposal-decorators": "7.10.3",
"@react-native-community/eslint-config": "^0.0.5", "@babel/runtime": "7.6.2",
"babel-jest": "^24.9.0", "@react-native-community/eslint-config": "0.0.5",
"eslint": "^6.5.1", "babel-jest": "24.9.0",
"jest": "^24.9.0", "babel-plugin-import": "1.13.0",
"metro-react-native-babel-preset": "^0.58.0", "babel-plugin-transform-decorators-legacy": "1.3.5",
"eslint": "6.5.1",
"jest": "24.9.0",
"metro-react-native-babel-preset": "0.58.0",
"pre-commit": "1.2.2",
"react-test-renderer": "16.11.0" "react-test-renderer": "16.11.0"
}, },
"jest": { "jest": {
......
import React from 'react';
import {View, Dimensions} from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import {connect} from 'react-redux';
import qs from 'qs';
import axios from 'axios';
import io from 'socket.io-client';
import Toast from './components/Toast';
import router from './router';
import models from './models';
import dva from './utils/dva';
import Restart from './utils/Restart';
import {counterInterval} from './utils/authInterval';
import {host} from './utils/config';
const {width: _width, height: _height} = Dimensions.get('window');
// axios.defaults.baseURL = host; // 配置接口地址
window.qs = qs;
window.axios = axios;
axios.defaults.headers.post['Content-Type'] =
'application/x-www-form-urlencoded;charset=UTF-8';
axios.interceptors.request.use(config => {
// 请求拦截器,自动添加token
if (window.auth) {
// 门店Token
config.headers.common.Authorization = `Bearer ${window.auth.token}`;
}
return config;
});
axios.interceptors.response.use(res => {
// 请求拦截器,自动添加token
if (res.data.code < 0) {
Toast.fail(res.data.msg);
}
return res;
});
const dvaApp = dva({
models,
onError(e) {
console.warn(e);
},
});
const delay = t => new Promise(resolve => setTimeout(resolve, t));
window.retryTimeout = 15000; // 重试间隔时间
@connect()
class App extends React.Component {
state = {
ready: false,
curRoute: 'auth',
};
async UNSAFE_componentWillMount() {
window.dispatch = this.props.dispatch;
const HOST = await AsyncStorage.getItem('HOST');
axios.defaults.baseURL = HOST || host; // 配置接口地址
const auth = await AsyncStorage.getItem('auth');
this.device = await AsyncStorage.getItem('login'); // 设备类型
if (auth) {
await this.refresh();
} else {
window.socket =
window.socket ||
io(axios.defaults.baseURL, {query: {client: this.device}});
this.listen();
}
this.setState({ready: true});
}
listen = () => {
const {dispatch} = this.props;
window.socket.on('connect', () => {
window.socketDisconnected = false; // 重新连接
dispatch({type: 'admin/setSocket', socket: window.socket.id});
});
window.socket.on('disconnect', () => {
window.socket.connect();
});
if (!window.socket.hasListeners('restart')) {
window.socket.on('restart', Restart.restartApp);
}
if (!window.socket.hasListeners('version')) {
window.socket.on('version', () => {
dispatch({type: 'admin/version'});
});
}
};
refresh = async () => {
const {dispatch} = this.props;
const res = await dispatch({type: 'admin/auth'});
if (res && res.code === 1) {
// 门店助手授权登录成功
if (window.socket) {
window.socket.disconnect();
}
if (window.authInterval) {
clearInterval(window.authInterval);
}
if (window.socketInterval) {
clearInterval(window.socketInterval);
}
if (this.device === 'counter') {
// 收银设备
let curRoute = 'home';
if (_height > _width) {
curRoute = 'vertical';
}
await this.setState({curRoute});
dispatch({type: 'admin/version'});
dispatch({type: 'goods/getBags'});
} else if (this.device === 'face') {
// 人脸设备
await this.setState({curRoute: 'face'});
}
await counterInterval(dispatch, res.data.expiresIn);
this.listen();
} else {
await delay(window.retryTimeout);
await this.refresh();
}
};
render() {
const {ready, curRoute} = this.state;
const route = Object.keys(router).filter(name => curRoute === name)[0];
const Component = router[route];
return ready ? <Component route={curRoute} /> : <View />;
}
}
export default dvaApp.start(<App />);
import React from 'react';
import {View, Text} from 'react-native';
import Icon from 'react-native-vector-icons/Ionicons';
import Touch from '../components/Touch';
import {colors} from '../utils/common';
import NP from '../utils/np';
const itemFontsize = 18;
export default class GoodsItem extends React.Component {
render() {
let {item, index, numRemove, numAdd, numChange, removeIndex} = this.props;
return (
<View
style={{flexDirection: 'row', alignItems: 'center', height: 55}}
key={index}>
<Text
style={{
width: 38,
fontSize: itemFontsize,
color: colors.textXSActive,
paddingLeft: 8,
}}>
{index + 1}
</Text>
<View
style={{
flex: 1,
flexDirection: 'row',
alignItems: 'center',
}}>
<Text
numberOfLines={1}
style={{
flex: 0.4,
fontSize: itemFontsize,
color: item.weight ? colors.textXSActive : '#FC4000',
}}>
{item.spec ? `${item.name}(${item.spec})` : item.name}
</Text>
{item.price ? (
<View
style={{
flex: 0.25,
justifyContent: 'flex-end',
alignItems: 'flex-end',
flexDirection: 'row',
}}>
<Text
style={{
fontSize: itemFontsize - 2,
textDecorationLine: 'line-through',
}}>
{NP.round(item.prePrice, 2).toFixed(2)}/
<Text
style={{
fontSize: itemFontsize - 2,
}}>
{item.unit}
</Text>
</Text>
<Text
style={{fontSize: itemFontsize, color: colors.textXSActive}}>
{NP.round(item.price, 2).toFixed(2)}/
<Text
style={{
fontSize: itemFontsize,
}}>
{item.unit}
</Text>
</Text>
</View>
) : (
<Text
style={{
flex: 0.25,
fontSize: itemFontsize,
textAlign: 'right',
color: colors.textXSActive,
}}>
{NP.round(item.prePrice, 2).toFixed(2)}/{item.unit}
</Text>
)}
<View
style={{
flex: 0.2,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'flex-end',
}}>
{item.numChange ? (
<Touch
style={{
height: 50,
justifyContent: 'center',
alignItems: 'center',
}}
onPress={() => numRemove(item.num, index)}>
<Icon
name="ios-remove-circle"
color={item.num === 1 ? '#909090' : '#00c670'}
size={30}
/>
</Touch>
) : (
<View style={{height: 50, width: 25}} />
)}
<Touch
style={{
width: 40,
height: 50,
justifyContent: 'center',
alignItems: 'center',
}}
onPress={() => item.numChange && numChange(index)}>
<Text
style={{
fontSize: itemFontsize,
minWidth: 30,
textAlign: 'center',
color: colors.textXSActive,
}}>
{item.num}
</Text>
</Touch>
{item.numChange ? (
<Touch
style={{
height: 50,
justifyContent: 'center',
alignItems: 'center',
}}
onPress={() => numAdd(item.num, index)}>
<Icon name="ios-add-circle" color="#00c670" size={30} />
</Touch>
) : (
<View style={{height: 50, width: 25}} />
)}
</View>
{item.price ? (
<Text
style={{
fontSize: itemFontsize,
flex: 0.15,
textAlign: 'right',
color: colors.textXSActive,
}}>
{NP.round(item.price * item.num, 2).toFixed(2)}
</Text>
) : (
<Text
style={{
fontSize: itemFontsize,
flex: 0.15,
textAlign: 'right',
color: colors.textXSActive,
}}>
{NP.round(item.prePrice * item.num, 2).toFixed(2)}
</Text>
)}
</View>
<Touch
onPress={() => removeIndex(index)}
style={{width: 50, alignItems: 'center'}}>
<View
style={{
height: 60,
width: 40,
justifyContent: 'center',
alignItems: 'center',
}}>
<Icon name="ios-close-circle" size={28} color={colors.bg} />
</View>
</Touch>
</View>
);
}
}
import React from 'react';
import {View, TextInput, Text} from 'react-native';
import Icon from 'react-native-vector-icons/Ionicons';
import {colors, font} from '../utils/common';
import Touch from './Touch';
import Modal from './Modal';
import ModalStyles from './Modal/styles';
const mStyles = {
...ModalStyles,
innerContainer: {
...ModalStyles.innerContainer,
width: 777,
},
header: {
...ModalStyles.header,
fontSize: font.title,
},
};
const keyboard = [
{up: '1', down: '1'},
{up: '2', down: '2'},
{up: '3', down: '3'},
{up: '4', down: '4'},
{up: '5', down: '5'},
{up: '6', down: '6'},
{up: '7', down: '7'},
{up: '8', down: '8'},
{up: '9', down: '9'},
{up: '0', down: '0'},
{up: 'Q', down: 'q'},
{up: 'W', down: 'w'},
{up: 'E', down: 'e'},
{up: 'R', down: 'r'},
{up: 'T', down: 't'},
{up: 'Y', down: 'y'},
{up: 'U', down: 'u'},
{up: 'I', down: 'i'},
{up: 'O', down: 'o'},
{up: 'P', down: 'p'},
{up: 'A', down: 'a'},
{up: 'S', down: 's'},
{up: 'D', down: 'd'},
{up: 'F', down: 'f'},
{up: 'G', down: 'g'},
{up: 'H', down: 'h'},
{up: 'J', down: 'j'},
{up: 'K', down: 'k'},
{up: 'L', down: 'l'},
{up: 'tran', down: 'tran'},
{up: 'Z', down: 'z'},
{up: 'X', down: 'x'},
{up: 'C', down: 'c'},
{up: 'V', down: 'v'},
{up: 'B', down: 'b'},
{up: 'N', down: 'n'},
{up: 'M', down: 'm'},
{up: 'del', down: 'del'},
];
export default class KeyboardModal extends React.Component {
constructor(props) {
super(props);
this.state = {
caseUp: false,
value: '',
};
}
getKeyboard = () => {
let {caseUp} = this.state;
let keyboard1 = keyboard.slice(0, 10);
let keyboard2 = keyboard.slice(10, 20);
let keyboard3 = keyboard.slice(20, 29);
let keyboard4 = keyboard.slice(29, 38);
return (
<View style={{width: 667, marginLeft: 40}}>
<View style={styles.keyRow}>
{keyboard1.map((item, index) => (
<Touch
style={styles.keyTouch}
key={index}
onPress={() => this.pressKey(index)}>
<Text style={styles.keyUnit}>{item.up}</Text>
</Touch>
))}
</View>
<View style={styles.keyRow}>
{keyboard2.map((item, index) => (
<Touch
style={styles.keyTouch}
key={index}
onPress={() => this.pressKey(index + 10)}>
<Text style={styles.keyUnit}>{caseUp ? item.up : item.down}</Text>
</Touch>
))}
</View>
<View style={styles.keyRow}>
{keyboard3.map((item, index) => (
<Touch
style={styles.keyTouch}
key={index}
onPress={() => this.pressKey(index + 20)}>
<Text style={styles.keyUnit}>{caseUp ? item.up : item.down}</Text>
</Touch>
))}
</View>
<View style={styles.keyRow}>
{keyboard4.map((item, index) => {
if (index === 0) {
return (
<Touch
style={[styles.keyTouch, {width: 60, marginRight: 15}]}
key={index}
onPress={() => this.pressKey(index + 29)}>
<Icon
name={caseUp ? 'md-arrow-round-down' : 'md-arrow-round-up'}
size={30}
/>
</Touch>
);
} else if (index === 8) {
return (
<Touch
style={[styles.keyTouch, {width: 60, marginLeft: 15}]}
key={index}
onPress={() => this.pressKey(index + 29)}>
<Icon name="md-backspace" size={30} />
</Touch>
);
}
return (
<Touch
style={styles.keyTouch}
key={index}
onPress={() => this.pressKey(index + 29)}>
<Text style={styles.keyUnit}>
{caseUp ? item.up : item.down}
</Text>
</Touch>
);
})}
</View>
</View>
);
};
pressKey = index => {
let {value} = this.state;
if (index === 29) {
this.setState({
caseUp: !this.state.caseUp,
});
} else if (index === 37) {
value = value.substring(0, value.length - 1);
this.setState({value});
} else {
value += this.state.caseUp ? keyboard[index].up : keyboard[index].down;
this.setState({value});
}
};
render() {
const {title, visible, onSubmit, onClose} = this.props;
const {value} = this.state;
return (
<Modal
styles={mStyles}
visible={visible}
transparent
maskClosable
onClose={onClose}
title={title}>
<View
style={{
borderTopColor: '#cccccc',
borderTopWidth: 1,
paddingVertical: 20,
}}>
<View
style={{
width: 777,
height: 60,
justifyContent: 'center',
position: 'relative',
}}>
<TextInput
autoFocus
value={value}
style={{width: 667, fontSize: font.textActive, marginLeft: 40}}
onSubmitEditing={() => onSubmit(value)}
/>
<Touch
onPress={() => this.setState({value: ''})}
style={{position: 'absolute', right: 82}}>
<Icon name="ios-close" size={40} color="#D1D1D1" />
</Touch>
</View>
{this.getKeyboard()}
<View
style={{
flexDirection: 'row',
justifyContent: 'center',
marginTop: 30,
}}>
<Touch
onPress={onClose}
style={{
width: 100,
height: 50,
justifyContent: 'center',
alignItems: 'center',
borderWidth: 1,
borderColor: '#cccccc',
marginRight: 30,
borderRadius: 5,
}}>
<Text style={{color: '#2B2B2B', fontSize: font.textS}}>取消</Text>
</Touch>
<Touch
onPress={() => onSubmit(value)}
style={{
width: 100,
height: 50,
backgroundColor: '#E3430F',
justifyContent: 'center',
alignItems: 'center',
borderWidth: 1,
borderColor: '#E3430F',
borderRadius: 5,
}}>
<Text style={{color: '#ffffff', fontSize: font.textS}}>确定</Text>
</Touch>
</View>
</View>
</Modal>
);
}
}
const styles = {
keyRow: {
flexDirection: 'row',
justifyContent: 'center',
marginTop: 15,
},
keyTouch: {
width: 60,
height: 60,
justifyContent: 'center',
alignItems: 'center',
borderWidth: 1,
borderColor: '#cccccc',
borderRadius: 5,
marginHorizontal: 5,
},
keyUnit: {
fontSize: font.textActive,
color: colors.text,
},
};
import React from 'react';
import {Image, PanResponder, View, Text} from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import {connect} from 'react-redux';
import moment from 'moment';
import {width} from '../utils/screen';
import {colors} from '../utils/common';
import Modal from './Modal';
import Toast from './Toast';
import Touch from './Touch';
import {counterInterval} from '../utils/authInterval';
import {switchQr, switchEnv} from '../utils/switchHost';
const weekdays = {
0: '周日',
1: '周一',
2: '周二',
3: '周三',
4: '周四',
5: '周五',
6: '周六',
};
@connect(({app}) => ({app}))
class Layout extends React.Component {
state = {
count: window.defaultCount,
contact: '',
maskVisible: true,
visibleActive: false,
dateInfo: `${moment().format('YYYY-M-D HH:mm')} ${
weekdays[Number(moment().day())]
}`,
};
async UNSAFE_componentWillMount() {
window.count = window.defaultCount;
window.login = this.counterLogin;
this.panResponder = PanResponder.create({
// 要求成为响应者:
onStartShouldSetPanResponder: this.handleStartShouldSetPanResponder,
});
let contact = await AsyncStorage.getItem('CONTACT');
let lock = await AsyncStorage.getItem('settingLock');
if (lock) {
this.props.dispatch({type: 'app/lock', lock});
}
this.setState({contact});
}
componentDidMount() {
this.timer = setInterval(() => {
this.setState({
dateInfo: `${moment().format('YYYY-M-D HH:mm')} ${
weekdays[Number(moment().day())]
}`,
});
}, 1000);
}
componentWillUnmount() {
clearInterval(this.timer);
}
handleStartShouldSetPanResponder = () => {
window.count = window.defaultCount;
};
showCounterLogin = async () => {
const key = await AsyncStorage.getItem('KEY');
Modal.prompt(
'门店授权',
'仲马购门店收银台授权认证',
[{text: '取消'}, {text: '登录', onPress: this.counterLogin}],
// (login, password) => console.log(`login: ${login}, password: ${password}`),
'login-password',
key,
['请填写门店标识', '请填写门店密钥'],
);
};
loginError = async msg => {
Toast.fail(msg, 1);
};
counterLogin = async (key, secret) => {
if (!key) {
await this.loginError('请输入门店标识');
return;
}
if (!secret) {
await this.loginError('请输入门店密钥');
return;
}
await Toast.loading('授权认证中');
const action = {type: 'admin/auth', key, secret, login: 'counter'};
const {dispatch} = this.props;
const res = await dispatch(action);
if (res.code === 1) {
Toast.success('授权认证成功,正在重启应用...', 2, async () => {
await counterInterval(dispatch, res.data.expiresIn, true);
});
}
};
stepOne = async () => {
await this.setState({
visibleActive: true,
});
setTimeout(() => {
this.setState({
visibleActive: false,
});
}, 3000);
};
stepTwo = () => {
let {visibleActive} = this.state;
if (visibleActive) {
this.setState({
maskVisible: false,
});
setTimeout(() => {
this.setState({
visibleActive: false,
maskVisible: true,
});
}, 5000);
}
};
render() {
const {children, app} = this.props;
let {contact, maskVisible, dateInfo, visibleActive} = this.state;
contact = contact || '未授权';
return (
<View
{...this.panResponder.panHandlers}
style={{flex: 1, backgroundColor: '#333'}}>
<View style={styles.navBar}>
<View style={{flex: 1, flexDirection: 'row', alignItems: 'center'}}>
<Image
source={require('../assets/zmgo_icon.png')}
style={styles.navLogo}
/>
<View
style={{
justifyContent: 'flex-end',
height: 80,
flex: 1,
alignItems: 'center',
}}>
<View
style={{
width: 200,
height: 40,
backgroundColor: '#000000',
alignItems: 'center',
justifyContent: 'center',
marginBottom: 1,
}}>
<Text style={{color: '#ffffff', fontSize: 16}}>{dateInfo}</Text>
</View>
</View>
</View>
<Touch
onPress={!app.lock && this.showCounterLogin}
style={{alignItems: 'center'}}>
<Image
style={{width: 325, height: 36, resizeMode: 'contain'}}
source={require('../assets/zmgo_title.png')}
/>
</Touch>
<View style={styles.navRight}>
<Touch onPress={!app.lock && switchQr}>
<Image
source={require('../assets/phone_icon.png')}
style={{
width: 36,
height: 36,
marginRight: 5,
resizeMode: 'contain',
}}
/>
</Touch>
<Touch onPress={!app.lock && switchEnv}>
<Text
style={{
color: '#F5AB61',
fontSize: 32,
fontWeight: 'bold',
marginRight: 20,
}}>
{contact}
</Text>
</Touch>
</View>
</View>
{maskVisible ? (
<View style={styles.navMask}>
<Touch
onPress={() => this.stepOne()}
style={{
width: 150,
height: 80,
backgroundColor: visibleActive ? colors.bg : 'transparent',
}}>
<View />
</Touch>
<View style={{flex: 1, alignItems: 'center'}} />
<View
style={{
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'flex-end',
}}>
<Touch
onPress={() => this.stepTwo()}
style={{width: 50, height: 80}}>
<View />
</Touch>
<View style={{opacity: 0}}>
<Text
style={{
color: '#F5AB61',
fontSize: 32,
fontWeight: 'bold',
marginRight: 20,
}}>
{contact}
</Text>
</View>
</View>
</View>
) : (
<View style={{display: 'none'}} />
)}
<View style={{flexDirection: 'row', flex: 1, zIndex: 9}}>
<View style={{flex: 1, margin: 10}}>{children}</View>
</View>
</View>
);
}
}
const styles = {
navMask: {
width,
height: 80,
position: 'absolute',
top: 0,
left: 0,
backgroundColor: 'transparent',
alignItems: 'center',
flexDirection: 'row',
},
navBar: {
width,
height: 80,
backgroundColor: colors.bg,
alignItems: 'center',
flexDirection: 'row',
},
navLogo: {
width: 81,
height: 35,
marginLeft: 15,
},
navTextL: {
color: '#ffffff',
marginLeft: 10,
fontSize: 28,
},
navRight: {
flex: 1,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'flex-end',
},
navTextR: {
color: '#ffffff',
marginRight: 20,
fontSize: 20,
},
footer: {
width: width - 20,
height: 50,
borderRadius: 3,
flexDirection: 'row',
backgroundColor: 'white',
margin: 10,
marginTop: 0,
},
contLine: {
width: 20,
backgroundColor: colors.bg,
},
navTime: {
fontSize: 16,
color: '#ffffff',
},
};
export default Layout;
import React from 'react';
import {Text, ScrollView} from 'react-native';
import Modal from 'antd-mobile-rn/lib/modal/Modal.native';
// import styles from './styles';
export type AlertButtonType = {
text: string,
onPress?: () => void,
style?: any,
};
export interface AlertContainerProps {
title: string;
content: any;
actions: Array<AlertButtonType>;
onAnimationEnd?: (visible: boolean) => void;
}
export default class AlertContainer extends React.Component<
AlertContainerProps,
any,
> {
constructor(props) {
super(props);
this.state = {
visible: true,
};
}
onClose = () => {
this.setState({
visible: false,
});
};
render() {
const {title, actions, content, onAnimationEnd} = this.props;
const footer = actions.map(button => {
const orginPress = button.onPress || function() {};
button.onPress = () => {
const res = orginPress();
if (res && res.then) {
res.then(() => {
this.onClose();
});
} else {
this.onClose();
}
};
return button;
});
return (
<Modal
// styles={styles}
bodyStyle={{alignItems: 'center'}}
transparent
title={title}
visible={this.state.visible}
footer={footer}
onAnimationEnd={onAnimationEnd}>
<ScrollView>
<Text>{content}</Text>
</ScrollView>
</Modal>
);
}
}
import React from 'react';
import Modal from 'antd-mobile-rn/lib/modal/Modal.native';
import modalStyle from 'antd-mobile-rn/lib/modal/style/index.native';
import styles from './styles';
const operationStyles = {
...styles,
innerContainer: {
...styles.innerContainer,
width: 600,
},
buttonText: {
...styles.buttonText,
alignSelf: 'center',
fontSize: 35,
},
};
export type OperationButtonType = {
text: string,
onPress?: () => void,
style?: any,
};
export interface OperationContainerProps {
actions: Array<OperationButtonType>;
onAnimationEnd?: (visible: boolean) => void;
}
export default class OperationContainer extends React.Component<
OperationContainerProps,
any,
> {
constructor(props) {
super(props);
this.state = {
visible: true,
};
}
onClose = () => {
this.setState({
visible: false,
});
};
render() {
const {actions, onAnimationEnd} = this.props;
const footer = actions.map(button => {
const orginPress = button.onPress || function() {};
button.onPress = () => {
const res = orginPress();
if (res && res.then) {
res.then(() => {
this.onClose();
});
} else {
this.onClose();
}
};
return button;
});
return (
<Modal
operation
transparent
maskClosable
styles={operationStyles}
visible={this.state.visible}
onClose={this.onClose}
onAnimationEnd={onAnimationEnd}
style={modalStyle.operationContainer}
bodyStyle={modalStyle.operationBody}
footer={footer}
/>
);
}
}
/* tslint:disable:jsx-no-multiline-js */
import React from 'react';
import {
View,
Text,
TextInput,
StyleSheet,
KeyboardAvoidingView,
} from 'react-native';
import Modal from 'antd-mobile-rn/lib/modal/Modal.native';
import promptStyle, {
IPromptStyle,
} from 'antd-mobile-rn/lib/modal/style/prompt.native';
import ModalStyles from './styles';
const styles = {
...promptStyle,
message: {
...promptStyle.message,
fontSize: 35,
marginBottom: 30,
},
input: {
...promptStyle.input,
paddingLeft: 50,
height: 80,
fontSize: 30,
},
inputLast: {
...promptStyle.inputLast,
marginBottom: 40,
},
};
export type ButtonType = {
text: string,
onPress?: () => void,
style?: any,
};
export interface PropmptContainerProps {
title: string;
type?: 'default' | 'login-password' | 'secure-text';
message?: string | null;
defaultValue?: string;
actions: Array<ButtonType>;
onAnimationEnd?: (visible: boolean) => void;
styles?: IPromptStyle;
placeholders?: string[];
}
const promptStyles = StyleSheet.create(styles);
export default class PropmptContainer extends React.Component<
PropmptContainerProps,
any,
> {
static defaultProps = {
type: 'default',
defaultValue: '',
styles: promptStyles,
};
constructor(props) {
super(props);
this.state = {
visible: true,
text: props.defaultValue,
password: props.type === 'secure-text' ? props.defaultValue : '',
};
}
onClose = () => {
this.setState({
visible: false,
});
};
onChangeText(type, value) {
this.setState({
[type]: value,
});
}
render() {
const {
title,
onAnimationEnd,
message,
type,
actions,
placeholders,
} = this.props;
// const styles = this.props.styles;
const {text, password} = this.state;
const getArgs = function(func) {
if (type === 'login-password') {
return func.apply(this, [text, password]);
} else if (type === 'secure-text') {
return func.apply(this, [password]);
}
return func.apply(this, [text]);
};
let callbacks;
if (typeof actions === 'function') {
callbacks = [
{text: '取消', style: 'cancel'},
{text: '确定', onPress: () => getArgs(actions)},
];
} else {
callbacks = actions.map(item => {
return {
text: item.text,
onPress: () => {
if (item.onPress) {
return getArgs(item.onPress);
}
},
style: item.style || {},
};
});
}
const footer = callbacks.map(button => {
const orginPress = button.onPress || function() {};
button.onPress = () => {
const res = orginPress();
if (res && res.then) {
res.then(() => {
this.onClose();
});
} else {
this.onClose();
}
};
return button;
});
const firstStyle = [styles.inputWrapper];
const lastStyle = [styles.inputWrapper];
if (type === 'login-password') {
firstStyle.push(styles.inputFirst);
lastStyle.push(styles.inputLast);
} else if (type === 'secure-text') {
lastStyle.push(styles.inputFirst);
lastStyle.push(styles.inputLast);
} else {
firstStyle.push(styles.inputFirst);
firstStyle.push(styles.inputLast);
}
return (
<Modal
styles={ModalStyles}
transparent
title={title}
visible={this.state.visible}
onClose={this.onClose}
footer={footer}
onAnimationEnd={onAnimationEnd}>
<KeyboardAvoidingView behavior="padding">
{message && message.length && (
<Text style={styles.message}>{message}</Text>
)}
<View style={styles.inputGroup}>
{type !== 'secure-text' && (
<View style={firstStyle}>
<TextInput
autoFocus
onChangeText={value => {
this.onChangeText('text', value);
}}
value={this.state.text}
style={styles.input}
underlineColorAndroid="transparent"
placeholder={placeholders[0]}
placeholderTextColor="#aaa"
/>
</View>
)}
{(type === 'secure-text' || type === 'login-password') && (
<View style={lastStyle}>
<TextInput
autoFocus
secureTextEntry
onChangeText={value => {
this.onChangeText('password', value);
}}
value={this.state.password}
style={styles.input}
underlineColorAndroid="transparent"
placeholder={placeholders[1]}
placeholderTextColor="#aaa"
/>
</View>
)}
</View>
</KeyboardAvoidingView>
</Modal>
);
}
}
import React from 'react';
import topView from 'rn-topview';
import AlertContainer from './AlertContainer';
import styles from './styles';
export default function a(title, content, actions = [{text: '确定'}]) {
const onAnimationEnd = visible => {
if (!visible) {
topView.remove();
}
};
topView.set(
<AlertContainer
styles={styles}
title={title}
content={content}
actions={actions}
onAnimationEnd={onAnimationEnd}
/>,
);
}
import React from 'react';
import Modal from 'antd-mobile-rn/lib/modal/Modal.native';
import styles from './styles';
import alert from './alert';
import prompt from './prompt';
import operation from './operation';
export default class ModalComp extends React.Component {
static alert = alert;
static prompt = prompt;
static operation = operation;
render() {
return <Modal styles={styles} {...this.props} />;
}
}
import React from 'react';
import topView from 'rn-topview';
import OperationContainer from './OperationContainer';
export default function a(...args) {
const actions = args[0] || [{text: '确定'}];
const onAnimationEnd = visible => {
if (!visible) {
topView.remove();
}
};
topView.set(
<OperationContainer actions={actions} onAnimationEnd={onAnimationEnd} />,
);
}
import React from 'react';
import topView from 'rn-topview';
import PromptContainer from './PromptContainer';
export default function prompt(
title,
message,
callbackOrActions,
type = 'default',
defaultValue = '',
placeholders = ['', ''],
) {
if (!callbackOrActions) {
console.error('Must specify callbackOrActions');
return;
}
const onAnimationEnd = visible => {
if (!visible) {
topView.remove();
}
};
topView.set(
<PromptContainer
title={title}
message={message}
actions={callbackOrActions}
type={type}
defaultValue={defaultValue}
onAnimationEnd={onAnimationEnd}
placeholders={placeholders}
/>,
);
}
import ModalStyle from 'antd-mobile-rn/lib/modal/style/index.native';
import {width} from '../../utils/screen';
const styles = {
...ModalStyle,
innerContainer: {
...ModalStyle.innerContainer,
width: width * 0.7,
},
header: {
...ModalStyle.header,
fontSize: 45,
marginBottom: 20,
},
buttonWrapV: {
...ModalStyle.buttonWrapV,
height: 80,
},
buttonWrapH: {
...ModalStyle.buttonWrapH,
height: 80,
},
buttonText: {
...ModalStyle.buttonText,
fontSize: 35,
},
};
export default styles;
import React from 'react';
import {View, Text} from 'react-native';
import Icon from 'react-native-vector-icons/Ionicons';
import {colors, font} from '../utils/common';
import Touch from './Touch';
import Modal from './Modal';
import ModalStyles from './Modal/styles';
const mStyles = {
...ModalStyles,
innerContainer: {
...ModalStyles.innerContainer,
width: 580,
},
header: {
...ModalStyles.header,
fontSize: font.title,
},
};
export default class KeyboardModal extends React.Component {
constructor(props) {
super(props);
this.state = {
value: '',
clickDot: true,
};
}
getKeyboard = () => {
const rows = [];
let items = [];
const {dot} = this.props;
for (let i = 1; i <= 12; i++) {
let unit;
if (i === 10 && !dot) {
unit = (
<Icon style={styles.keyUnit} name="ios-backspace-outline" size={60} />
);
} else if (i === 10 && dot) {
unit = <Text style={styles.keyUnit}>.</Text>;
} else if (i === 11) {
unit = <Text style={styles.keyUnit}>0</Text>;
} else if (i === 12) {
unit = <Icon style={styles.keyUnit} name="md-return-left" size={60} />;
} else {
unit = <Text style={styles.keyUnit}>{i}</Text>;
}
const item = (
<Touch style={styles.keyTouch} key={i} onPress={() => this.pressKey(i)}>
{unit}
</Touch>
);
items.push(item);
if (i % 3 === 0) {
rows.push(
<View style={styles.keyRow} key={i}>
{items}
</View>,
);
items = [];
}
}
return <View>{rows}</View>;
};
pressKey = index => {
let {value, clickDot} = this.state;
const {dot} = this.props;
if (index < 10) {
value += index;
} else if (index === 10 && !dot) {
value = value.substr(0, value.length - 1);
} else if (index === 10 && dot && clickDot) {
value += '.';
clickDot = false;
} else if (index === 11) {
value += 0;
} else if (index === 12) {
this.props.onSubmit(value);
this.handleClose();
return;
}
this.setState({value, clickDot});
};
handleClose = () => {
this.setState({value: '', clickDot: true});
this.props.onClose();
};
render() {
const {title, visible} = this.props;
const {value} = this.state;
return (
<Modal
styles={mStyles}
visible={visible}
transparent
maskClosable
onClose={this.handleClose}
title={title}>
<View
style={{
width: 550,
borderTopColor: '#cccccc',
borderTopWidth: 1,
paddingVertical: 20,
}}>
<Touch
style={{position: 'absolute', top: -70, right: -5}}
onPress={this.handleClose}
feedback={false}>
<Icon size={50} name="ios-close-circle-outline" />
</Touch>
<View
style={{
width: 550,
height: 70,
justifyContent: 'center',
position: 'relative',
}}>
<View
style={{
borderBottomWidth: 2,
borderBottomColor: '#ddd',
alignItems: 'center',
marginLeft: 20,
marginRight: 20,
}}>
<Text style={{color: 'gray', fontSize: 35, paddingBottom: 15}}>
{value || ' '}
</Text>
</View>
<Touch
onPress={() => this.setState({value: '', clickDot: true})}
style={{
position: 'absolute',
right: 30,
paddingLeft: 10,
paddingRight: 10,
}}>
<Icon name="ios-close" size={50} color="#D1D1D1" />
</Touch>
</View>
{this.getKeyboard()}
</View>
</Modal>
);
}
}
const styles = {
keyRow: {
flexDirection: 'row',
justifyContent: 'center',
marginTop: 15,
},
keyTouch: {
width: 80,
height: 80,
justifyContent: 'center',
alignItems: 'center',
borderWidth: 1,
borderColor: '#cccccc',
borderRadius: 5,
marginHorizontal: 15,
},
keyUnit: {
// fontSize: font.textActive,
fontSize: 25,
color: colors.text,
},
};
import React, {Component} from 'react';
import {Modal, View, Text, Image, TextInput} from 'react-native';
import Icon from 'react-native-vector-icons/Ionicons';
import ModalStyles from './Modal/styles';
import {colors, font} from '../utils/common';
import Touch from './Touch';
const mStyles = {
...ModalStyles,
innerContainer: {
...ModalStyles.innerContainer,
// width: 380,
},
header: {
...ModalStyles.header,
fontSize: font.title,
},
};
class PhoneModal extends Component {
state = {
value: '',
};
getKeyboard = () => {
const rows = [];
let items = [];
for (let i = 1; i <= 9; i++) {
let unit;
unit = <Text style={styles.keyUnit}>{i}</Text>;
const item = (
<Touch style={styles.keyTouch} key={i} onPress={() => this.pressKey(i)}>
{unit}
</Touch>
);
items.push(item);
if (i % 3 === 0) {
rows.push(
<View style={styles.keyRow} key={i}>
{items}
</View>,
);
items = [];
}
}
return <View style={styles.NumberTop}>{rows}</View>;
};
pressKey = index => {
let {value} = this.state;
const {onSubmit} = this.props;
if (index < 10) {
value += index;
} else if (index === 11) {
value = value.substr(0, value.length - 1);
} else if (index === 12) {
this.setState({value: ''});
onSubmit(value);
return;
}
this.setState({value});
};
render() {
const {onClose, ...props} = this.props;
const {value} = this.state;
return (
<Modal styles={mStyles} {...props}>
<View style={styles.modal}>
<View style={styles.header}>
<View style={styles.title}>
<View style={styles.left}>
<Image
source={require('../assets/logo.png')}
style={styles.img}
/>
<Text style={styles.text}>安全验证手机号</Text>
</View>
<View style={styles.right}>
<Touch onPress={() => onClose()}>
<Icon name="md-close" color={'#FFFFFF'} size={50} />
</Touch>
</View>
</View>
<View style={styles.image}>
<Image
source={require('../assets/logo2.png')}
style={styles.logo}
/>
</View>
</View>
<View style={styles.container}>
<Text style={{color: 'red', fontSize: 45, marginBottom: 10}}>
请输入接收验证码的手机号
</Text>
<View
style={{
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
}}>
<TextInput
style={{
fontSize: 35,
width: '80%',
textAlign: 'center',
padding: 30,
}}
placeholder="安全输入不留痕迹"
placeholderTextColor="lightgray"
editable={false}
value={value}
/>
<Touch
onPress={() => this.setState({value: ''})}
feddback={false}>
<Icon name="md-close" color={'#DCDCDC'} size={50} />
</Touch>
</View>
</View>
<View style={styles.footer}>
<View style={styles.footerLeft}>
{this.getKeyboard()}
<View style={styles.keyRowBottom}>
<Touch
style={styles.keyBottomTouch}
onPress={() => this.pressKey(0)}>
<Text style={styles.keyUnit}>0</Text>
</Touch>
</View>
</View>
<View style={styles.footerRight}>
<View style={styles.keyRowClose}>
<Touch
style={styles.keyTouchClose}
onPress={() => this.pressKey(11)}>
<Icon
style={styles.keyUnit}
name="ios-backspace-outline"
size={60}
/>
</Touch>
</View>
<View style={styles.keyRowSure}>
{/* <Touch style={styles.keyTouchSure} onPress={() => this.pressKey(12)}>*/}
{/* <Text style={styles.keyUnitClose}>确定</Text>*/}
{/* </Touch>*/}
{value.length < 1 ? (
<View style={styles.keyTouchSure}>
<Text style={styles.keyUnitClose}>确定</Text>
</View>
) : (
<Touch
style={styles.keyTouchOnSure}
onPress={() => this.pressKey(12)}>
<Text style={styles.keyUnitClose}>确定</Text>
</Touch>
)}
</View>
</View>
</View>
</View>
</Modal>
);
}
}
const styles = {
modal: {
height: '86%',
width: '90%',
marginLeft: '5%',
marginTop: '10%',
borderRadius: 20,
backgroundColor: '#cccccc',
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
},
header: {
flex: 0.4,
backgroundColor: '#00CD66',
width: '100%',
flexDirection: 'column',
borderTopRightRadius: 10,
borderTopLeftRadius: 10,
},
title: {
flexDirection: 'row',
justifyContent: 'space-between',
marginLeft: 30,
marginRight: 30,
marginTop: 10,
},
left: {
flexDirection: 'row',
alignItems: 'center',
},
right: {
flexDirection: 'row-reverse',
alignItems: 'center',
},
img: {
width: 80,
height: 80,
marginRight: 10,
resizeMode: 'contain',
},
image: {
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
},
logo: {
width: 150,
height: 150,
resizeMode: 'contain',
},
text: {
color: '#FFFFFF',
fontSize: 30,
},
container: {
flex: 0.2,
backgroundColor: '#FFFFFF',
width: '100%',
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
},
footer: {
flex: 0.4,
width: '100%',
flexDirection: 'row',
backgroundColor: '#F5F5F5',
borderBottomLeftRadius: 10,
borderBottomRightRadius: 10,
},
footerLeft: {
width: '75%',
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
},
NumberTop: {
flex: 0.8,
},
keyRow: {
flexDirection: 'row',
justifyContent: 'center',
marginTop: 10,
marginLeft: 20,
marginRight: 10,
flex: 0.33,
},
keyRowBottom: {
width: '100%',
flexDirection: 'row',
justifyContent: 'center',
marginTop: 10,
marginLeft: 20,
marginRight: 10,
marginBottom: 10,
flex: 0.2,
},
keyBottomTouch: {
width: '100%',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#FFFFFF',
borderRadius: 5,
marginHorizontal: 5,
},
keyTouch: {
width: '33%',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#FFFFFF',
borderRadius: 5,
marginHorizontal: 5,
},
keyUnit: {
fontSize: 50,
color: colors.text,
},
footerRight: {
width: '25%',
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
},
keyRowClose: {
flexDirection: 'row',
justifyContent: 'center',
marginLeft: 10,
marginTop: 10,
marginRight: 5,
flex: 0.25,
},
keyTouchClose: {
width: '90%',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#FFFFFF',
borderRadius: 5,
marginHorizontal: 5,
},
keyRowSure: {
flexDirection: 'row',
justifyContent: 'center',
marginLeft: 10,
marginTop: 10,
marginBottom: 10,
marginRight: 5,
flex: 0.75,
},
keyTouchSure: {
width: '90%',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#76EEC6',
borderRadius: 5,
marginHorizontal: 5,
},
keyTouchOnSure: {
width: '90%',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#00CD66',
borderRadius: 5,
marginHorizontal: 5,
},
keyUnitClose: {
fontSize: 50,
color: '#FFFFFF',
},
};
export default PhoneModal;
import React from 'react';
import topView from 'rn-topview';
import ToastContainer from 'antd-mobile-rn/lib/toast/ToastContainer.native';
function notice(content, type, duration = 3, onClose, mask = true) {
topView.remove();
function animationEnd() {
topView.remove();
}
topView.set(
<ToastContainer
content={content}
duration={duration}
onClose={onClose}
type={type}
mask={mask}
onAnimationEnd={animationEnd}
/>,
);
}
export default {
SHORT: 3,
LONG: 8,
show(content: string, duration?: number, mask?: boolean) {
return notice(content, 'info', duration, () => {}, mask);
},
info(
content: string,
duration?: number,
onClose?: () => void,
mask?: boolean,
) {
return notice(content, 'info', duration, onClose, mask);
},
success(
content: string,
duration?: number,
onClose?: () => void,
mask?: boolean,
) {
return notice(content, 'success', duration, onClose, mask);
},
fail(
content: string,
duration?: number,
onClose?: () => void,
mask?: boolean,
) {
return notice(content, 'fail', duration, onClose, mask);
},
offline(
content: string,
duration?: number,
onClose?: () => void,
mask?: boolean,
) {
return notice(content, 'offline', duration, onClose, mask);
},
loading(
content: string,
duration?: number,
onClose?: () => void,
mask?: boolean,
) {
return notice(content, 'loading', duration, onClose, mask);
},
hide() {
topView.remove();
},
};
import React from 'react';
import {
Platform,
TouchableNativeFeedback,
TouchableOpacity,
TouchableWithoutFeedback,
View,
} from 'react-native';
let TouchableComponent;
if (Platform.OS === 'android') {
TouchableComponent =
Platform.Version <= 20 ? TouchableOpacity : TouchableNativeFeedback;
} else {
TouchableComponent = TouchableOpacity;
}
if (TouchableComponent !== TouchableNativeFeedback) {
TouchableComponent.SelectableBackground = () => ({});
TouchableComponent.SelectableBackgroundBorderless = () => ({});
TouchableComponent.Ripple = () => ({});
TouchableComponent.canUseNativeForeground = () => false;
}
export default class PlatformTouchable extends React.Component {
static SelectableBackground = TouchableComponent.SelectableBackground;
static SelectableBackgroundBorderless =
TouchableComponent.SelectableBackgroundBorderless;
static Ripple = TouchableComponent.Ripple;
static canUseNativeForeground = TouchableComponent.canUseNativeForeground;
onPress = () => {
let {onPress} = this.props;
window.count = window.defaultCount;
if (onPress) {
onPress();
}
};
render() {
let {
children,
style,
foreground,
background,
useForeground,
feddback,
...props
} = this.props;
if (feddback === false) {
TouchableComponent = TouchableWithoutFeedback;
}
props.onPress = this.onPress;
// Even though it works for TouchableWithoutFeedback and
// TouchableNativeFeedback with this component, we want
// the API to be the same for all components so we require
// exactly one direct child for every touchable type.
children = React.Children.only(children);
if (TouchableComponent === TouchableNativeFeedback) {
useForeground =
foreground && TouchableNativeFeedback.canUseNativeForeground();
/* if (foreground && background) {
console.warn(
'Specified foreground and background for Touchable,' +
' only one can be used at a time. Defaulted to foreground.',
);
}*/
return (
<TouchableComponent
{...props}
useForeground={useForeground}
background={(useForeground && foreground) || background}>
<View style={style}>{children}</View>
</TouchableComponent>
);
} else if (TouchableComponent === TouchableWithoutFeedback) {
return (
<TouchableWithoutFeedback {...props}>
<View style={style}>{children}</View>
</TouchableWithoutFeedback>
);
} else {
const TouchableFallback = this.props.fallback || TouchableComponent;
return (
<TouchableFallback {...props} style={style}>
{children}
</TouchableFallback>
);
}
}
}
import React, {Component} from 'react';
import {Modal, View, Text, Image} from 'react-native';
import Icon from 'react-native-vector-icons/Ionicons';
import ModalStyles from './Modal/styles';
import {colors, font} from '../utils/common';
import Touch from './Touch';
const mStyles = {
...ModalStyles,
innerContainer: {
...ModalStyles.innerContainer,
// width: 380,
},
header: {
...ModalStyles.header,
fontSize: font.title,
},
};
class VerifyCodeModal extends Component {
state = {
value: '',
};
getKeyboard = () => {
const rows = [];
let items = [];
for (let i = 1; i <= 9; i++) {
let unit;
unit = <Text style={styles.keyUnit}>{i}</Text>;
const item = (
<Touch style={styles.keyTouch} key={i} onPress={() => this.pressKey(i)}>
{unit}
</Touch>
);
items.push(item);
if (i % 3 === 0) {
rows.push(
<View style={styles.keyRow} key={i}>
{items}
</View>,
);
items = [];
}
}
return <View style={styles.NumberTop}>{rows}</View>;
};
pressKey = index => {
let {value} = this.state;
const {onSubmit} = this.props;
if (index < 10 && value.length < 4) {
value += index;
} else if (index === 11) {
value = value.substr(0, value.length - 1);
} else if (index === 12) {
this.setState({value: ''});
onSubmit(value);
return;
}
this.setState({value});
};
render() {
const {onClose, ...props} = this.props;
const {value} = this.state;
return (
<Modal styles={mStyles} {...props}>
<View style={styles.modal}>
<View style={styles.header}>
<View style={styles.title}>
<View style={styles.left}>
<Image
source={require('../assets/logo.png')}
style={styles.img}
/>
<Text style={styles.text}>安全验证手机号</Text>
</View>
<View style={styles.right}>
<Touch onPress={() => onClose()}>
<Icon name="md-close" color={'#FFFFFF'} size={50} />
</Touch>
</View>
</View>
<View style={styles.image}>
<Image
source={require('../assets/logo2.png')}
style={styles.logo}
/>
</View>
</View>
<View style={styles.container}>
<Text style={styles.tips}>请输入验证码</Text>
<View style={styles.codeView}>
<Text style={styles.code}>
{value && value.length >= 1 ? value.substr(0, 1) : ''}
</Text>
<Text style={styles.code}>
{value && value.length >= 2 ? value.substr(1, 1) : ''}
</Text>
<Text style={styles.code}>
{value && value.length >= 3 ? value.substr(2, 1) : ''}
</Text>
<Text style={styles.code}>
{value && value.length >= 4 ? value.substr(3, 1) : ''}
</Text>
</View>
</View>
<View style={styles.footer}>
<View style={styles.footerLeft}>
{this.getKeyboard()}
<View style={styles.keyRowBottom}>
<Touch
style={styles.keyBottomTouch}
onPress={() => this.pressKey(0)}>
<Text style={styles.keyUnit}>0</Text>
</Touch>
</View>
</View>
<View style={styles.footerRight}>
<View style={styles.keyRowClose}>
<Touch
style={styles.keyTouchClose}
onPress={() => this.pressKey(11)}>
<Icon
style={styles.keyUnit}
name="ios-backspace-outline"
size={60}
/>
</Touch>
</View>
<View style={styles.keyRowSure}>
{value.length < 4 ? (
<View style={styles.keyTouchSure}>
<Text style={styles.keyUnitClose}>确定</Text>
</View>
) : (
<Touch
style={styles.keyTouchOnSure}
onPress={() => this.pressKey(12)}>
<Text style={styles.keyUnitClose}>确定</Text>
</Touch>
)}
</View>
</View>
</View>
</View>
</Modal>
);
}
}
const styles = {
modal: {
height: '90%',
width: '90%',
marginLeft: '5%',
marginTop: '6%',
borderRadius: 20,
backgroundColor: '#cccccc',
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
},
header: {
flex: 0.4,
backgroundColor: '#00CD66',
width: '100%',
flexDirection: 'column',
borderTopRightRadius: 10,
borderTopLeftRadius: 10,
},
title: {
flexDirection: 'row',
justifyContent: 'space-between',
marginLeft: 30,
marginRight: 30,
marginTop: 10,
},
left: {
flexDirection: 'row',
alignItems: 'center',
},
right: {
flexDirection: 'row-reverse',
alignItems: 'center',
},
img: {
width: 80,
height: 80,
marginRight: 10,
resizeMode: 'contain',
},
image: {
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
},
logo: {
width: 150,
height: 150,
resizeMode: 'contain',
},
text: {
color: '#FFFFFF',
fontSize: 30,
},
container: {
flex: 0.3,
backgroundColor: '#FFFFFF',
width: '100%',
flexDirection: 'column',
justifyContent: 'center',
},
tips: {
color: 'red',
fontSize: 45,
marginBottom: 10,
textAlign: 'center',
},
codeView: {
flexDirection: 'row',
justifyContent: 'space-around',
alignItems: 'center',
flex: 0.5,
marginTop: 30,
},
code: {
height: '100%',
width: '15%',
borderWidth: 4,
borderColor: '#DCDCDC',
textAlign: 'center',
fontSize: 50,
textAlignVertical: 'center',
},
footer: {
flex: 0.4,
width: '100%',
flexDirection: 'row',
backgroundColor: '#F5F5F5',
borderBottomLeftRadius: 10,
borderBottomRightRadius: 10,
},
footerLeft: {
width: '75%',
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
},
NumberTop: {
flex: 0.8,
},
keyRow: {
flexDirection: 'row',
justifyContent: 'center',
marginTop: 10,
marginLeft: 20,
marginRight: 10,
flex: 0.33,
},
keyRowBottom: {
width: '100%',
flexDirection: 'row',
justifyContent: 'center',
marginTop: 10,
marginLeft: 20,
marginRight: 10,
marginBottom: 10,
flex: 0.2,
},
keyBottomTouch: {
width: '100%',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#FFFFFF',
borderRadius: 5,
marginHorizontal: 5,
},
keyTouch: {
width: '33%',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#FFFFFF',
borderRadius: 5,
marginHorizontal: 5,
},
keyUnit: {
fontSize: 50,
color: colors.text,
},
footerRight: {
width: '25%',
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
},
keyRowClose: {
flexDirection: 'row',
justifyContent: 'center',
marginLeft: 10,
marginTop: 10,
marginRight: 5,
flex: 0.25,
},
keyTouchClose: {
width: '90%',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#FFFFFF',
borderRadius: 5,
marginHorizontal: 5,
},
keyRowSure: {
flexDirection: 'row',
justifyContent: 'center',
marginLeft: 10,
marginTop: 10,
marginBottom: 10,
marginRight: 5,
flex: 0.75,
},
keyTouchSure: {
width: '90%',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#76EEC6',
borderRadius: 5,
marginHorizontal: 5,
},
keyTouchOnSure: {
width: '90%',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#00CD66',
borderRadius: 5,
marginHorizontal: 5,
},
keyUnitClose: {
fontSize: 50,
color: '#FFFFFF',
},
};
export default VerifyCodeModal;
import AsyncStorage from '@react-native-community/async-storage';
import * as api from '../services/admin';
export default {
namespace: 'admin',
state: {
auth: {},
socket: '',
},
reducers: {
setAuth(state, {id, auth, login}) {
state.id = id;
state.auth = auth;
window.auth = auth;
if (window.socket) {
window.socket.io.opts.query = {
token: auth.token,
};
}
AsyncStorage.setItem('auth', JSON.stringify(auth));
if (login) {
AsyncStorage.setItem('login', login);
}
return {...state};
},
setSocket(state, {socket}) {
state.socket = socket;
return {...state};
},
},
effects: {
*auth(action, {put, call}) {
let login = action.login;
action.device = login;
delete action.login;
const {data} = action.key
? yield call(api.token, action)
: yield call(api.refreshToken);
if (data && data.code === 1) {
if (data.data && data.data.contact) {
yield call(AsyncStorage.setItem, 'CONTACT', data.data.contact);
}
if (action.key) {
yield call(AsyncStorage.setItem, 'KEY', action.key);
}
yield put({type: 'setAuth', id: data.id, auth: data.data, login});
}
return data;
},
*logout(action, {put, call}) {
yield call(AsyncStorage.removeItem, 'auth');
yield put({type: 'app/replace', route: 'home'});
},
*version(action, {call}) {
yield call(api.version);
},
},
};
import * as api from '../services/alipay';
export default {
namespace: 'alipay',
state: {},
effects: {
*barcode(action, {call}) {
let {data} = yield call(api.barcode, action);
return data;
},
},
};
import * as api from '../services/goods';
export default {
namespace: 'goods',
state: {
orderInfo: [],
bags: [],
total: 0,
preTotal: 0,
status: -1,
},
reducers: {
setOrder(state, {data}) {
state.orderInfo = data.goods;
state.total = data.total;
state.preTotal = data.preTotal;
state.status = data.status;
return {...state};
},
setBags(state, {data}) {
state.bags = data;
return {...state};
},
},
effects: {
*getBags(action, {put, call}) {
let {data} = yield call(api.getBags);
if (data.code === 1) {
yield put({type: 'setBags', data: data.data});
}
},
*barcodepay(action, {call}) {
const err = {code: 500, msg: '付款失败,请扫屏幕二维码付款'};
try {
let {data} = yield call(api.barcodepay, action);
if (data.code === 500) {
return err;
}
return data;
} catch (e) {
return err;
}
},
*barcodeUser(action, {call}) {
try {
let {data} = yield call(api.barcodeUser, action);
return data;
} catch (e) {
return {code: -1};
}
},
*status(action, {call}) {
try {
let {data} = yield call(api.status, action);
return data;
} catch (e) {
return {code: -1};
}
},
*getGoods({barcode}, {call}) {
try {
return yield call(api.getGoods, barcode);
} catch (e) {
return {data: null};
}
},
*postOrder({ids, payType}, {call}) {
return yield call(api.postOrder, ids, payType);
},
*getOrder({id}, {put, call}) {
let {data} = yield call(api.getOrder, id);
if (data.code === 1) {
yield put({type: 'setOrder', data: data.data});
return data.data.status;
}
},
*canOrder({orderId}, {call}) {
return yield call(api.canOrder, orderId);
},
*faceinfo(action, {call}) {
return yield call(api.faceinfo, action);
},
*wxauthinfo(action, {call}) {
delete action.type;
return yield call(api.wxauthinfo, action);
},
},
};
import * as api from '../services/hkvs';
export default {
namespace: 'hkvs',
state: {
capture: {},
},
reducers: {
setDevices(state, {data}) {
state.device = data.device || true;
state.deviceIn = data.deviceIn;
state.deviceOut = data.deviceOut;
return {...state};
},
setCapture(state, {device, data}) {
const {capture} = state;
if (device === state.deviceIn) {
// if (!capture.in) capture.in = [];
capture.in = data;
} else if (device === state.deviceOut) {
// if (!capture.out) capture.out = [];
capture.out = data;
}
return {...state};
},
},
effects: {
*devices(action, {put, call}) {
const {data} = yield call(api.devices);
yield put({type: 'setDevices', data: data.data});
},
*capture({device}, {put, call}) {
let res = yield call(api.capture, device);
if (res.data.code !== 1) {
// 重试一遍
res = yield call(api.capture, device);
}
if (res.data.code !== 1) {
// 重试一遍
res = yield call(api.capture, device);
}
if (res.data.code === 1) {
yield put({type: 'setCapture', device, data: res.data.data});
return res.data.data;
}
return null;
},
},
};
import {Dimensions} from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import admin from './admin';
import goods from './goods';
import alipay from './alipay';
import wxpay from './wxpay';
import order from './order';
import hkvs from './hkvs';
import user from './user';
import store from './store';
const {width: _width, height: _height} = Dimensions.get('window');
let curRoute = 'home';
if (_height > _width) {
curRoute = 'vertical';
}
const initRoute = {route: curRoute};
const app = {
namespace: 'app',
state: {
current: initRoute,
history: [initRoute],
step: 1,
lock: false,
},
reducers: {
replace(state, {route, params}) {
const current = {route, params};
state.current = current;
state.history[state.history.length - 1] = current;
return {...state};
},
push(state, {route, params}) {
const current = {route, params};
state.current = current;
state.history.push(current);
return {...state};
},
back(state, {params}) {
if (state.history.length === 1) {
return {...state};
}
state.history.pop();
state.current = state.history[state.history.length - 1];
state.current.params = params;
return {...state};
},
step(state, {step}) {
state.step = step;
return {...state};
},
lock(state, {lock}) {
state.lock = lock;
if (lock) {
AsyncStorage.setItem('settingLock', 'true');
} else {
AsyncStorage.removeItem('settingLock');
}
return {...state};
},
},
};
export default [app, admin, goods, alipay, wxpay, order, hkvs, user, store];
import * as api from '../services/order';
export default {
namespace: 'order',
state: {},
effects: {
*cardPay(action, {call}) {
let {data} = yield call(api.cardPay, action);
return data;
},
*status(action, {call}) {
try {
let {data} = yield call(api.status, action);
return data;
} catch (e) {
return {code: 1, data: 0};
}
},
},
};
import AsyncStorage from '@react-native-community/async-storage';
import * as api from '../services/store';
export default {
namespace: 'store',
state: {
auth: {},
socket: '',
ai: {
temperature: 0,
humidity: 0,
shock: 0,
trigger: {
text: 0,
data: 0,
},
offset: 0,
},
},
reducers: {
initScaleData(state) {
state.ai = {
...state.ai,
shock: 0,
trigger: {
text: 0,
data: 0,
},
offset: 0,
};
return {...state};
},
setAuth(state, {id, auth}) {
state.id = id;
state.auth = auth;
window.auth = auth;
if (window.socket) {
window.socket.io.opts.query = {
token: auth.token,
};
}
return {...state};
},
setScaleData(state, {data}) {
state.ai = data;
return {...state};
},
setSocket(state, {socket}) {
state.socket = socket;
return {...state};
},
},
effects: {
*auth(action, {put, call}) {
const {data} = action.key
? yield call(api.token, action)
: yield call(api.refreshToken);
if (data && data.code === 1) {
let set = [];
if (action.key) {
set = [
['KEY', action.key],
['SECRET', action.secret],
['DEVICE', action.device],
];
}
if (action.host) {
set.push(['HOST', action.host]);
}
if (data.data && data.data.contact) {
set.push(['CONTACT', data.data.contact]);
}
set.push(['auth', JSON.stringify(data.data)]);
yield call(AsyncStorage.multiSet, set);
// 缓存数据到内存,方便调用
const getValues = () =>
AsyncStorage.multiGet(['HOST', 'KEY', 'DEVICE', 'CONTACT']);
const values = yield call(getValues);
window.deviceInfo = {};
values.map(r => {
const k = r[0];
const v = r[1];
if (k && v) {
window.deviceInfo[k.toLowerCase()] = v;
}
});
yield put({type: 'setAuth', id: data.id, auth: data.data});
yield put({type: 'region'});
}
return data;
},
*logout(action, {put, call}) {
yield call(AsyncStorage.removeItem, 'auth');
yield put({type: 'app/replace', route: 'home'});
},
*version(action, {call}) {
yield call(api.version);
},
*region(action, {call}) {
const {data} = yield call(api.region);
if (data.code === 1) {
window.region = data.data;
window.regionArr = [];
['citycode', 'adcode', 'towncode'].map(k => {
const v = window.region[k];
if (v) {
window.regionArr.push(v);
}
});
window.regionArr.push(window.region.key);
window.regionArr = window.regionArr.reverse();
}
},
*door(action, {call}) {
const {data} = yield call(api.door, action);
if (data.code === 1) {
return data.data;
}
},
*wxdoor(action, {call}) {
const {data} = yield call(api.wxdoor, action);
if (data.code === 1) {
return data.data;
}
},
*scaleData(action, {put, call, select}) {
let {data} = yield call(api.scaleData);
if (data.code === 1 && data.data) {
let trigger = yield select(state => state.store.ai.trigger);
const dataTran = tranAIData(data.data, trigger);
yield put({type: 'setScaleData', data: dataTran});
return data.data;
}
},
*sendsms(action, {call}) {
const {data} = yield call(api.sendsms, action);
return data;
},
*verifysms(action, {call}) {
const {data} = yield call(api.verifysms, action);
return data;
},
},
};
const randomData = Math.random();
let tranAIData = (data, trigger) => {
let aiData = {
shock: 0,
trigger: {
text: 0,
data: 0,
},
offset: 0,
};
let max = 0;
let min = 500000;
let sum = 0;
data.weights.map(v => {
if (v > max) {
max = v;
}
if (v < min) {
min = v;
}
sum += v;
});
let ave = sum / 10;
if (max - min >= 600) {
aiData.shock = (100 + Math.random() * 80) * (ave / 75000);
} else {
aiData.shock = ((max - min) / 4) * (ave / 75000);
}
if (data.stableWeight && data.stableWeight > 0) {
aiData.trigger.data = 96;
aiData.trigger.text = data.stableWeight;
} else {
aiData.trigger.data = trigger.data + Math.random() * 30;
aiData.trigger.text = ave;
}
if (data.stableWeight && data.stableWeight > 0) {
aiData.offset = randomData * 30;
} else if (max - ave > 30 && ave - min > 30) {
aiData.offset = 30 + Math.random() * 30;
} else {
aiData.offset = max - ave > ave - min ? ave - min : max - ave;
}
if (
!data.weights ||
(Number(data.weights[0]) === 0 &&
Number(data.weights[data.weights.length - 1]) === 0)
) {
aiData = {
shock: 0,
trigger: {
text: 0,
data: 0,
},
offset: 0,
};
}
return {temperature: data.temperature, humidity: data.humidity, ...aiData};
};
import * as api from '../services/user';
export default {
namespace: 'user',
state: {},
effects: {
*sendSms({phone}, {call}) {
const {data} = yield call(api.sendsms, phone);
return data;
},
*signinup(action, {call}) {
delete action.type;
const {data} = yield call(api.signinup, action);
return data;
},
},
};
import * as api from '../services/wxpay';
export default {
namespace: 'wxpay',
state: {},
effects: {
*barcode(action, {call}) {
let {data} = yield call(api.barcode, action);
return data;
},
},
};
import React, {Component} from 'react';
import {View, Text, Image} from 'react-native';
import QRCode from 'react-native-qrcode-svg';
import io from 'socket.io-client';
import axios from 'axios';
import {counterLogin} from '../utils/authLogin';
import config from '../utils/config';
class AuthPage extends Component {
state = {};
async componentDidMount() {
this.socket = io(axios.defaults.baseURL);
this.socket.on('storeAuth', this.handleLogin);
this.socket.on('connect', () => {
this.setState({socket: this.socket.id});
});
this.socket.on('disconnect', () => {
this.socket.connect();
});
}
handleLogin = async values => {
this.setState({loading: true});
if (!values.host) {
values.host = config.host;
}
values.login = values.device;
await counterLogin(values);
};
render() {
const {socket} = this.state;
return (
<View style={styles.container}>
<View style={styles.title}>
<Image
style={styles.titleImg}
source={require('../assets/logo2.png')}
resizeMode="contain"
/>
<Image
style={{marginLeft: 20}}
source={require('../assets/Vertical/24h.png')}
/>
<Text style={styles.titleText}>仲马购人工智能</Text>
</View>
<View style={styles.qrcode}>
<QRCode
size={350}
logo={require('../assets/logo.png')}
logoBackgroundColor="#FC4000"
backgroundColor="white"
value={`${config.qrHost}/#/store-auth-${socket}`}
/>
</View>
</View>
);
}
}
const styles = {
title: {
top: 0,
paddingLeft: 30,
flexDirection: 'row',
height: 100,
width: '100%',
position: 'absolute',
backgroundColor: 'white',
alignItems: 'center',
elevation: 10,
},
titleImg: {
width: 80,
height: 80,
},
titleText: {
color: '#333',
fontSize: 40,
marginLeft: 30,
},
container: {
flex: 1,
backgroundColor: '#F5F5F5',
justifyContent: 'center',
alignItems: 'center',
},
qrcode: {
padding: 10,
backgroundColor: 'white',
elevation: 5,
},
};
export default AuthPage;
import React from 'react';
import RN, {DeviceEventEmitter, Image, View} from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import {connect} from 'react-redux';
import {debounce} from 'throttle-debounce';
import KeyEvent from 'react-native-keyevent';
import Icon from 'react-native-vector-icons/Ionicons';
import NumberModal from '../components/NumberModal';
import Modal from '../components/Modal';
import {font} from '../utils/common';
import Touch from '../components/Touch';
import ModalStyles from '../components/Modal/styles';
import Speech from '../utils/Speech';
import Toast from '../components/Toast';
import NP from '../utils/np';
import {total} from '../utils/validity';
window.RN = RN;
window.Toast = Toast;
window.Speech = Speech;
const mStyles = {
...ModalStyles,
innerContainer: {
...ModalStyles.innerContainer,
width: 777,
},
header: {
...ModalStyles.header,
fontSize: font.title,
},
};
const clearTime = 300; // 五分钟自动清空购物车
const paidTime = 30; // 支付完成等待时间 30s
const delay = 1500; // 扫码后延迟时间
const wait = t => new Promise(resolve => setTimeout(resolve, t));
const CounterMixins = ComposeComponent => {
class Mixins extends ComposeComponent {
static displayName = 'CounterMixins';
state = {
goodsArr: [],
preventRevert: false,
modalS: false,
current: 1,
preventMsg: '',
caseUp: false,
voiceModal: false,
title: '',
dot: false,
};
UNSAFE_componentWillMount = async () => {
const qrHost = await AsyncStorage.getItem('QRHOST');
await this.setState({qrHost});
};
componentDidMount = async () => {
window.scan = this.submitBarcode;
window.clear = this.clearList;
this.goodsMap = {}; // 缓存商品数据
this.barcode = ''; // 记录条形码
this.totalNum = 0; // 总件数
this.weight = 0;
this.clearListInter = setInterval(() => {
window.count++;
if (window.count === clearTime) {
this.clearList();
window.count = window.defaultCount;
}
}, 1000);
DeviceEventEmitter.addListener('onSpeechStart', () => (this.busy = true));
DeviceEventEmitter.addListener(
'onSpeechFinish',
() => (this.busy = false),
);
DeviceEventEmitter.addListener('onError', () => (this.busy = false));
const handleScan = this.submitBarcode;
// if you want to react to keyUp
KeyEvent.onKeyUpListener(async ({keyCode}) => {
if (keyCode === 66) {
// 回车事件
await handleScan();
this.barcode = '';
} else if (keyCode >= 7 && keyCode <= 16) {
this.barcode += keyCode - 7;
}
});
this.listen();
};
componentWillUnmount = () => {
clearInterval(this.preventInter);
clearInterval(this.clearListInter);
clearInterval(this.payInter);
clearTimeout(this.paidTimeout);
KeyEvent.removeKeyUpListener();
};
setDelay = debounce(delay, true, () => {
this.isDelay = true;
setTimeout(() => {
this.isDelay = false;
}, delay);
});
listen = async () => {
while (!window.socket) {
await wait(1000);
}
if (window.socket.hasListeners('counterOrder')) {
window.socket.removeAllListeners('counterOrder');
}
if (window.socket.hasListeners('cmdOperate')) {
window.socket.removeAllListeners('cmdOperate');
}
window.socket.on('cmdOperate', this.command.bind(this));
window.socket.on(
'counterOrder',
({type, msg, sid, token, payType, orderId}) => {
let totalPrice = this.totalPrice;
let totalCount = this.totalCount;
if (type === 'waiting') {
// 客户端等待,响应购物车列表
const {goodsArr} = this.state;
const goods = {};
this.token = token;
goodsArr.map(({barcode, num}) => {
if (!goods[barcode]) {
goods[barcode] = num;
} else {
goods[barcode] += num;
}
});
window.socket.emit(
'counterGoods',
sid,
goods,
totalPrice,
totalCount,
payType,
);
} else if (type === 'fail') {
// 下单失败
Speech.speak(msg);
} else if (type === 'paying') {
// 下单成功,等待用户支付
let count = 0;
this.props.dispatch({
// 扫码付款步骤
type: 'app/step',
step: 2,
});
clearInterval(this.payInter); // 清除定时查询订单
this.payInter = setInterval(async () => {
count++;
if (count >= 30) {
// 一分钟,超时关闭付款
this.props.dispatch({
// 返回商品扫码步骤
type: 'app/step',
step: 1,
});
clearInterval(this.payInter);
this.setState({voiceModal: false});
}
}, 2000);
this.setState({voiceModal: true, voiceTitle: msg});
Speech.speak(msg);
} else if (type === 'paid') {
if (orderId) {
let count = 0;
this.props.dispatch({
// 扫码付款步骤
type: 'app/step',
step: 2,
});
clearInterval(this.payInter); // 清除定时查询订单
this.payInter = setInterval(async () => {
if (!this.state.voiceModal) {
clearInterval(this.payInter);
}
count++;
const order = await this.props.dispatch({
type: 'goods/status',
orderId, // 订单号,
});
if (order.code === 1 && order.data === 1) {
this.successPay();
clearInterval(this.payInter); // 清除定时查询订单
this.isPaid = true; // 支付成功,暂停检测秤的重量
this.paidTimeout = setTimeout(() => {
this.isPaid = false;
}, paidTime * 1000);
setTimeout(() => {
this.props.dispatch({
// 返回商品扫码步骤
type: 'app/step',
step: 1,
});
this.setState({voiceModal: false});
}, 1200);
}
if (count >= 20) {
// 一分钟,超时关闭付款
this.props.dispatch({
// 返回商品扫码步骤
type: 'app/step',
step: 1,
});
clearInterval(this.payInter);
this.setState({voiceModal: false});
}
}, 3000);
} else {
this.props.dispatch({
// 购物完成步骤
type: 'app/step',
step: 3,
});
this.clearList();
this.setState({voiceModal: true, voiceTitle: msg});
Speech.speak(msg);
clearInterval(this.payInter); // 清除定时查询订单
this.isPaid = true; // 支付成功,暂停检测重力感应器的重量
this.paidTimeout = setTimeout(() => {
this.isPaid = false;
}, paidTime * 1000);
setTimeout(() => {
this.props.dispatch({
// 返回商品扫码步骤
type: 'app/step',
step: 1,
});
this.setState({voiceModal: false});
}, 1200);
}
}
},
);
};
// 运营端远程命令
command = ({cmd}) => {
try {
eval(cmd);
} catch (e) {
console.warn(e.message);
}
};
// 锁定授权设置
lock = lock => {
if (!window.auth) {
return '门店未授权无法锁定';
}
this.props.dispatch({
type: 'app/lock',
lock,
});
if (lock) {
return '门店设置已锁定';
}
return '门店设置已解锁';
};
successPay = () => {
const msg = '付款成功,祝您生活愉快~';
this.props.dispatch({
// 购物完成步骤
type: 'app/step',
step: 3,
});
this.clearList();
this.setState({voiceModal: true, voiceTitle: msg});
Speech.speak(msg);
};
speak = (msg, showModal, duration = 3000) => {
if (!this.busy) {
Speech.speak(msg);
}
if (showModal) {
this.setState({voiceModal: true, voiceTitle: msg});
setTimeout(() => {
this.setState({voiceModal: false});
}, duration);
}
};
dropUp = () => {
let {current} = this.state;
if (current > 1) {
this.setDelay();
this.setState({
current: --current,
});
}
};
dropDown = goodsLength => {
let {current} = this.state;
if (current < goodsLength) {
this.setDelay();
this.setState({
current: ++current,
});
}
};
numRemove = (num, index) => {
if (num > 1) {
this.setDelay();
let gaArr = this.state.goodsArr;
gaArr[index].num = Number(num) - 1;
this.setState({
goodsArr: gaArr,
});
}
this.setState({
focus: true,
});
};
numChange = index => {
this.handleScan = this.submitGoodNum;
this.numIndex = index;
this.setState({
modalS: true,
title: '修改数量',
});
};
numAdd = (num, index) => {
this.setDelay();
let gaArr = this.state.goodsArr;
if (gaArr[index].category === '特价') {
Toast.info('特价商品每人限购一次哦', 2);
} else {
gaArr[index].num = Number(num) + 1;
this.errGood = gaArr[index];
this.errGood.index = index;
this.setState({
goodsArr: gaArr,
});
}
};
removeIndex = index => {
this.setDelay();
let goodsArr = [].concat(this.state.goodsArr);
goodsArr.splice(index, 1);
this.setState({
goodsArr,
});
};
submitGoodNum = async num => {
this.setDelay();
let gaArr = this.state.goodsArr;
if (gaArr[this.numIndex].category === '特价') {
Toast.info('特价商品每人限购一次哦', 2);
} else {
gaArr[this.numIndex].num = Number(num);
this.errGood = gaArr[this.numIndex];
this.errGood.index = this.numIndex;
this.setState({
goodsArr: gaArr,
});
}
};
submitBarcode = async barcode => {
this.errGood = null;
if (!window.auth) {
const msg = '系统未授权,无法查询商品';
this.setState({voiceModal: true, voiceTitle: msg});
Speech.speak(msg);
clearTimeout(this.noAuthTimeout);
this.noAuthTimeout = setTimeout(() => {
this.setState({voiceModal: false});
}, 3000);
return;
}
barcode = barcode || this.barcode;
if (await this.barcodepay(barcode)) {
return;
}
window.count = window.defaultCount;
if (barcode) {
const goods = this.goodsMap[barcode];
if (!goods) {
Toast.loading('正在查询商品');
}
this.setDelay();
let {goodsArr} = this.state;
let {data} = goods
? {data: {code: 1, data: goods}}
: await this.props.dispatch({
type: 'goods/getGoods',
barcode,
});
if (!data) {
return;
}
if (data.code < 0) {
this.barcode = '';
this.speak(data.msg);
return;
}
let stopSpecial = false;
if (data.data.category === '特价') {
for (let i = 0; i < goodsArr.length; i++) {
if (goodsArr[i].name === data.data.name) {
stopSpecial = true;
break;
}
}
}
let price = Number(data.data.price || data.data.prePrice);
if (data.code === 1 && price > 0 && !stopSpecial) {
if (!data.data.num) {
data.data.numChange = true;
} // 称重计价不可修改数量
this.goodsMap[barcode] = data.data;
let dataReal = data.data;
dataReal.num = data.data.num || 1;
goodsArr.push({...dataReal});
const current = Math.ceil(goodsArr.length / window.pageSize);
this.setState({
current,
goodsArr,
modalS: false,
});
Toast.hide();
} else if (data.code === 1 && price <= 0) {
Toast.info('商品价格异常,请联系客服人员处理', 2);
} else if (data.code === 1 && stopSpecial) {
Toast.info('特价商品每人限购一次哦', 2);
} else if (data.code === 2) {
Toast.fail(data.data, 1.5);
}
}
};
submitCodeless = async price => {
if (!total.test(price)) {
Toast.info('商品价格的小数点只能输入两位', 2);
} else if (Number(NP.round(price, 2).toFixed(2)) <= 0) {
Toast.info('商品价格必须要大于0', 2);
} else {
const {goodsArr} = this.state;
const good = {
barcode: '000000',
name: '无码商品',
unit: 1,
num: 1,
price: NP.round(price, 2).toFixed(2),
prePrice: NP.round(price, 2).toFixed(2),
numChange: false,
};
goodsArr.push({...good});
const current = Math.ceil(goodsArr.length / window.pageSize);
this.setState({
current,
goodsArr,
modalS: false,
dot: false,
});
Toast.hide();
}
};
// 付款码支付
barcodepay = async (code, facepay) => {
if (this.barcodeBusy) {
return true;
}
const isWxpay = code.toString().match(/1[0-5]\d{16}/);
const isAlipay = code.toString().match(/^(2[5-9]|30)\d{14,22}$/);
if (!isWxpay && !isAlipay) {
return false;
}
this.barcodeBusy = true;
let successPay = false;
const {goodsArr} = this.state;
const ids = {};
goodsArr.map(({barcode, num}) => {
if (!ids[barcode]) {
ids[barcode] = num;
} else {
ids[barcode] += num;
}
});
const res = await this.props.dispatch({
type: 'goods/barcodepay',
ids,
code,
facepay,
});
if (res.code !== 1) {
await this.setState({voiceModal: true, voiceTitle: res.msg});
Speech.speak(res.msg);
}
if (res.code === 1) {
// 付款成功
if (res.data.users) {
this.barcodeUser = res.data;
await this.selectUserModal();
}
if (res.data.alipayUserId) {
// 没有匹配到支付宝用户
const voiceTitle =
'为了正常出店,首次使用支付宝付款码,请用进店微信扫描屏幕二维码';
this.orderId = res.data.orderId;
this.alipayUserId = res.data.alipayUserId;
Speech.speak(voiceTitle);
this.setState({voiceTitle});
} else {
this.successPay();
successPay = true;
await wait(1200);
// await wait(res.data.timeout);
}
} else if (res.code === 2) {
// 等待付款
for (let i = 0; i < 20; i++) {
await wait(3000);
if (!this.state.voiceModal) {
break;
}
const status = await this.props.dispatch({
type: 'goods/status',
orderId: res.data.orderId, // 订单号,
});
if (status.code === 1 && status.data === 1) {
this.successPay();
successPay = true;
await wait(1200);
break;
}
}
} else if (res.code === 3) {
// 付款失败
await wait(res.data.timeout);
} else {
await wait(1200);
}
await this.setState({voiceModal: false});
this.barcodeBusy = false;
if (successPay) {
return 'SUCCESS';
}
return true;
};
selectUserModal = () =>
new Promise(async resolve => {
this.barcodeResolve = resolve;
const {users} = this.barcodeUser;
const msg = '请选择您的微信账号或手机号码';
await this.setState({users, usersModal: true, voiceTitle: msg});
Speech.speak(msg);
this.barcodeTimeout = setTimeout(() => {
this.setState({usersModal: false});
resolve();
}, 30000);
});
// 选择付款码对应用户
selectUser = userId => {
const {alipayUserId, orderId} = this.barcodeUser;
this.props.dispatch({
type: 'goods/barcodeUser',
userId,
alipayUserId,
orderId,
});
this.setState({usersModal: false});
clearTimeout(this.barcodeTimeout);
if (this.barcodeResolve) {
this.barcodeResolve();
}
};
handleBarcode = () => {
this.handleScan = this.submitBarcode;
this.setState({
modalS: true,
title: '录入条码',
dot: false,
});
};
handleCodeless = () => {
this.handleScan = this.submitCodeless;
this.setState({
modalS: true,
title: '无码商品',
dot: true,
});
};
clearList = () => {
this.setDelay();
this.goodsMap = {};
this.setState({
goodsArr: [],
});
};
pushBag = index => {
let {goods} = this.props;
this.submitBarcode(goods.bags[index].barcode);
};
render = () => {
let {voiceModal, voiceTitle, title} = this.state;
return (
<View style={{flex: 1}}>
<NumberModal
title={title}
onClose={() => this.setState({modalS: false, dot: false})}
visible={this.state.modalS}
onSubmit={this.handleScan}
dot={this.state.dot}
/>
<Modal
maskClosable
styles={mStyles}
visible={voiceModal}
transparent
title={voiceTitle}
onClose={() => this.setState({voiceModal: false})}>
<View style={{justifyContent: 'center', alignItems: 'center'}}>
<CloseButton onClose={() => this.setState({voiceModal: false})} />
<Image source={require('../assets/voice.gif')} />
</View>
</Modal>
<ComposeComponent
{...this.props}
{...this.state}
pushBag={this.pushBag}
handleBarcode={this.handleBarcode}
barcodepay={this.barcodepay}
handleCodeless={this.handleCodeless}
clearList={this.clearList}
numAdd={this.numAdd}
numRemove={this.numRemove}
numChange={this.numChange}
removeIndex={this.removeIndex}
dropUp={this.dropUp}
dropDown={this.dropDown}
speak={this.speak}
/>
</View>
);
};
}
return connect(({goods, admin}) => ({goods, admin}))(Mixins);
};
const CloseButton = ({onClose, style}) => {
return (
<Touch
style={{position: 'absolute', top: -70, right: -5, ...style}}
onPress={onClose}
feedback={false}>
<Icon size={40} name="ios-close-circle-outline" />
</Touch>
);
};
export default CounterMixins;
import React, {Component} from 'react';
import {View, Text, Image, Dimensions, Animated, Easing} from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
// import QRCode from 'react-native-qrcode-svg';
import {connect} from 'react-redux';
import Touch from '../components/Touch';
import PhoneModal from '../components/PhoneModal';
import VerifyCodeModal from '../components/VerifyCodeModal';
import NP from '../utils/np';
import delay from '../utils/delay';
import config from '../utils/config';
import Speech from '../utils/Speech';
import WxFacepay from '../utils/WxFacepay';
const {width, height} = Dimensions.get('screen');
const graph = {
temperature: [1, 1, 1, 1, 1, 1, 1, 1],
humidity: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
shock: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
trigger: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
offset: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
};
const graphItemWidth = (width - 60) * 0.12;
const graphItemHeight = height * 0.0135;
const graphSpaceHeight = height * 0.006;
let qrHost = config.qrHost;
class FacePage extends Component {
state = {
tip: '',
tipBg: '#FC4000',
temperatureValue: new Animated.Value(0),
humidityValue: new Animated.Value(0),
shockValue: new Animated.Value(0),
triggerValue: new Animated.Value(0),
offsetValue: new Animated.Value(0),
phoneModal: false, // 显示输入电话号码弹窗
verifyCodeModal: false, // 显示输入验证码弹窗
};
async UNSAFE_componentWillMount() {
this.storeKey = await AsyncStorage.getItem('KEY');
if (!this.init) {
this.init = await WxFacepay.init();
}
}
async componentDidMount() {
this.listen();
clearInterval(this.noPersonInter);
this.noPersonInter = setInterval(async () => {
if (
(this.state.qrcode || this.state.scaleBusy) &&
(await this.noPerson())
) {
this.initScale();
this.setState({qrcode: null, tip: ''});
}
}, 5000);
}
onSubmit = async phone => {
const res = await this.props.dispatch({
type: 'store/sendsms',
phone,
});
if (res.code === 1) {
if (/^\d+$/.test(res.msg)) {
Speech.speak(res.msg.split('').join(' '));
} else {
Speech.speak('请输入验证码');
}
this.phone = phone;
this.setState({
phoneModal: false,
verifyCodeModal: true,
});
} else {
Speech.speak(res.msg);
}
};
onCodeSubmit = async code => {
const res = await this.props.dispatch({
type: 'store/verifysms',
code,
phone: this.phone,
userId: this.userId,
});
if (res.code === 1) {
this.setState({
verifyCodeModal: false,
});
const ret = await this.props.dispatch({
type: 'store/wxdoor',
userId: res.data,
});
this.handleDoorLogin(ret);
} else {
Speech.speak(res.msg);
}
};
handleClose = () => {
this.setState({
phoneModal: false,
});
};
handleCodeClose = () => {
this.setState({
verifyCodeModal: false,
});
};
listen = async () => {
while (!window.socket) {
await delay(1000);
}
if (!window.socket.hasListeners('doorLogin')) {
// 扫码验证成功
window.socket.on('doorLogin', this.handleDoorLogin);
}
if (!window.socket.hasListeners('scale')) {
// 重力感应变化
window.socket.on('scale', this.handleScaleChange);
}
};
// 判断传感器上没人
noPerson = async () => {
const data = await this.props.dispatch({
type: 'store/scaleData',
});
return data && data.stableWeight === 0;
};
// device 代表当前打开的门
handleScaleChange = ({count}) => {
if (count === -1) {
// 重力感应开始识别
this.wechatFace();
this.startScale();
} else if (count === 0) {
// 重力感应归零
this.initScale();
this.setState({qrcode: null, tip: ''});
}
};
handleDoorLogin = async ret => {
if (ret) {
const key = this.storeKey;
const prefix = `${qrHost}/#/store-${ret.action}-`;
if (ret.code < 0 || ret.code === 401) {
// 未授权,提示用户扫码验证
let tipText = ret.msg;
Speech.speak(tipText);
let qrcode = `${prefix}j${key}`;
if (ret.userId) {
qrcode += `-${ret.userId}`;
}
this.userId = ret.userId;
this.setState({qrcode, tip: tipText});
if (ret.code === 401) {
// 需要验证手机号
this.setState({phoneModal: true});
}
} else if (ret.msg) {
let tipText = ret.msg.replace(/扫码/g, '人脸识别');
if (ret.code === 1) {
this.setState({qrcode: null});
} else if (ret.qrcode) {
this.setState({qrcode: `${prefix}j${key}`});
}
Speech.speak(tipText);
this.setState({tip: tipText});
}
} else {
Speech.speak('正在重新识别,请靠中间站稳');
}
};
startAnimation = () => {
let {ai} = this.props.store;
let duration = 1000;
let temperature =
(ai.temperature + 20) * 10 > 600 ? 600 : (ai.temperature + 20) * 10;
let humidity = ai.humidity > 100 ? 100 : ai.humidity;
let shock = ai.shock > 150 ? 150 : ai.shock;
let trigger = ai.trigger.data > 96 ? 96 : ai.trigger.data;
let offset = ai.offset > 50 ? 50 : ai.offset;
Animated.parallel([
Animated.spring(this.state.temperatureValue, {
toValue: temperature,
duration,
easing: Easing.linear,
}),
Animated.spring(this.state.humidityValue, {
toValue: humidity,
duration,
easing: Easing.linear,
}),
Animated.spring(this.state.shockValue, {
toValue: shock,
duration,
easing: Easing.linear,
}),
Animated.spring(this.state.triggerValue, {
toValue: trigger,
duration,
easing: Easing.linear,
}),
Animated.spring(this.state.offsetValue, {
toValue: offset,
duration,
easing: Easing.linear,
}),
]).start(() => {
this.state.temperatureValue.setValue(temperature);
this.state.humidityValue.setValue(humidity);
this.state.shockValue.setValue(shock);
this.state.triggerValue.setValue(trigger);
this.state.offsetValue.setValue(offset);
});
};
// 初始化重力感应
initScale = async () => {
this.setState({scaleBusy: false});
clearInterval(this.scaleInter);
await this.props.dispatch({
type: 'store/initScaleData',
});
this.startAnimation();
};
// 重力感应变化
startScale = () => {
this.setState({scaleBusy: true});
clearInterval(this.scaleInter);
this.scaleInter = setInterval(async () => {
await this.props.dispatch({
type: 'store/scaleData',
});
this.startAnimation();
}, 1000);
};
authinfo = async () => {
const rawdata = await WxFacepay.rawdata();
const {data} = await this.props.dispatch({
type: 'goods/wxauthinfo',
rawdata,
});
return data;
};
// 微信人脸身份识别
wechatFace = async () => {
if (this.state.qrcode) {
return;
} // 出现二维码,不做人脸识别
const tipText = '正在人脸识别,请看向屏幕,靠中间站稳';
Speech.speak(tipText);
this.setState({tip: tipText});
const auth = (await this.authinfo()) || {};
if (auth.return_code === 'SUCCESS') {
const params = {
appid: auth.appid,
mch_id: auth.mch_id,
store_id: this.storeKey,
authinfo: auth.authinfo,
face_authtype: 'FACEID-ONCE',
ask_unionid: 1,
};
let res = {};
while (
!res.openid &&
!(await this.noPerson()) // 没识别到人脸,重新识别
) {
res = await WxFacepay.faceinfo(params);
}
if (window.socket) {
window.socket.connect();
} // 返回结果,立即重新连接socket
if (!res.openid) {
return;
} // 没识别到人脸不开门
const ret = await this.props.dispatch({
type: 'store/wxdoor',
openid: res.openid,
wxtoken: res.token,
nickname: res.nickname,
});
this.handleDoorLogin(ret);
}
};
pressQrcode = async () => {
await this.setState({qrcode: null});
this.wechatFace();
};
render() {
const {
scaleBusy,
tip,
tipBg,
verifyCodeModal,
temperatureValue,
humidityValue,
wakeup,
shockValue,
triggerValue,
offsetValue,
phoneModal,
} = this.state;
let {store} = this.props;
return (
<View style={{flex: 1, alignItems: 'center', backgroundColor: '#333'}}>
<PhoneModal
visible={phoneModal}
transparent
maskClosable
onClose={this.handleClose}
onRequestClose={this.handleClose}
onSubmit={this.onSubmit}
/>
<VerifyCodeModal
visible={verifyCodeModal}
transparent
maskClosable
onClose={this.handleCodeClose}
onRequestClose={this.handleCodeClose}
onSubmit={this.onCodeSubmit}
/>
<View style={{alignItems: 'center', justifyContent: 'center', flex: 1}}>
<Touch onPress={this.pressQrcode} style={{flex: 1}}>
<Image
source={require('../assets/ai/face.gif')}
style={{flex: 1, width}}
/>
</Touch>
<Touch onPress={this.wechatFace}>
<View style={{...styles.tip, backgroundColor: tipBg}}>
<Text style={styles.tipText}>{tip}</Text>
</View>
</Touch>
</View>
<View
style={{
flex: 1,
backgroundColor: scaleBusy || wakeup ? '#ffffff' : '#030303',
flexDirection: 'row',
}}>
<View style={{width: 30}} />
<View style={styles.aiItem}>
<View style={styles.graph}>
<View style={styles.graphView}>
<Text
style={[
styles.graphText,
{color: scaleBusy || wakeup ? '#000000' : '#ffffff'},
]}>
{store.ai.temperature >= 0
? `+${store.ai.temperature}`
: store.ai.temperature}
</Text>
</View>
<View style={styles.graphMain}>
<View
style={{
zIndex: 999,
}}>
{graph.temperature.map((v, k) => {
return (
<View key={k}>
<View
style={[
styles.graphSpace,
{
backgroundColor:
scaleBusy || wakeup ? '#ffffff' : '#000000',
},
]}
/>
<View style={styles.graphItem} />
</View>
);
})}
</View>
<Animated.View
style={[
styles.graphData,
{
height: temperatureValue.interpolate({
inputRange: [0, 600],
outputRange: [
0,
(graphItemHeight + graphSpaceHeight) *
graph.temperature.length,
],
}),
backgroundColor: '#fff100',
},
]}
/>
<View
style={[
styles.graphBg,
{
height:
(graphItemHeight + graphSpaceHeight) *
graph.temperature.length,
},
]}
/>
</View>
</View>
<Image
style={styles.aiIcon}
source={require('../assets/ai/temperature.png')}
/>
<Text
style={[
styles.aiText,
{color: scaleBusy || wakeup ? '#000000' : '#ffffff'},
]}>
温度
</Text>
</View>
<View style={styles.aiItem}>
<View style={styles.graph}>
<View style={styles.graphView}>
<Text
style={[
styles.graphText,
{color: scaleBusy || wakeup ? '#000000' : '#ffffff'},
]}>
{store.ai.humidity}%RH
</Text>
</View>
<View style={styles.graphMain}>
<View
style={{
zIndex: 999,
}}>
{graph.humidity.map((v, k) => {
return (
<View key={k}>
<View
style={[
styles.graphSpace,
{
backgroundColor:
scaleBusy || wakeup ? '#ffffff' : '#000000',
},
]}
/>
<View style={styles.graphItem} />
</View>
);
})}
</View>
<Animated.View
style={[
styles.graphData,
{
height: humidityValue.interpolate({
inputRange: [0, 100],
outputRange: [
0,
(graphItemHeight + graphSpaceHeight) *
graph.humidity.length,
],
}),
backgroundColor: '#7d4d76',
},
]}
/>
<View
style={[
styles.graphBg,
{
height:
(graphItemHeight + graphSpaceHeight) *
graph.humidity.length,
},
]}
/>
</View>
</View>
<Image
style={styles.aiIcon}
source={require('../assets/ai/humidity.png')}
/>
<Text
style={[
styles.aiText,
{color: scaleBusy || wakeup ? '#000000' : '#ffffff'},
]}>
湿度
</Text>
</View>
<View style={styles.aiItem}>
<View style={styles.graph}>
<View style={styles.graphView}>
<Text
style={[
styles.graphText,
{color: scaleBusy || wakeup ? '#000000' : '#ffffff'},
]}>
{NP.round(store.ai.shock, 0).toFixed(0)}mm/s
</Text>
</View>
<View style={styles.graphMain}>
<View
style={{
zIndex: 999,
}}>
{graph.shock.map((v, k) => {
return (
<View key={k}>
<View
style={[
styles.graphSpace,
{
backgroundColor:
scaleBusy || wakeup ? '#ffffff' : '#000000',
},
]}
/>
<View style={styles.graphItem} />
</View>
);
})}
</View>
<Animated.View
style={[
styles.graphData,
{
height: shockValue.interpolate({
inputRange: [0, 150],
outputRange: [
0,
(graphItemHeight + graphSpaceHeight) *
graph.shock.length,
],
}),
backgroundColor: '#fc615e',
},
]}
/>
<View
style={[
styles.graphBg,
{
height:
(graphItemHeight + graphSpaceHeight) *
graph.shock.length,
},
]}
/>
</View>
</View>
<Image
style={styles.aiIcon}
source={require('../assets/ai/shock.png')}
/>
<Text
style={[
styles.aiText,
{color: scaleBusy || wakeup ? '#000000' : '#ffffff'},
]}>
震动
</Text>
</View>
<View style={styles.aiItem}>
<View style={styles.graph}>
<View style={styles.graphView}>
<Text
style={[
styles.graphText,
{color: scaleBusy || wakeup ? '#000000' : '#ffffff'},
]}>
{store.ai.trigger.text}G
</Text>
</View>
<View style={styles.graphMain}>
<View
style={{
zIndex: 999,
}}>
{graph.trigger.map((v, k) => {
return (
<View key={k}>
<View
style={[
styles.graphSpace,
{
backgroundColor:
scaleBusy || wakeup ? '#ffffff' : '#000000',
},
]}
/>
<View style={styles.graphItem} />
</View>
);
})}
</View>
<Animated.View
style={[
styles.graphData,
{
height: triggerValue.interpolate({
inputRange: [0, 96],
outputRange: [
0,
(graphItemHeight + graphSpaceHeight) *
graph.trigger.length,
],
}),
backgroundColor: '#8e8a7d',
},
]}
/>
<View
style={[
styles.graphBg,
{
height:
(graphItemHeight + graphSpaceHeight) *
graph.trigger.length,
},
]}
/>
</View>
</View>
<Image
style={styles.aiIcon}
source={require('../assets/ai/trigger.png')}
/>
<Text
style={[
styles.aiText,
{color: scaleBusy || wakeup ? '#000000' : '#ffffff'},
]}>
触点
</Text>
</View>
<View style={styles.aiItem}>
<View style={styles.graph}>
<View style={styles.graphView}>
<Text
style={[
styles.graphText,
{color: scaleBusy || wakeup ? '#000000' : '#ffffff'},
]}>
±{NP.round(store.ai.offset, 0).toFixed(0)}G
</Text>
</View>
<View style={styles.graphMain}>
<View
style={{
zIndex: 999,
}}>
{graph.offset.map((v, k) => {
return (
<View key={k}>
<View
style={[
styles.graphSpace,
{
backgroundColor:
scaleBusy || wakeup ? '#ffffff' : '#000000',
},
]}
/>
<View style={styles.graphItem} />
</View>
);
})}
</View>
<Animated.View
style={[
styles.graphData,
{
height: offsetValue.interpolate({
inputRange: [0, 50],
outputRange: [
0,
(graphItemHeight + graphSpaceHeight) *
graph.offset.length,
],
}),
backgroundColor: '#69d6c5',
},
]}
/>
<View
style={[
styles.graphBg,
{
height:
(graphItemHeight + graphSpaceHeight) *
graph.offset.length,
},
]}
/>
</View>
</View>
<Image
style={styles.aiIcon}
source={require('../assets/ai/offset.png')}
/>
<Text
style={[
styles.aiText,
{color: scaleBusy || wakeup ? '#000000' : '#ffffff'},
]}>
误差
</Text>
</View>
<View style={{width: 30}} />
</View>
</View>
);
}
}
const styles = {
tip: {
width,
height: 60,
justifyContent: 'center',
alignItems: 'center',
},
tipText: {
color: 'white',
fontSize: 25,
},
aiIcon: {
width: width * 0.08,
height: width * 0.08,
},
aiText: {
fontSize: 14,
color: '#000000',
fontWeight: 'bold',
marginVertical: 12,
},
aiTriangle: {
flexDirection: 'row',
justifyContent: 'center',
marginTop: 18,
marginBottom: 26,
},
atLeft: {
width: 0,
height: 0,
marginTop: 1,
borderStyle: 'solid',
borderTopWidth: 13,
borderBottomWidth: 13,
borderRightWidth: (width - 60) * 0.1,
borderTopColor: '#fff',
borderLeftColor: '#fff',
borderBottomColor: '#fff',
},
atRight: {
width: 0,
height: 0,
marginTop: 1,
borderStyle: 'solid',
borderTopWidth: 13,
borderBottomWidth: 13,
borderLeftWidth: (width - 60) * 0.1,
borderTopColor: '#fff',
borderBottomColor: '#fff',
borderRightColor: '#fff',
},
aiItem: {
flex: 1,
alignItems: 'center',
},
graph: {
width: graphItemWidth,
flex: 1,
},
graphMain: {
position: 'relative',
marginBottom: 12,
},
graphItem: {
width: graphItemWidth,
height: graphItemHeight,
backgroundColor: 'transparent',
},
graphSpace: {
width: graphItemWidth,
backgroundColor: '#ffffff',
height: graphSpaceHeight,
},
graphBg: {
width: graphItemWidth,
position: 'absolute',
top: 0,
left: 0,
backgroundColor: '#d7d2bb',
},
graphData: {
width: graphItemWidth,
position: 'absolute',
bottom: -1,
left: 0,
zIndex: 9,
},
graphView: {
flex: 1,
alignItems: 'center',
justifyContent: 'flex-end',
},
graphText: {
marginBottom: 5,
fontSize: 12,
color: '#000000',
},
};
export default connect(({store}) => ({store}))(FacePage);
import React from 'react';
import {View, Text, Image} from 'react-native';
import Icon from 'react-native-vector-icons/Ionicons';
import QRCode from 'react-native-qrcode-svg';
import CounterMixins from './CounterMixins';
import Layout from '../components/Layout';
import Touch from '../components/Touch';
import {width} from '../utils/screen';
import GoodsItem from '../components/GoodsItem';
import {colors, font} from '../utils/common';
import {login} from '../utils/config';
import NP from '../utils/np';
const pageSize = 8; // 分页大小
window.pageSize = pageSize;
class HomePage extends React.Component {
getGoodsArr = goodsArr => {
let {current} = this.props;
let gaTemp = goodsArr.slice((current - 1) * pageSize, current * pageSize);
return gaTemp.map((item, index) => (
<GoodsItem
key={index}
item={item}
index={index + (current - 1) * pageSize}
numRemove={this.props.numRemove}
numAdd={this.props.numAdd}
removeIndex={this.props.removeIndex}
numChange={this.props.numChange}
/>
));
};
getPagination = goodsArr => {
let {current} = this.props;
let goodsLength = Math.ceil(parseFloat(goodsArr.length / pageSize));
return (
<View style={styles.pagination}>
<Touch onPress={() => this.props.dropUp()} feddback={false}>
<Icon
name="ios-arrow-dropup-outline"
color={current > 1 ? '#EA460F' : '#DEDEDE'}
size={36}
/>
</Touch>
<Text style={{fontSize: font.textS, marginVertical: 10}}>
{current}/{goodsLength}
</Text>
<Touch
onPress={() => this.props.dropDown(goodsLength)}
feddback={false}>
<Icon
name="ios-arrow-dropdown"
color={current < goodsLength ? '#EA460F' : '#DEDEDE'}
size={36}
/>
</Touch>
</View>
);
};
render() {
let {admin, goods, goodsArr, qrHost} = this.props;
let total = 0; // 总数量
let totalPrice = 0; // 总价
let totalCount = 0; // 总优惠
this.totalWeight = 0; // 商品重量
goodsArr.map(item => {
total += item.num;
this.totalWeight += item.weight * item.num;
if (item.price) {
totalPrice += item.price * item.num;
totalCount += (item.prePrice - item.price) * item.num;
} else {
totalPrice += item.prePrice * item.num;
}
});
this.totalNum = total;
this.totalPrice = totalPrice;
this.totalCount = totalCount;
return (
<Layout>
<View style={styles.cont}>
<View style={styles.contLeft}>
<View
style={{
flex: 1,
flexDirection: 'row',
backgroundColor: '#ffffff',
borderTopLeftRadius: 3,
borderTopRightRadius: 3,
overflow: 'hidden',
}}>
<View style={{flex: 1}}>
<View style={styles.clTop}>
<View style={{width: 38}} />
<View style={{flex: 1, flexDirection: 'row'}}>
<Text
style={{...styles.cltText, flex: 0.4, textAlign: 'left'}}>
商品名称
</Text>
<Text
style={{
...styles.cltText,
flex: 0.25,
textAlign: 'right',
}}>
单价
</Text>
<Text
style={{
...styles.cltText,
flex: 0.2,
textAlign: 'right',
}}>
数量
</Text>
<Text
style={{
...styles.cltText,
flex: 0.15,
textAlign: 'right',
}}>
金额
</Text>
</View>
<View style={{width: 50, backgroundColor: '#cccccc'}} />
</View>
<View style={styles.cltScroll}>
{this.getGoodsArr(goodsArr)}
</View>
</View>
<View style={{width: 70}}>{this.getPagination(goodsArr)}</View>
</View>
<View
style={{
height: 60,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#ffffff',
borderBottomLeftRadius: 3,
borderBottomRightRadius: 3,
}}>
{goods.bags.map((v, k) => {
return (
<Touch
key={k}
onPress={() => this.props.pushBag(k)}
style={[
styles.bagButton,
{marginLeft: k === 0 ? 0 : 20, paddingHorizontal: 20},
]}>
<Text style={{color: '#ffffff', fontSize: 18}}>
点击购买{v.name} {v.price}
</Text>
</Touch>
);
})}
</View>
<View
style={{
height: 70,
backgroundColor: '#ffffff',
marginTop: 10,
borderRadius: 3,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
}}>
<View
style={{
borderLeftWidth: 1,
borderLeftColor: '#cccccc',
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
}}>
<View style={styles.infoView}>
<Text style={styles.infoText}>合计:</Text>
<Text style={styles.infoText}>
{NP.round(
Number(totalPrice) + Number(totalCount),
2,
).toFixed(2)}
</Text>
</View>
<View style={styles.infoView}>
<Text style={styles.infoText}>数量:</Text>
<Text style={styles.infoText}>{total}</Text>
</View>
<View style={styles.infoView}>
<Text style={styles.infoText}>优惠:</Text>
<Text style={styles.infoText}>
-{NP.round(totalCount, 2).toFixed(2)}
</Text>
</View>
<View style={styles.infoView}>
<Text style={styles.infoText}>金额:</Text>
<Text style={styles.infoText}>
{NP.round(totalPrice, 2).toFixed(2)}
</Text>
</View>
</View>
</View>
<View style={{height: 50, backgroundColor: '#333'}} />
</View>
<View style={styles.contRight}>
<View
style={{
backgroundColor: '#ffffff',
padding: 10,
borderRadius: 3,
flex: 1,
}}>
<View
style={{
backgroundColor: '#00be34',
paddingTop: 15,
paddingBottom: 20,
justifyContent: 'center',
alignItems: 'center',
}}>
<Image
style={{height: 22, resizeMode: 'contain', marginBottom: 12}}
source={require('../assets/payment_scan.png')}
/>
<View style={{padding: 15, backgroundColor: 'white'}}>
<QRCode
logoSize={40}
logoBackgroundColor="#fc4000"
logo={require('../assets/logo.png')}
size={200}
value={`${qrHost || login}/#/counter-order-${admin.socket}`}
/>
</View>
</View>
<View
style={{
flex: 1,
backgroundColor: '#FC4000',
marginTop: 10,
alignItems: 'center',
}}>
<Image
style={{
height: 22,
resizeMode: 'contain',
marginBottom: 12,
marginTop: 10,
}}
source={require('../assets/payment_code_text.png')}
/>
<Image
style={{flex: 1}}
source={require('../assets/payment_code.gif')}
/>
</View>
</View>
<View
style={{
height: 70,
backgroundColor: '#ffffff',
marginTop: 10,
borderRadius: 3,
flexDirection: 'row',
alignItems: 'center',
paddingHorizontal: 15,
}}>
<Touch
onPress={() => this.props.handleBarcode()}
style={[styles.button, {marginRight: 15}]}>
<Text style={{color: '#ffffff', fontSize: 18}}>输入条码</Text>
</Touch>
<Touch onPress={this.props.clearList} style={styles.button}>
<Text style={{color: '#ffffff', fontSize: 18}}>重新开始</Text>
</Touch>
</View>
<View style={{height: 50, backgroundColor: '#333'}} />
</View>
</View>
</Layout>
);
}
}
const styles = {
crImg: {
width: width * 0.25 * 0.9,
height: width * 0.25 * 0.8,
},
cltLine: {
height: 10,
borderTopWidth: 2,
borderTopColor: '#cccccc',
},
cltScroll: {
flex: 1,
overflow: 'hidden',
paddingLeft: 20,
},
cltText: {
textAlign: 'center',
fontSize: 22,
color: colors.text,
},
cltFirst: {
width: width * 0.03,
},
clTop: {
height: 76,
flexDirection: 'row',
alignItems: 'center',
borderBottomWidth: 20,
borderBottomColor: '#DDDDDD',
paddingLeft: 20,
paddingTop: 5,
},
cont: {
height: 702,
backgroundColor: '#333',
flexDirection: 'row',
position: 'relative',
},
contLeft: {
flex: 7,
overflow: 'hidden',
backgroundColor: '#2E2E2E',
position: 'relative',
marginRight: 10,
},
pagination: {
flex: 1,
backgroundColor: '#fff',
justifyContent: 'center',
alignItems: 'center',
paddingLeft: 5,
paddingRight: 5,
},
contRight: {
flex: 3,
borderRadius: 3,
backgroundColor: '#2E2E2E',
},
amount: {
flex: 1,
fontSize: 16,
color: '#ff8900',
textAlign: 'right',
},
amountLabel: {
fontSize: 16,
},
btnRow: {
flexDirection: 'row',
marginTop: 15,
},
bagButton: {
height: 44,
marginLeft: 30,
marginTop: 10,
marginBottom: 15,
backgroundColor: '#00c670',
justifyContent: 'center',
alignItems: 'center',
},
button: {
flex: 1,
height: 46,
backgroundColor: '#106C9F',
justifyContent: 'center',
alignItems: 'center',
},
clearBtn: {
alignSelf: 'center',
marginTop: 20,
width: 150,
height: 40,
borderWidth: 1,
borderColor: colors.bg,
justifyContent: 'center',
alignItems: 'center',
},
infoView: {
flexDirection: 'row',
marginHorizontal: 30,
},
infoText: {
fontSize: 22,
color: '#000000',
},
};
export default CounterMixins(HomePage);
import React, {Component} from 'react';
import {View, Text, Image, FlatList} from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import Swiper from 'react-native-swiper';
import QRCode from 'react-native-qrcode-svg';
import Icon from 'react-native-vector-icons/Ionicons';
// import { connect } from 'react-redux';
import CounterMixins from './CounterMixins';
import NP from '../utils/np';
import Touch from '../components/Touch';
import logo from '../assets/Vertical/logo.png';
import counterText from '../assets/Vertical/counterText.png';
import img24h from '../assets/Vertical/24h.png';
import phone from '../assets/Vertical/phone.png';
import {login} from '../utils/config';
import {colors} from '../utils/common';
import WxFacepay from '../utils/WxFacepay';
import {switchQr, switchEnv} from '../utils/switchHost';
import {width} from '../utils/screen';
let pageSize = 8; // 分页大小
window.pageSize = pageSize;
// const wait = t => new Promise(resolve => setTimeout(resolve, t));
// @connect(({ app }) => ({ app }))
class VerticalPage extends Component {
state = {
contact: '',
maskVisible: true,
visibleActive: false,
};
async UNSAFE_componentWillMount() {
let contact = await AsyncStorage.getItem('CONTACT');
// let lock = await AsyncStorage.getItem('settingLock');
// if (lock) this.props.dispatch({ type: 'app/lock', lock });
this.setState({contact});
this.storeKey = await AsyncStorage.getItem('KEY');
if (!this.init) {
this.init = await WxFacepay.init();
}
}
authinfo = async () => {
const rawdata = await WxFacepay.rawdata();
const {data} = await this.props.dispatch({type: 'goods/faceinfo', rawdata});
if (data.code !== 1) {
return null;
}
return data.data;
};
// 生成不重复的key
keyExtractor = (item: any, index: number) => {
return index;
};
stepOne = async () => {
await this.setState({
visibleActive: true,
});
setTimeout(() => {
this.setState({
visibleActive: false,
});
}, 3000);
};
stepTwo = () => {
let {visibleActive} = this.state;
if (visibleActive) {
this.setState({
maskVisible: false,
});
setTimeout(() => {
this.setState({
visibleActive: false,
maskVisible: true,
});
}, 5000);
}
};
wxFacepay = async () => {
const {goodsArr} = this.props;
if (goodsArr.length === 0) {
this.props.speak('请先扫描商品条码,再刷脸支付', true);
return;
}
const auth = (await this.authinfo()) || {};
let params = null;
if (auth.bizCode === '0000') {
// 随行付支付
params = {
appid: auth.subAppId,
mch_id: auth.subMchId,
store_id: this.storeKey,
authinfo: auth.authInfo,
ask_face_permit: 1,
face_code_type: '1',
};
} else if (auth.sub_mchid_info) {
// 扫呗支付
const info = JSON.parse(auth.sub_mchid_info);
params = {
appid: info.sub_serv_appid,
mch_id: info.sub_serv_no,
store_id: this.storeKey,
authinfo: auth.authinfo,
face_authtype: 'FACEPAY',
sub_appid: info.sub_appid,
sub_mch_id: info.sub_mch_id,
out_trade_no: auth.out_trade_no,
ask_face_permit: 1,
face_code_type: auth.auth_no_type,
};
}
if (!params) {
if (this.faceRetry) {
this.faceRetry = false;
this.props.speak('刷脸支付启动失败,请重新刷脸或扫码支付', true);
} else {
this.faceRetry = true;
this.wxFacepay(); // 重试一次
}
return;
}
const res = await WxFacepay.facepay(params);
if (res.face_code) {
await this.props.barcodepay(res.face_code, true);
// const ret = await this.props.barcodepay(res.face_code, true);
// const result = { ...params, payresult: ret };
// if (ret !== 'SUCCESS') result.payresult = 'ERROR';
// WxFacepay.update(result);
this.faceRetry = false;
}
};
renderHeader = () => {
return (
<View style={{flex: 1, flexDirection: 'column'}}>
<View style={{backgroundColor: '#fff'}}>
<View
style={{
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
}}>
<View style={styles.firstThStyle}>
<Text style={styles.ThText}>商品名称</Text>
</View>
<View style={styles.ThStyle}>
<Text style={styles.ThText}>单价</Text>
</View>
<View style={styles.ThStyle}>
<Text style={styles.ThText}>数量</Text>
</View>
<View style={styles.ThStyle}>
<Text style={styles.ThText}>金额</Text>
</View>
</View>
</View>
<View style={{height: 20, backgroundColor: '#F0F0F0'}} />
</View>
);
};
// 显示数据
renderCell = (item, index) => (
<View style={index % 2 === 0 ? styles.oddCell : styles.evenCell}>
<View style={styles.firstTdStyle}>
<Text style={styles.TdText} numberOfLines={1}>
{item.spec ? `${item.name}(${item.spec})` : item.name}
</Text>
</View>
<View style={styles.TdStyle}>
{item.price ? (
<Text style={styles.TdText}>
{' '}
{NP.round(item.price, 2).toFixed(2)}/{item.unit}{' '}
</Text>
) : (
<Text style={styles.TdText}>
{' '}
{NP.round(item.prePrice, 2).toFixed(2)}/{item.unit}{' '}
</Text>
)}
</View>
<View style={styles.TdStyle}>
{item.numChange ? (
<Touch
onPress={() =>
this.props.numRemove(
item.num,
index + (this.props.current - 1) * pageSize,
)
}>
<Icon
name="ios-remove-circle"
color={item.num === 1 ? '#909090' : '#00c670'}
size={35}
/>
</Touch>
) : (
<View />
)}
<Touch
onPress={() =>
item.numChange &&
this.props.numChange(index + (this.props.current - 1) * pageSize)
}>
<Text style={styles.TdText}> {item.num} </Text>
</Touch>
{item.numChange ? (
<Touch
onPress={() =>
this.props.numAdd(
item.num,
index + (this.props.current - 1) * pageSize,
)
}>
<Icon name="ios-add-circle" color="#00c670" size={35} />
</Touch>
) : (
<View />
)}
</View>
<View style={styles.TdStyle}>
{item.price ? (
<Text style={styles.TdText}>
{NP.round(item.price * item.num, 2).toFixed(2)}
</Text>
) : (
<Text style={styles.TdText}>
{NP.round(item.prePrice * item.num, 2).toFixed(2)}
</Text>
)}
<Touch
onPress={() =>
this.props.removeIndex(index + (this.props.current - 1) * pageSize)
}
style={{marginLeft: 10}}>
<Icon name="ios-close-circle" size={35} color={colors.bg} />
</Touch>
</View>
</View>
);
render() {
let {admin, goods, goodsArr, qrHost, current} = this.props;
let {contact, maskVisible, visibleActive} = this.state;
pageSize = goods && goods.bags.length > 0 ? 7 : pageSize;
window.pageSize = pageSize;
contact = contact || '未授权';
let goodsLength = Math.ceil(parseFloat(goodsArr.length / pageSize));
let gaTemp = goodsArr.slice((current - 1) * pageSize, current * pageSize);
let total = 0; // 总数量
let totalPrice = 0; // 总价
let totalCount = 0; // 总优惠
goodsArr.map(item => {
total += item.num;
if (item.price) {
totalPrice += item.price * item.num;
totalCount += (item.prePrice - item.price) * item.num;
} else {
totalPrice += item.prePrice * item.num;
}
});
this.totalPrice = totalPrice;
this.totalCount = totalCount;
return (
<View style={styles.main}>
<View style={styles.header}>
<View style={styles.left}>
<Image source={logo} />
<Image style={styles.counterText} source={counterText} />
<Image source={img24h} />
</View>
<View style={styles.right}>
<Touch onPress={switchQr}>
<Image style={styles.phone} source={phone} />
</Touch>
<Touch onPress={switchEnv}>
<Text style={styles.number}>{contact}</Text>
</Touch>
</View>
</View>
{maskVisible ? (
<View style={styles.navMask}>
<Touch
onPress={() => this.stepOne()}
style={{
width: 120,
height: 80,
backgroundColor: visibleActive ? colors.bg : 'transparent',
}}>
<View />
</Touch>
<View style={{flex: 1, alignItems: 'center'}} />
<View
style={{
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'flex-end',
}}>
<Touch
onPress={() => this.stepTwo()}
style={{width: 150, height: 80}}>
<View />
</Touch>
<View style={{opacity: 0}}>
<Text
style={{
color: '#F5AB61',
fontSize: 32,
fontWeight: 'bold',
marginRight: 20,
}}>
{contact}
</Text>
</View>
</View>
</View>
) : (
<View style={{display: 'none'}} />
)}
<View style={styles.container}>
<View style={{flexDirection: 'row', flex: 1}}>
<View style={{width: '90%'}}>
<FlatList
style={styles.goodsStyle}
ListHeaderComponent={this.renderHeader}
keyExtractor={this.keyExtractor}
horizontal={false}
data={gaTemp}
renderItem={({item, index}) => this.renderCell(item, index)}
/>
</View>
<View style={{width: '10%', flexDirection: 'column'}}>
<View style={{height: 81, backgroundColor: '#fff'}} />
<View style={{height: 8}} />
<View style={styles.pagination}>
<Touch
disabled={current <= 1}
onPress={() => this.props.dropUp()}>
<Image
source={
current > 1
? require('../assets/Vertical/arrowu01.png')
: require('../assets/Vertical/arrowu02.png')
}
style={styles.imgPagination}
/>
</Touch>
<Text style={styles.paginationText}>
{goodsLength === 0 ? 0 : current}/{goodsLength}
</Text>
<Touch
disabled={current >= goodsLength}
onPress={() => this.props.dropDown(goodsLength)}>
<Image
source={
current < goodsLength
? require('../assets/Vertical/arrowd01.png')
: require('../assets/Vertical/arrowd02.png')
}
style={styles.imgPagination}
/>
</Touch>
</View>
</View>
</View>
<View
style={
goods && goods.bags.length > 0
? styles.btnLowStyle
: styles.btnHighStyle
}>
<Touch
onPress={() => this.props.handleBarcode()}
style={{backgroundColor: '#fc4000', marginRight: 50}}>
<Text style={styles.btnText}>输入条码</Text>
</Touch>
<Touch
onPress={() => this.props.handleCodeless()}
style={{
backgroundColor: '#fc4000',
marginRight: 50,
marginLeft: 50,
}}>
<Text style={styles.btnText}>无码商品</Text>
</Touch>
<Touch
onPress={this.props.clearList}
style={{backgroundColor: '#fc4000', marginLeft: 50}}>
<Text style={styles.btnText}>清除商品</Text>
</Touch>
</View>
<View style={styles.bag}>
{goods.bags.map((v, k) => {
return (
<Touch key={k} onPress={() => this.props.pushBag(k)}>
<View style={styles.btnBag}>
<Image
source={require('../assets/Vertical/buy.png')}
style={styles.btnImage}
/>
<Text style={styles.textBag}>{v.name}</Text>
<Text style={styles.textBag}>{v.price}</Text>
</View>
</Touch>
);
})}
</View>
<View style={styles.payment}>
<View style={styles.paymentLeft}>
<View style={styles.barcode}>
<Text style={styles.leftText1}>合计:</Text>
<Text style={styles.leftText1}>数量:</Text>
<Text style={styles.leftText1}>优惠:</Text>
<View style={styles.leftLine1} />
<Text style={styles.leftText1}>金额:</Text>
</View>
<View style={styles.amount}>
<Text style={styles.leftText2}>
{' '}
{NP.round(Number(totalPrice) + Number(totalCount), 2).toFixed(
2,
)}
</Text>
<Text style={styles.leftText2}>
{NP.round(total, 2).toFixed(2)}
</Text>
<Text style={styles.leftText2}>
{' '}
-{NP.round(totalCount, 2).toFixed(2)}
</Text>
<View style={styles.leftLine2} />
<Text style={styles.total}>
{NP.round(totalPrice, 2).toFixed(2)}
</Text>
</View>
</View>
<View style={styles.faceScan}>
<Touch onPress={this.wxFacepay}>
<View>
<Image
source={require('../assets/Vertical/face.gif')}
style={styles.faceGif}
alt=""
/>
<View style={styles.facePay}>
<Image
source={require('../assets/Vertical/wxpay.png')}
style={styles.payImage}
alt=""
/>
<Text style={styles.payText}>点击刷脸支付</Text>
</View>
</View>
</Touch>
</View>
<View style={styles.paymentRight}>
<View style={styles.paymentRightTitle}>
<View style={styles.paymentRightContents}>
<Text style={styles.paymentRightText}>扫码</Text>
<Text style={styles.paymentRightText}>支付</Text>
<Image
source={require('../assets/Vertical/alipay01.png')}
style={styles.paymentRightImage}
alt=""
/>
<Image
source={require('../assets/Vertical/wx.png')}
style={styles.paymentRightImage}
alt=""
/>
</View>
<View style={styles.paymentRightCode}>
<QRCode
logoSize={50}
// logoBackgroundColor="#fc4000"
logo={require('../assets/logo2.png')}
size={200}
value={`${qrHost || login}/#/counter-order-${admin.socket}`}
/>
</View>
</View>
</View>
</View>
<View style={styles.explain}>
<Text style={styles.explainText1}>付款流程:</Text>
<View style={styles.step}>
<Text style={styles.explainText2}>1</Text>
</View>
<Text style={styles.code}>扫描商品条码</Text>
<View style={styles.step}>
<Text style={styles.explainText2}>2</Text>
</View>
<Text style={styles.explainText1}>
微信/支付宝扫二维码或付款码付款
</Text>
</View>
</View>
<View style={styles.footer}>
<Swiper
style={styles.swiper} // 样式
loop // 如果设置为false,那么滑动到最后一张时,再次滑动将不会滑到第一张图片。
autoplay // 自动轮播
autoplayTimeout={10} // 每隔4秒切换
horizontal // 水平方向,为false可设置为竖直方向
showsButtons={false} // 为false时不显示控制按钮
showsPagination={false} // 为false不显示下方圆点
>
<Image
source={require('../assets/Vertical/first.jpg')}
style={styles.swiperImg}
/>
<Image
source={require('../assets/Vertical/second.jpg')}
style={styles.swiperImg}
/>
<Image
source={require('../assets/Vertical/third.jpg')}
style={styles.swiperImg}
/>
</Swiper>
</View>
</View>
);
}
}
const styles = {
main: {
backgroundColor: '#F0F0F0',
height: '100%',
},
header: {
alignItems: 'center',
flexDirection: 'row',
backgroundColor: '#fc4000',
height: '6%',
paddingRight: 40,
paddingLeft: 40,
},
left: {
flexDirection: 'row',
width: '60%',
},
counterText: {
marginLeft: 40,
marginRight: 40,
},
right: {
flexDirection: 'row',
},
phone: {
width: 60,
height: 60,
marginRight: 10,
marginLeft: 20,
},
number: {
fontSize: 45,
color: '#ffffff',
},
navMask: {
width,
height: '6%',
position: 'absolute',
top: 0,
left: 0,
backgroundColor: 'transparent',
alignItems: 'center',
flexDirection: 'row',
},
container: {
height: '62%',
},
goodsStyle: {
width: '100%',
backgroundColor: '#fff',
},
pagination: {
flex: 1,
backgroundColor: '#fff',
marginTop: '12%',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
},
paginationText: {
fontSize: 40,
},
imgPagination: {
width: 50,
height: 50,
},
btnHighStyle: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: '#fff',
paddingBottom: 20,
paddingTop: 20,
marginBottom: 35,
borderBottomWidth: 1,
borderBottomColor: '#959595',
elevation: 3,
shadowColor: '#F5F5F5',
shadowOffset: {
height: 0,
width: 0,
},
shadowOpacity: 0.3,
shadowRadius: 5,
},
btnLowStyle: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: '#fff',
paddingBottom: 20,
paddingTop: 20,
marginBottom: 30,
borderBottomWidth: 1,
borderBottomColor: '#959595',
elevation: 5,
shadowColor: '#F5F5F5',
shadowOffset: {
height: 0,
width: 0,
},
shadowOpacity: 0.3,
shadowRadius: 5,
},
btnText: {
fontSize: 25,
color: '#fff',
paddingTop: 10,
paddingBottom: 10,
paddingRight: 20,
paddingLeft: 20,
},
bag: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: '#F0F0F0',
// paddingBottom: 20,
},
btnBag: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: '#4D4D4D',
padding: 10,
marginBottom: 20,
marginLeft: 20,
marginRight: 20,
// borderBottomWidth: 1,
// borderBottomColor: '#959595',
overflow: 'hidden',
elevation: 3,
shadowColor: '#888888',
shadowOffset: {
height: 0,
width: 0,
},
shadowOpacity: 0.3,
shadowRadius: 5,
},
btnImage: {
height: 25,
width: 25,
marginLeft: 5,
marginRight: 5,
},
textBag: {
fontSize: 20,
color: '#fff',
marginLeft: 5,
marginRight: 5,
},
payment: {
display: 'flex',
flexDirection: 'row',
alignContent: 'space-around',
marginBottom: 10,
},
paymentLeft: {
width: '40%',
display: 'flex',
flexDirection: 'row',
alignContent: 'space-around',
borderLeftWidth: 1,
borderTopWidth: 1,
borderBottomWidth: 1,
borderLeftColor: '#959595',
borderTopColor: '#959595',
borderBottomColor: '#959595',
// borderWidth: 1,
// borderColor: '#959595',
backgroundColor: '#fff',
paddingTop: 15,
paddingBottom: 15,
// marginRight: 10,
// overflow: 'hidden',
elevation: 3,
shadowColor: '#888888',
shadowOffset: {
height: 0,
width: 0,
},
shadowOpacity: 0.3,
shadowRadius: 5,
},
barcode: {
width: '50%',
display: 'flex',
flexDirection: 'column',
alignContent: 'center',
alignItems: 'flex-end',
},
leftLine1: {
width: '80%',
borderWidth: 1,
borderColor: '#959595',
height: 1,
},
amount: {
width: '40%',
display: 'flex',
flexDirection: 'column',
alignContent: 'center',
alignItems: 'center',
},
total: {
color: 'red',
fontSize: 40,
},
leftLine2: {
width: '100%',
borderWidth: 1,
borderColor: '#959595',
height: 1,
},
leftText1: {
fontSize: 40,
marginRight: 30,
},
leftText2: {
fontSize: 40,
},
faceScan: {
width: '20%',
display: 'flex',
justifyContent: 'center',
flexDirection: 'column',
borderWidth: 1,
borderColor: '#00BBFF',
backgroundColor: '#fff',
elevation: 3,
shadowColor: '#888888',
shadowOffset: {
height: 0,
width: 0,
},
shadowOpacity: 0.5,
shadowRadius: 5,
},
faceGif: {
width: '100%',
height: 180,
},
facePay: {
display: 'flex',
flexDirection: 'row',
justifyContent: 'center',
marginTop: 10,
},
payImage: {
width: 30,
height: 30,
},
payText: {
fontSize: 25,
marginLeft: 10,
},
paymentRight: {
width: '40%',
display: 'flex',
justifyContent: 'center',
// overflow: 'hidden',
flexDirection: 'column',
borderRightWidth: 1,
borderTopWidth: 1,
borderBottomWidth: 1,
borderRightColor: '#959595',
borderTopColor: '#959595',
borderBottomColor: '#959595',
// borderWidth: 1,
// borderColor: '#959595',
backgroundColor: '#fff',
height: 260,
// marginLeft: 10,
elevation: 3,
shadowColor: '#888888',
shadowOffset: {
height: 0,
width: 0,
},
shadowOpacity: 0.5,
shadowRadius: 5,
},
paymentRightTitle: {
display: 'flex',
flexDirection: 'row',
// alignContent: 'center',
alignItems: 'center',
justifyContent: 'center',
},
paymentRightContents: {
display: 'flex',
flexDirection: 'column',
// alignContent: 'center',
// alignItems: 'center',
marginRight: 40,
},
paymentRightText: {
fontSize: 35,
// marginRight: 5,
},
paymentRightImage: {
width: 50,
height: 50,
marginTop: 5,
marginBottom: 5,
// marginLeft: 5,
},
paymentRightCode: {
display: 'flex',
flexDirection: 'row',
// alignContent: 'center',
// alignItems: 'center',
},
firstThStyle: {
width: '40%',
alignItems: 'flex-start',
paddingTop: 20,
paddingBottom: 20,
paddingLeft: 10,
paddingRight: 10,
},
ThStyle: {
width: '20%',
alignItems: 'center',
paddingTop: 20,
paddingBottom: 20,
paddingLeft: 10,
paddingRight: 10,
},
ThText: {
fontSize: 30,
},
oddCell: {
flexDirection: 'row',
backgroundColor: '#fff',
},
evenCell: {
flexDirection: 'row',
backgroundColor: '#F0F0F0',
},
firstTdStyle: {
width: '40%',
// alignItems: 'center',
alignItems: 'flex-start',
paddingTop: 20,
paddingBottom: 20,
paddingLeft: 10,
paddingRight: 10,
},
TdStyle: {
flexDirection: 'row',
width: '20%',
alignItems: 'center',
justifyContent: 'center',
paddingTop: 20,
paddingBottom: 20,
paddingLeft: 10,
paddingRight: 10,
},
TdText: {
fontSize: 25,
},
explain: {
display: 'flex',
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: '#fc4000',
padding: 20,
// paddingTop: 20,
// paddingRight: 20,
// paddingBottom: 20,
// paddingLeft: 20,
},
explainText1: {
fontSize: 30,
color: '#fff',
marginRight: 3,
},
step: {
display: 'flex',
flexDirection: 'row',
justifyContent: 'center',
width: 40,
height: 40,
backgroundColor: '#fff',
borderRadius: 20,
marginRight: 5,
},
explainText2: {
color: '#fc4000',
fontSize: 30,
},
code: {
fontSize: 30,
color: '#fff',
marginRight: 50,
},
footer: {
height: '32%',
backgroundColor: '#0f0f0f',
width: '100%',
},
swiper: {
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
},
swiperImg: {
justifyContent: 'center',
alignItems: 'center',
width: '90%',
height: '90%',
marginLeft: '5%',
marginTop: '2.5%',
marginRight: '5%',
marginBottom: '2.5%',
},
};
export default CounterMixins(VerticalPage);
import React from 'react';
import {View, Text, DeviceEventEmitter} from 'react-native';
import {height, width} from '../../utils/screen';
import Scales from '../../utils/Scales';
import Touch from '../../components/Touch';
export default class ScalesPage extends React.Component {
state = {
data: '',
weight: '',
};
async componentDidMount() {
DeviceEventEmitter.addListener('onScalesChange', ({weight}) => {
this.setState({weight});
});
}
read = async () => {
const data = await Scales.read(0);
this.setState({data});
};
render() {
const style = {fontSize: 50, padding: 10};
const {data, weight} = this.state;
return (
<View
style={{
width,
height,
backgroundColor: 'rgba(255,255,255,.5)',
justifyContent: 'center',
alignItems: 'center',
}}>
<Touch onPress={this.read}>
<Text style={style}>{data || 'Read'}</Text>
</Touch>
<Text style={style}>{weight}</Text>
</View>
);
}
}
import React from 'react';
import io from 'socket.io-client';
import {View, Text} from 'react-native';
import Touch from '../../components/Touch';
import {height, width} from '../../utils/screen';
import {host} from '../../utils/config';
export default class SocketPage extends React.Component {
state = {
msg: '',
};
componentDidMount() {
this.socket = io(host);
this.socket.on('test', msg => {
this.setState({msg});
});
}
sayHello = () => {
this.socket.emit('test', 'Hello');
};
render() {
return (
<View
style={{
width,
height,
backgroundColor: 'rgba(255,255,255,.5)',
justifyContent: 'center',
alignItems: 'center',
}}>
<Touch onPress={this.sayHello}>
<Text style={{fontSize: 80}}>Click here to say hello.</Text>
</Touch>
<Text style={{fontSize: 60}}>
Receive from server: {this.state.msg}
</Text>
</View>
);
}
}
import HomePage from './pages/HomePage';
import VerticalPage from './pages/VerticalPage';
import AuthPage from './pages/AuthPage';
import FacePage from './pages/FacePage';
import ScalesPage from './pages/test/ScalesPage';
import SocketPage from './pages/test/SocketPage';
export default {
home: HomePage,
vertical: VerticalPage,
scales: ScalesPage,
socket: SocketPage,
auth: AuthPage,
face: FacePage,
};
import AsyncStorage from '@react-native-community/async-storage';
import axios from 'axios';
import qs from 'qs';
const pack = require('../../package.json');
export function token({key, secret, device}) {
return axios.post('/store/auth', qs.stringify({key, secret, device}));
}
export async function refreshToken() {
const auth = await AsyncStorage.getItem('auth');
if (auth) {
try {
const {refresh_token} = JSON.parse(auth);
return await axios.get('/auth/refresh', {
headers: {Authorization: `Bearer ${refresh_token}`},
});
} catch (e) {
return {data: null};
}
}
return {data: null};
}
export function version() {
return axios.put('/store/version', qs.stringify({version: pack.version}));
}
import axios from 'axios';
import qs from 'qs';
export function barcode({code, orderId}) {
return axios.post('/alipay/barcode', qs.stringify({code, orderId}));
}
import axios from 'axios';
import qs from 'qs';
export function getGoods(barcode) {
return axios.get(`/store/goods/${barcode}`);
}
export function getBags() {
return axios.get('/store/goods/bags');
}
export function barcodepay({ids, code, facepay}) {
return axios.post(
'/store/goods/barcodepay',
qs.stringify({ids, code, facepay}),
);
}
export function barcodeUser({userId, alipayUserId, orderId}) {
return axios.post(
'/store/goods/barcode/user',
qs.stringify({userId, alipayUserId, orderId}),
);
}
export function status({orderId}) {
return axios.post('/store/goods/status', qs.stringify({orderId}));
}
export function postOrder(ids, payType) {
payType = payType ? `/${payType}` : '';
return axios.post(`/api/orders${payType}`, qs.stringify({ids}));
}
export function getOrder(id) {
return axios.get(`/api/orders/${id}`);
}
export function canOrder(orderId) {
return axios.put('/api/orders/cancel', qs.stringify({orderId}));
}
export function faceinfo({rawdata}) {
return axios.post('/store/goods/faceinfo', qs.stringify({rawdata}));
}
export function wxauthinfo(action) {
return axios.post('/common/wxpay/faceAuth', action);
}
import axios from 'axios';
export function devices() {
return axios.get('/store/hkvs/devices');
}
export function capture(device) {
return axios.get(`/store/hkvs/capture/${device}`);
}
import axios from 'axios';
import qs from 'qs';
export function cardPay({code, orderId}) {
return axios.post('/api/orders/cardPay', qs.stringify({code, orderId}));
}
export function status({orderId, token}) {
return axios.get(`/api/orders/payStatus/${orderId}`, {
headers: {Authorization: `Bearer ${token}`},
});
}
import qs from 'qs';
import axios from 'axios';
import AsyncStorage from '@react-native-community/async-storage';
const pack = require('../../package.json');
export function token({host = '', key, secret, device}) {
return axios.post(`${host}/store/auth`, qs.stringify({key, secret, device}));
}
export async function refreshToken() {
const auth = await AsyncStorage.getItem('auth');
if (auth) {
try {
const {refresh_token} = JSON.parse(auth);
return await axios.get('/auth/refresh', {
headers: {Authorization: `Bearer ${refresh_token}`},
});
} catch (e) {
return {data: null};
}
}
return {data: null};
}
export function version() {
return axios.put('/store/version', qs.stringify({version: pack.version}));
}
export function region() {
return axios.get('/store/region');
}
export function door({userId}) {
return axios.post('/store/door', qs.stringify({userId}));
}
export function wxdoor({userId, openid, wxtoken, nickname}) {
return axios.post(
'/store/wxdoor',
qs.stringify({userId, openid, wxtoken, nickname}),
);
}
export function scaleData() {
return axios.get('/store/scaleData');
}
export function sendsms({phone}) {
return axios.post('/store/sendsms', qs.stringify({phone}));
}
export function verifysms({phone, code, userId}) {
return axios.post('/store/verifysms', qs.stringify({phone, code, userId}));
}
import axios from 'axios';
import qs from 'qs';
export function sendsms(phone) {
return axios.post('/store/sendsms', qs.stringify({phone}));
}
export function signinup(params) {
return axios.post('/store/signinup', qs.stringify(params));
}
import axios from 'axios';
import qs from 'qs';
export function barcode({code}) {
return axios.post('/wxpay/barcode', qs.stringify({code}));
}
import {NativeModules} from 'react-native';
export default NativeModules.Restart;
import {NativeModules} from 'react-native';
export default NativeModules.Scales;
import {NativeModules} from 'react-native';
export default NativeModules.Speech;
import {NativeModules} from 'react-native';
export default NativeModules.WxFacepay;
import io from 'socket.io-client';
import axios from 'axios';
import Restart from './Restart';
window.restart = Restart.restartApp;
export async function counterInterval(dispatch, expiresIn, reload) {
window.socket =
window.socket ||
io(axios.defaults.baseURL, {
query: {token: window.auth.token},
});
window.authInterval = window.setInterval(() => {
dispatch({type: 'admin/auth'});
}, 8 * 60 * 60 * 1000); // 每8小时更新一次
window.socketInterval = window.setInterval(() => {
if (window.auth && window.socket.disconnected) {
// 已授权,并且处于掉线状态
if (!window.socketDisconnected) {
window.socketDisconnected = true;
} else {
// 连续掉线超时,重启应用
Restart.restartApp();
}
}
}, window.retryTimeout); // 每半分钟检查socket连接
if (reload) {
Restart.restartApp();
}
}
import AsyncStorage from '@react-native-community/async-storage';
import Modal from '../components/Modal';
import Toast from '../components/Toast';
import Speech from '../utils/Speech';
import {counterInterval} from './authInterval';
export const showCounterLogin = async () => {
const key = await AsyncStorage.getItem('KEY');
Modal.prompt(
'门店授权',
'仲马购门店收银台授权认证',
[
{text: '取消'},
{text: '登录', onPress: (k, secret) => counterLogin({key: k, secret})},
],
// (login, password) => console.log(`login: ${login}, password: ${password}`),
'login-password',
key,
['请填写门店标识', '请填写门店密钥'],
);
};
const loginError = async msg => {
Speech.speak(msg);
Toast.fail(msg, 1);
};
export const counterLogin = async ({key, secret, device = 'counter'}) => {
if (!key) {
await loginError('请输入门店标识');
return;
}
if (!secret) {
await loginError('请输入门店密钥');
return;
}
const supportDevices = ['counter', 'face', 'faceEnter', 'faceLeave'];
if (supportDevices.indexOf(device) < 0) {
await loginError('不支持的设备类型');
return;
}
await Toast.loading('授权认证中');
const action = {type: 'admin/auth', key, secret, login: device};
// const { dispatch } = this.props;
// const res = await dispatch(action);
const res = await window.dispatch(action);
if (res.code === 1) {
Toast.success('授权认证成功,正在重启应用...', 2, async () => {
await counterInterval(window.dispatch, res.data.expiresIn, true);
});
}
};
export default {showCounterLogin, counterLogin};
export const colors = {
bg: '#FC4000',
text: '#2B2B2B',
textXSActive: '#151515',
textActive: '#000000',
};
export const font = {
title: 25,
textF: 20,
textS: 16,
textT: 18,
textActive: 18,
textMDActive: 28,
};
export default {
colors,
font,
};
const app = ''; // eg: .25h/.eg
export const isProd = process.env.NODE_ENV === 'production';
export const host = isProd
? `https://api${app}.vs-u.com`
: 'http://192.168.1.88:7001';
export const login = `https://m${app}.vs-u.com`;
export const qrHost = login;
window.defaultCount = 0;
export default {
host,
login,
qrHost,
isProd,
};
export default t => new Promise(resolve => setTimeout(resolve, t));
// for react native
import React from 'react';
import {create} from 'dva-core';
import {Provider, connect} from 'react-redux';
export {connect};
export default function(options) {
const app = create(options);
if (!window.registered) {
options.models.forEach(model => app.model(model));
}
window.registered = true;
app.start();
const store = app._store;
app.start = container => () => <Provider store={store}>{container}</Provider>;
app.getStore = () => store;
return app;
}
/**
* 解决浮点数运算精度问题
*/
/**
* @file 解决浮动运算问题,避免小数点后产生多位数和计算精度损失。
* 问题示例:2.3 + 2.4 = 4.699999999999999,1.0 - 0.9 = 0.09999999999999998
*/
/**
* 把错误的数据转正
* strip(0.09999999999999998)=0.1
*/
function strip(num, precision) {
if (precision === 0) {
precision = 12;
}
return +parseFloat(num.toPrecision(precision));
}
/**
* Return digits length of a number
* @param {number} num Input number
*/
function digitLength(num) {
// Get digit length of e
let eSplit = num.toString().split(/[eE]/);
let len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0);
return len > 0 ? len : 0;
}
/**
* 把小数转成整数,支持科学计数法。如果是小数则放大成整数
* @param {number} num 输入数
*/
function float2Fixed(num) {
if (num.toString().indexOf('e') === -1) {
return Number(num.toString().replace('.', ''));
}
let dLen = digitLength(num);
return dLen > 0 ? num * Math.pow(10, dLen) : num;
}
/**
* 精确乘法
*/
function times(num1, num2) {
let others = [];
for (let _i = 2; _i < arguments.length; _i++) {
others[_i - 2] = arguments._i;
}
if (others.length > 0) {
return times.apply(
0,
[times(num1, num2), others[0]].concat(others.slice(1)),
);
}
let num1Changed = float2Fixed(num1);
let num2Changed = float2Fixed(num2);
let baseNum = digitLength(num1) + digitLength(num2);
let leftValue = num1Changed * num2Changed;
return leftValue / Math.pow(10, baseNum);
}
/**
* 精确加法
*/
function plus(num1, num2) {
let others = [];
for (let _i = 2; _i < arguments.length; _i++) {
others[_i - 2] = arguments._i;
}
if (others.length > 0) {
return plus.apply(0, [plus(num1, num2), others[0]].concat(others.slice(1)));
}
let baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));
return (times(num1, baseNum) + times(num2, baseNum)) / baseNum;
}
/**
* 精确减法
*/
function minus(num1, num2) {
let others = [];
for (let _i = 2; _i < arguments.length; _i++) {
others[_i - 2] = arguments._i;
}
if (others.length > 0) {
return minus.apply(
0,
[minus(num1, num2), others[0]].concat(others.slice(1)),
);
}
let baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));
return (times(num1, baseNum) - times(num2, baseNum)) / baseNum;
}
/**
* 精确除法
*/
function divide(num1, num2) {
let others = [];
for (let _i = 2; _i < arguments.length; _i++) {
others[_i - 2] = arguments._i;
}
if (others.length > 0) {
return divide.apply(
0,
[divide(num1, num2), others[0]].concat(others.slice(1)),
);
}
let num1Changed = float2Fixed(num1);
let num2Changed = float2Fixed(num2);
return times(
num1Changed / num2Changed,
Math.pow(10, digitLength(num2) - digitLength(num1)),
);
}
/**
* 四舍五入
*/
function round(num, ratio) {
let base = Math.pow(10, ratio);
return divide(Math.round(times(num, base)), base);
}
export default {
strip,
plus,
minus,
times,
divide,
round,
digitLength,
float2Fixed,
};
import {Dimensions} from 'react-native';
const {width: _width, height: _height} = Dimensions.get('window');
export const w = 1;
export const h = 1;
export const width = _width * w;
export const height = _height * h;
export const left = _width * (0.5 - w / 2);
export const top = _height * (0.5 - h / 2);
export default {
w,
h,
width,
height,
left,
top,
};
import AsyncStorage from '@react-native-community/async-storage';
import Restart from './Restart';
import Modal from '../components/Modal';
const onPressQr = async value => {
if (!value) {
await AsyncStorage.removeItem('QRHOST');
} else {
await AsyncStorage.setItem('QRHOST', value);
}
Restart.restartApp();
};
const onPressEnv = async value => {
if (!value) {
await AsyncStorage.removeItem('HOST');
} else {
await AsyncStorage.setItem('HOST', value);
}
Restart.restartApp();
};
export const switchQr = async () => {
const host = await AsyncStorage.getItem('QRHOST');
Modal.prompt(
null,
'切换二维码地址',
[
{
text: '取消',
},
{
text: '确认',
onPress: onPressQr,
},
],
'default',
host,
['输入二维码地址'],
);
};
export const switchEnv = async () => {
const host = await AsyncStorage.getItem('HOST');
Modal.prompt(
null,
'切换服务器地址',
[
{
text: '取消',
},
{
text: '确认',
onPress: onPressEnv,
},
],
'default',
host,
['输入服务器地址'],
);
};
window.host = onPressEnv;
window.qrcode = onPressQr;
export default {switchQr, switchEnv};
export const total = /^(\d+)(.\d{0,2})?$/;
export default {total};
...@@ -2,14 +2,34 @@ ...@@ -2,14 +2,34 @@
# yarn lockfile v1 # yarn lockfile v1
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.3": "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.3", "@babel/code-frame@^7.5.5":
version "7.10.3" version "7.10.3"
resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.3.tgz?cache=0&sync_timestamp=1592600086981&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.3.tgz#324bcfd8d35cd3d47dae18cde63d752086435e9a" resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.3.tgz?cache=0&sync_timestamp=1592600086981&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.3.tgz#324bcfd8d35cd3d47dae18cde63d752086435e9a"
integrity sha1-MkvP2NNc09R9rhjN5j11IIZDXpo= integrity sha1-MkvP2NNc09R9rhjN5j11IIZDXpo=
dependencies: dependencies:
"@babel/highlight" "^7.10.3" "@babel/highlight" "^7.10.3"
"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.6.2": "@babel/core@7.6.2":
version "7.6.2"
resolved "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.6.2.tgz?cache=0&sync_timestamp=1592600149762&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.6.2.tgz#069a776e8d5e9eefff76236bc8845566bd31dd91"
integrity sha1-Bpp3bo1enu//diNryIRVZr0x3ZE=
dependencies:
"@babel/code-frame" "^7.5.5"
"@babel/generator" "^7.6.2"
"@babel/helpers" "^7.6.2"
"@babel/parser" "^7.6.2"
"@babel/template" "^7.6.0"
"@babel/traverse" "^7.6.2"
"@babel/types" "^7.6.0"
convert-source-map "^1.1.0"
debug "^4.1.0"
json5 "^2.1.0"
lodash "^4.17.13"
resolve "^1.3.2"
semver "^5.4.1"
source-map "^0.5.0"
"@babel/core@^7.0.0", "@babel/core@^7.1.0":
version "7.10.3" version "7.10.3"
resolved "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.10.3.tgz?cache=0&sync_timestamp=1592600149762&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.10.3.tgz#73b0e8ddeec1e3fdd7a2de587a60e17c440ec77e" resolved "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.10.3.tgz?cache=0&sync_timestamp=1592600149762&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.10.3.tgz#73b0e8ddeec1e3fdd7a2de587a60e17c440ec77e"
integrity sha1-c7Do3e7B4/3Xot5YemDhfEQOx34= integrity sha1-c7Do3e7B4/3Xot5YemDhfEQOx34=
...@@ -31,7 +51,7 @@ ...@@ -31,7 +51,7 @@
semver "^5.4.1" semver "^5.4.1"
source-map "^0.5.0" source-map "^0.5.0"
"@babel/generator@^7.10.3", "@babel/generator@^7.4.0", "@babel/generator@^7.5.0": "@babel/generator@^7.10.3", "@babel/generator@^7.4.0", "@babel/generator@^7.5.0", "@babel/generator@^7.6.2":
version "7.10.3" version "7.10.3"
resolved "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.10.3.tgz?cache=0&sync_timestamp=1592600086494&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.10.3.tgz#32b9a0d963a71d7a54f5f6c15659c3dbc2a523a5" resolved "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.10.3.tgz?cache=0&sync_timestamp=1592600086494&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.10.3.tgz#32b9a0d963a71d7a54f5f6c15659c3dbc2a523a5"
integrity sha1-Mrmg2WOnHXpU9fbBVlnD28KlI6U= integrity sha1-Mrmg2WOnHXpU9fbBVlnD28KlI6U=
...@@ -134,7 +154,7 @@ ...@@ -134,7 +154,7 @@
dependencies: dependencies:
"@babel/types" "^7.10.3" "@babel/types" "^7.10.3"
"@babel/helper-module-imports@^7.10.1", "@babel/helper-module-imports@^7.10.3": "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.1", "@babel/helper-module-imports@^7.10.3":
version "7.10.3" version "7.10.3"
resolved "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.10.3.tgz?cache=0&sync_timestamp=1592600143262&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.10.3.tgz#766fa1d57608e53e5676f23ae498ec7a95e1b11a" resolved "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.10.3.tgz?cache=0&sync_timestamp=1592600143262&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.10.3.tgz#766fa1d57608e53e5676f23ae498ec7a95e1b11a"
integrity sha1-dm+h1XYI5T5WdvI65JjsepXhsRo= integrity sha1-dm+h1XYI5T5WdvI65JjsepXhsRo=
...@@ -224,7 +244,7 @@ ...@@ -224,7 +244,7 @@
"@babel/traverse" "^7.10.1" "@babel/traverse" "^7.10.1"
"@babel/types" "^7.10.1" "@babel/types" "^7.10.1"
"@babel/helpers@^7.10.1": "@babel/helpers@^7.10.1", "@babel/helpers@^7.6.2":
version "7.10.1" version "7.10.1"
resolved "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.10.1.tgz?cache=0&sync_timestamp=1590617490855&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973" resolved "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.10.1.tgz?cache=0&sync_timestamp=1590617490855&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973"
integrity sha1-poJ7fLl1ydnO9f1h2Rn2DYhEqXM= integrity sha1-poJ7fLl1ydnO9f1h2Rn2DYhEqXM=
...@@ -242,7 +262,7 @@ ...@@ -242,7 +262,7 @@
chalk "^2.0.0" chalk "^2.0.0"
js-tokens "^4.0.0" js-tokens "^4.0.0"
"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.10.3", "@babel/parser@^7.4.3": "@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.10.3", "@babel/parser@^7.4.3", "@babel/parser@^7.6.2":
version "7.10.3" version "7.10.3"
resolved "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.10.3.tgz?cache=0&sync_timestamp=1592600071841&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.10.3.tgz#7e71d892b0d6e7d04a1af4c3c79d72c1f10f5315" resolved "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.10.3.tgz?cache=0&sync_timestamp=1592600071841&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.10.3.tgz#7e71d892b0d6e7d04a1af4c3c79d72c1f10f5315"
integrity sha1-fnHYkrDW59BKGvTDx51ywfEPUxU= integrity sha1-fnHYkrDW59BKGvTDx51ywfEPUxU=
...@@ -262,6 +282,15 @@ ...@@ -262,6 +282,15 @@
"@babel/helper-create-class-features-plugin" "^7.10.1" "@babel/helper-create-class-features-plugin" "^7.10.1"
"@babel/helper-plugin-utils" "^7.10.1" "@babel/helper-plugin-utils" "^7.10.1"
"@babel/plugin-proposal-decorators@7.10.3":
version "7.10.3"
resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.10.3.tgz?cache=0&sync_timestamp=1592600147490&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-decorators%2Fdownload%2F%40babel%2Fplugin-proposal-decorators-7.10.3.tgz#2fc6b5696028adccfcd14bc826c184c578b857f8"
integrity sha1-L8a1aWAorcz80UvIJsGExXi4V/g=
dependencies:
"@babel/helper-create-class-features-plugin" "^7.10.3"
"@babel/helper-plugin-utils" "^7.10.3"
"@babel/plugin-syntax-decorators" "^7.10.1"
"@babel/plugin-proposal-export-default-from@^7.0.0": "@babel/plugin-proposal-export-default-from@^7.0.0":
version "7.10.1" version "7.10.1"
resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-export-default-from/download/@babel/plugin-proposal-export-default-from-7.10.1.tgz?cache=0&sync_timestamp=1590616319100&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-export-default-from%2Fdownload%2F%40babel%2Fplugin-proposal-export-default-from-7.10.1.tgz#59ea2a4f09dbb0358c73dab27def3d21a27bd370" resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-export-default-from/download/@babel/plugin-proposal-export-default-from-7.10.1.tgz?cache=0&sync_timestamp=1590616319100&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-export-default-from%2Fdownload%2F%40babel%2Fplugin-proposal-export-default-from-7.10.1.tgz#59ea2a4f09dbb0358c73dab27def3d21a27bd370"
...@@ -310,6 +339,13 @@ ...@@ -310,6 +339,13 @@
dependencies: dependencies:
"@babel/helper-plugin-utils" "^7.10.1" "@babel/helper-plugin-utils" "^7.10.1"
"@babel/plugin-syntax-decorators@^7.10.1":
version "7.10.1"
resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.10.1.tgz?cache=0&sync_timestamp=1590617967826&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-decorators%2Fdownload%2F%40babel%2Fplugin-syntax-decorators-7.10.1.tgz#16b869c4beafc9a442565147bda7ce0967bd4f13"
integrity sha1-FrhpxL6vyaRCVlFHvafOCWe9TxM=
dependencies:
"@babel/helper-plugin-utils" "^7.10.1"
"@babel/plugin-syntax-dynamic-import@^7.0.0": "@babel/plugin-syntax-dynamic-import@^7.0.0":
version "7.8.3" version "7.8.3"
resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
...@@ -617,14 +653,21 @@ ...@@ -617,14 +653,21 @@
pirates "^4.0.0" pirates "^4.0.0"
source-map-support "^0.5.16" source-map-support "^0.5.16"
"@babel/runtime@^7.0.0", "@babel/runtime@^7.6.2", "@babel/runtime@^7.8.4": "@babel/runtime@7.6.2":
version "7.6.2"
resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.6.2.tgz#c3d6e41b304ef10dcf13777a33e7694ec4a9a6dd"
integrity sha1-w9bkGzBO8Q3PE3d6M+dpTsSppt0=
dependencies:
regenerator-runtime "^0.13.2"
"@babel/runtime@^7.0.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4":
version "7.10.3" version "7.10.3"
resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.10.3.tgz#670d002655a7c366540c67f6fd3342cd09500364" resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.10.3.tgz#670d002655a7c366540c67f6fd3342cd09500364"
integrity sha1-Zw0AJlWnw2ZUDGf2/TNCzQlQA2Q= integrity sha1-Zw0AJlWnw2ZUDGf2/TNCzQlQA2Q=
dependencies: dependencies:
regenerator-runtime "^0.13.4" regenerator-runtime "^0.13.4"
"@babel/template@^7.0.0", "@babel/template@^7.10.1", "@babel/template@^7.10.3", "@babel/template@^7.4.0": "@babel/template@^7.0.0", "@babel/template@^7.10.1", "@babel/template@^7.10.3", "@babel/template@^7.4.0", "@babel/template@^7.6.0":
version "7.10.3" version "7.10.3"
resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.3.tgz?cache=0&sync_timestamp=1592600093638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.10.3.tgz#4d13bc8e30bf95b0ce9d175d30306f42a2c9a7b8" resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.3.tgz?cache=0&sync_timestamp=1592600093638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.10.3.tgz#4d13bc8e30bf95b0ce9d175d30306f42a2c9a7b8"
integrity sha1-TRO8jjC/lbDOnRddMDBvQqLJp7g= integrity sha1-TRO8jjC/lbDOnRddMDBvQqLJp7g=
...@@ -633,7 +676,7 @@ ...@@ -633,7 +676,7 @@
"@babel/parser" "^7.10.3" "@babel/parser" "^7.10.3"
"@babel/types" "^7.10.3" "@babel/types" "^7.10.3"
"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.10.3", "@babel/traverse@^7.4.3": "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.10.3", "@babel/traverse@^7.4.3", "@babel/traverse@^7.6.2":
version "7.10.3" version "7.10.3"
resolved "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.10.3.tgz#0b01731794aa7b77b214bcd96661f18281155d7e" resolved "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.10.3.tgz#0b01731794aa7b77b214bcd96661f18281155d7e"
integrity sha1-CwFzF5Sqe3eyFLzZZmHxgoEVXX4= integrity sha1-CwFzF5Sqe3eyFLzZZmHxgoEVXX4=
...@@ -648,7 +691,7 @@ ...@@ -648,7 +691,7 @@
globals "^11.1.0" globals "^11.1.0"
lodash "^4.17.13" lodash "^4.17.13"
"@babel/types@^7.0.0", "@babel/types@^7.10.1", "@babel/types@^7.10.3", "@babel/types@^7.3.0", "@babel/types@^7.4.0": "@babel/types@^7.0.0", "@babel/types@^7.10.1", "@babel/types@^7.10.3", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.6.0":
version "7.10.3" version "7.10.3"
resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.10.3.tgz?cache=0&sync_timestamp=1592600077260&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.10.3.tgz#6535e3b79fea86a6b09e012ea8528f935099de8e" resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.10.3.tgz?cache=0&sync_timestamp=1592600077260&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.10.3.tgz#6535e3b79fea86a6b09e012ea8528f935099de8e"
integrity sha1-ZTXjt5/qhqawngEuqFKPk1CZ3o4= integrity sha1-ZTXjt5/qhqawngEuqFKPk1CZ3o4=
...@@ -855,6 +898,13 @@ ...@@ -855,6 +898,13 @@
"@types/yargs" "^15.0.0" "@types/yargs" "^15.0.0"
chalk "^3.0.0" chalk "^3.0.0"
"@react-native-community/async-storage@1.11.0":
version "1.11.0"
resolved "https://registry.npm.taobao.org/@react-native-community/async-storage/download/@react-native-community/async-storage-1.11.0.tgz#bf81b8813080846f150c67f531987c429b442166"
integrity sha1-v4G4gTCAhG8VDGf1MZh8QptEIWY=
dependencies:
deep-assign "^3.0.0"
"@react-native-community/cli-debugger-ui@^4.9.0": "@react-native-community/cli-debugger-ui@^4.9.0":
version "4.9.0" version "4.9.0"
resolved "https://registry.npm.taobao.org/@react-native-community/cli-debugger-ui/download/@react-native-community/cli-debugger-ui-4.9.0.tgz?cache=0&sync_timestamp=1589812360800&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.9.0.tgz#4177764ba69243c97aa26829d59d9501acb2bd71" resolved "https://registry.npm.taobao.org/@react-native-community/cli-debugger-ui/download/@react-native-community/cli-debugger-ui-4.9.0.tgz?cache=0&sync_timestamp=1589812360800&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.9.0.tgz#4177764ba69243c97aa26829d59d9501acb2bd71"
...@@ -962,7 +1012,7 @@ ...@@ -962,7 +1012,7 @@
sudo-prompt "^9.0.0" sudo-prompt "^9.0.0"
wcwidth "^1.0.1" wcwidth "^1.0.1"
"@react-native-community/eslint-config@^0.0.5": "@react-native-community/eslint-config@0.0.5":
version "0.0.5" version "0.0.5"
resolved "https://registry.npm.taobao.org/@react-native-community/eslint-config/download/@react-native-community/eslint-config-0.0.5.tgz#584f6493258202a57efc22e7be66966e43832795" resolved "https://registry.npm.taobao.org/@react-native-community/eslint-config/download/@react-native-community/eslint-config-0.0.5.tgz#584f6493258202a57efc22e7be66966e43832795"
integrity sha1-WE9kkyWCAqV+/CLnvmaWbkODJ5U= integrity sha1-WE9kkyWCAqV+/CLnvmaWbkODJ5U=
...@@ -1167,6 +1217,18 @@ acorn@^7.1.1: ...@@ -1167,6 +1217,18 @@ acorn@^7.1.1:
resolved "https://registry.npm.taobao.org/acorn/download/acorn-7.3.1.tgz?cache=0&sync_timestamp=1591869398104&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" resolved "https://registry.npm.taobao.org/acorn/download/acorn-7.3.1.tgz?cache=0&sync_timestamp=1591869398104&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd"
integrity sha1-hQEHVNtTw/uvO56j4IOqXF0Uf/0= integrity sha1-hQEHVNtTw/uvO56j4IOqXF0Uf/0=
add-dom-event-listener@^1.1.0:
version "1.1.0"
resolved "https://registry.npm.taobao.org/add-dom-event-listener/download/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310"
integrity sha1-apLbOg3Qq8JU4JXA8dwUrLuq4xA=
dependencies:
object-assign "4.x"
after@0.8.2:
version "0.8.2"
resolved "https://registry.npm.taobao.org/after/download/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
version "6.12.2" version "6.12.2"
resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
...@@ -1196,18 +1258,11 @@ ansi-cyan@^0.1.1: ...@@ -1196,18 +1258,11 @@ ansi-cyan@^0.1.1:
dependencies: dependencies:
ansi-wrap "0.1.0" ansi-wrap "0.1.0"
ansi-escapes@^3.0.0: ansi-escapes@^3.0.0, ansi-escapes@^3.2.0:
version "3.2.0" version "3.2.0"
resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
integrity sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s= integrity sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s=
ansi-escapes@^4.2.1:
version "4.3.1"
resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
integrity sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE=
dependencies:
type-fest "^0.11.0"
ansi-fragments@^0.2.1: ansi-fragments@^0.2.1:
version "0.2.1" version "0.2.1"
resolved "https://registry.npm.taobao.org/ansi-fragments/download/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e" resolved "https://registry.npm.taobao.org/ansi-fragments/download/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e"
...@@ -1231,6 +1286,11 @@ ansi-red@^0.1.1: ...@@ -1231,6 +1286,11 @@ ansi-red@^0.1.1:
dependencies: dependencies:
ansi-wrap "0.1.0" ansi-wrap "0.1.0"
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
ansi-regex@^3.0.0: ansi-regex@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
...@@ -1246,6 +1306,11 @@ ansi-regex@^5.0.0: ...@@ -1246,6 +1306,11 @@ ansi-regex@^5.0.0:
resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
integrity sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U= integrity sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=
ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
ansi-styles@^3.2.0, ansi-styles@^3.2.1: ansi-styles@^3.2.0, ansi-styles@^3.2.1:
version "3.2.1" version "3.2.1"
resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
...@@ -1266,6 +1331,28 @@ ansi-wrap@0.1.0, ansi-wrap@^0.1.0: ...@@ -1266,6 +1331,28 @@ ansi-wrap@0.1.0, ansi-wrap@^0.1.0:
resolved "https://registry.npm.taobao.org/ansi-wrap/download/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" resolved "https://registry.npm.taobao.org/ansi-wrap/download/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768=
antd-mobile-rn@^2.3.3:
version "2.3.3"
resolved "https://registry.npm.taobao.org/antd-mobile-rn/download/antd-mobile-rn-2.3.3.tgz#be386da77b763737365ca68abb258bf6816783b3"
integrity sha1-vjhtp3t2Nzc2XKaKuyWL9oFng7M=
dependencies:
array-tree-filter "~2.1.0"
babel-runtime "6.x"
normalize-css-color "^1.0.2"
rc-swipeout "~2.0.0"
react-native-camera-roll-picker "^1.2.1"
react-native-collapsible "^0.9.0"
react-native-drawer-layout "~1.3.0"
react-native-menu "^0.23.0"
rmc-cascader "~5.0.0"
rmc-date-picker "^6.0.8"
rmc-dialog "^1.0.1"
rmc-input-number "^1.0.0"
rmc-picker "~5.0.0"
rmc-tabs "~1.2.0"
rn-topview "^0.1.6"
utility-types "^2.1.0"
anymatch@^2.0.0: anymatch@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
...@@ -1343,11 +1430,21 @@ array-slice@^0.2.3: ...@@ -1343,11 +1430,21 @@ array-slice@^0.2.3:
resolved "https://registry.npm.taobao.org/array-slice/download/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" resolved "https://registry.npm.taobao.org/array-slice/download/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU= integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU=
array-tree-filter@2.1.x, array-tree-filter@~2.1.0:
version "2.1.0"
resolved "https://registry.npm.taobao.org/array-tree-filter/download/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190"
integrity sha1-hzrAD+yDdJ8lWsjdCDgUtPYykZA=
array-unique@^0.3.2: array-unique@^0.3.2:
version "0.3.2" version "0.3.2"
resolved "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" resolved "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
arraybuffer.slice@~0.0.7:
version "0.0.7"
resolved "https://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
integrity sha1-O7xCdd1YTMGxCAm4nU6LY6aednU=
asap@~2.0.3: asap@~2.0.3:
version "2.0.6" version "2.0.6"
resolved "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" resolved "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
...@@ -1407,6 +1504,22 @@ aws4@^1.8.0: ...@@ -1407,6 +1504,22 @@ aws4@^1.8.0:
resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.10.0.tgz?cache=0&sync_timestamp=1590182515104&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.10.0.tgz?cache=0&sync_timestamp=1590182515104&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2"
integrity sha1-oXs6jqgRBg501H0wYSJACtRJeuI= integrity sha1-oXs6jqgRBg501H0wYSJACtRJeuI=
axios@0.19.2:
version "0.19.2"
resolved "https://registry.npm.taobao.org/axios/download/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
integrity sha1-PqNsXYgY0NX4qKl6bTa4bNwAyyc=
dependencies:
follow-redirects "1.5.10"
babel-code-frame@^6.26.0:
version "6.26.0"
resolved "https://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
dependencies:
chalk "^1.1.3"
esutils "^2.0.2"
js-tokens "^3.0.2"
babel-eslint@10.0.1: babel-eslint@10.0.1:
version "10.0.1" version "10.0.1"
resolved "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.0.1.tgz?cache=0&sync_timestamp=1582676223200&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-eslint%2Fdownload%2Fbabel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" resolved "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.0.1.tgz?cache=0&sync_timestamp=1582676223200&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-eslint%2Fdownload%2Fbabel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed"
...@@ -1419,7 +1532,7 @@ babel-eslint@10.0.1: ...@@ -1419,7 +1532,7 @@ babel-eslint@10.0.1:
eslint-scope "3.7.1" eslint-scope "3.7.1"
eslint-visitor-keys "^1.0.0" eslint-visitor-keys "^1.0.0"
babel-jest@^24.9.0: babel-jest@24.9.0, babel-jest@^24.9.0:
version "24.9.0" version "24.9.0"
resolved "https://registry.npm.taobao.org/babel-jest/download/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" resolved "https://registry.npm.taobao.org/babel-jest/download/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54"
integrity sha1-P8Mny4RnuJ0U17xw4xUQSng8zVQ= integrity sha1-P8Mny4RnuJ0U17xw4xUQSng8zVQ=
...@@ -1432,6 +1545,13 @@ babel-jest@^24.9.0: ...@@ -1432,6 +1545,13 @@ babel-jest@^24.9.0:
chalk "^2.4.2" chalk "^2.4.2"
slash "^2.0.0" slash "^2.0.0"
babel-messages@^6.23.0:
version "6.23.0"
resolved "https://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-dynamic-import-node@^2.3.3: babel-plugin-dynamic-import-node@^2.3.3:
version "2.3.3" version "2.3.3"
resolved "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz?cache=0&sync_timestamp=1587495903478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-dynamic-import-node%2Fdownload%2Fbabel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" resolved "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz?cache=0&sync_timestamp=1587495903478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-dynamic-import-node%2Fdownload%2Fbabel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
...@@ -1439,6 +1559,14 @@ babel-plugin-dynamic-import-node@^2.3.3: ...@@ -1439,6 +1559,14 @@ babel-plugin-dynamic-import-node@^2.3.3:
dependencies: dependencies:
object.assign "^4.1.0" object.assign "^4.1.0"
babel-plugin-import@1.13.0:
version "1.13.0"
resolved "https://registry.npm.taobao.org/babel-plugin-import/download/babel-plugin-import-1.13.0.tgz?cache=0&sync_timestamp=1574676283725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-import%2Fdownload%2Fbabel-plugin-import-1.13.0.tgz#c532fd533df9db53b47d4d4db3676090fc5c07a5"
integrity sha1-xTL9Uz3521O0fU1Ns2dgkPxcB6U=
dependencies:
"@babel/helper-module-imports" "^7.0.0"
"@babel/runtime" "^7.0.0"
babel-plugin-istanbul@^5.1.0: babel-plugin-istanbul@^5.1.0:
version "5.2.0" version "5.2.0"
resolved "https://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-5.2.0.tgz?cache=0&sync_timestamp=1577063702695&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-istanbul%2Fdownload%2Fbabel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" resolved "https://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-5.2.0.tgz?cache=0&sync_timestamp=1577063702695&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-istanbul%2Fdownload%2Fbabel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854"
...@@ -1456,11 +1584,25 @@ babel-plugin-jest-hoist@^24.9.0: ...@@ -1456,11 +1584,25 @@ babel-plugin-jest-hoist@^24.9.0:
dependencies: dependencies:
"@types/babel__traverse" "^7.0.6" "@types/babel__traverse" "^7.0.6"
babel-plugin-syntax-decorators@^6.1.18:
version "6.13.0"
resolved "https://registry.npm.taobao.org/babel-plugin-syntax-decorators/download/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b"
integrity sha1-MSVjtNvePMgGzuPkFszurd0RrAs=
babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0:
version "7.0.0-beta.0" version "7.0.0-beta.0"
resolved "https://registry.npm.taobao.org/babel-plugin-syntax-trailing-function-commas/download/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" resolved "https://registry.npm.taobao.org/babel-plugin-syntax-trailing-function-commas/download/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf"
integrity sha1-qiE8FDXiv/62/KhCKH71NK0F1c8= integrity sha1-qiE8FDXiv/62/KhCKH71NK0F1c8=
babel-plugin-transform-decorators-legacy@1.3.5:
version "1.3.5"
resolved "https://registry.npm.taobao.org/babel-plugin-transform-decorators-legacy/download/babel-plugin-transform-decorators-legacy-1.3.5.tgz#0e492dffa0edd70529072887f8aa86d4dd8b40a1"
integrity sha1-Dkkt/6Dt1wUpByiH+KqG1N2LQKE=
dependencies:
babel-plugin-syntax-decorators "^6.1.18"
babel-runtime "^6.2.0"
babel-template "^6.3.0"
babel-preset-fbjs@^3.2.0, babel-preset-fbjs@^3.3.0: babel-preset-fbjs@^3.2.0, babel-preset-fbjs@^3.3.0:
version "3.3.0" version "3.3.0"
resolved "https://registry.npm.taobao.org/babel-preset-fbjs/download/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" resolved "https://registry.npm.taobao.org/babel-preset-fbjs/download/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541"
...@@ -1502,12 +1644,71 @@ babel-preset-jest@^24.9.0: ...@@ -1502,12 +1644,71 @@ babel-preset-jest@^24.9.0:
"@babel/plugin-syntax-object-rest-spread" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
babel-plugin-jest-hoist "^24.9.0" babel-plugin-jest-hoist "^24.9.0"
babel-runtime@6.x, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
version "6.26.0"
resolved "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
dependencies:
core-js "^2.4.0"
regenerator-runtime "^0.11.0"
babel-template@^6.3.0:
version "6.26.0"
resolved "https://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
dependencies:
babel-runtime "^6.26.0"
babel-traverse "^6.26.0"
babel-types "^6.26.0"
babylon "^6.18.0"
lodash "^4.17.4"
babel-traverse@^6.26.0:
version "6.26.0"
resolved "https://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
dependencies:
babel-code-frame "^6.26.0"
babel-messages "^6.23.0"
babel-runtime "^6.26.0"
babel-types "^6.26.0"
babylon "^6.18.0"
debug "^2.6.8"
globals "^9.18.0"
invariant "^2.2.2"
lodash "^4.17.4"
babel-types@^6.26.0:
version "6.26.0"
resolved "https://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
dependencies:
babel-runtime "^6.26.0"
esutils "^2.0.2"
lodash "^4.17.4"
to-fast-properties "^1.0.3"
babylon@^6.18.0:
version "6.18.0"
resolved "https://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
integrity sha1-ry87iPpvXB5MY00aD46sT1WzleM=
backo2@1.0.2:
version "1.0.2"
resolved "https://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
balanced-match@^1.0.0: balanced-match@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
base64-js@^1.1.2, base64-js@^1.2.3: base64-arraybuffer@0.1.5:
version "0.1.5"
resolved "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.2.3:
version "1.3.1" version "1.3.1"
resolved "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" resolved "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
integrity sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE= integrity sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=
...@@ -1532,6 +1733,13 @@ bcrypt-pbkdf@^1.0.0: ...@@ -1532,6 +1733,13 @@ bcrypt-pbkdf@^1.0.0:
dependencies: dependencies:
tweetnacl "^0.14.3" tweetnacl "^0.14.3"
better-assert@~1.0.0:
version "1.0.2"
resolved "https://registry.npm.taobao.org/better-assert/download/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=
dependencies:
callsite "1.0.0"
big-integer@^1.6.44: big-integer@^1.6.44:
version "1.6.48" version "1.6.48"
resolved "https://registry.npm.taobao.org/big-integer/download/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" resolved "https://registry.npm.taobao.org/big-integer/download/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e"
...@@ -1544,6 +1752,16 @@ bindings@^1.5.0: ...@@ -1544,6 +1752,16 @@ bindings@^1.5.0:
dependencies: dependencies:
file-uri-to-path "1.0.0" file-uri-to-path "1.0.0"
blob@0.0.5:
version "0.0.5"
resolved "https://registry.npm.taobao.org/blob/download/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
integrity sha1-1oDu7yX4zZGtUz9bAe7UjmTK9oM=
boolbase@^1.0.0, boolbase@~1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
bplist-creator@0.0.8: bplist-creator@0.0.8:
version "0.0.8" version "0.0.8"
resolved "https://registry.npm.taobao.org/bplist-creator/download/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" resolved "https://registry.npm.taobao.org/bplist-creator/download/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c"
...@@ -1601,16 +1819,42 @@ bser@2.1.1: ...@@ -1601,16 +1819,42 @@ bser@2.1.1:
dependencies: dependencies:
node-int64 "^0.4.0" node-int64 "^0.4.0"
buffer-alloc-unsafe@^1.1.0:
version "1.1.0"
resolved "https://registry.npm.taobao.org/buffer-alloc-unsafe/download/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
integrity sha1-vX3CauKXLQ7aJTvgYdupkjScGfA=
buffer-alloc@^1.2.0:
version "1.2.0"
resolved "https://registry.npm.taobao.org/buffer-alloc/download/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
integrity sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=
dependencies:
buffer-alloc-unsafe "^1.1.0"
buffer-fill "^1.0.0"
buffer-crc32@^0.2.13: buffer-crc32@^0.2.13:
version "0.2.13" version "0.2.13"
resolved "https://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" resolved "https://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
buffer-from@^1.0.0: buffer-fill@^1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/buffer-fill/download/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
buffer-from@^1.0.0, buffer-from@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" resolved "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8= integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=
buffer@^5.4.3:
version "5.6.0"
resolved "https://registry.npm.taobao.org/buffer/download/buffer-5.6.0.tgz?cache=0&sync_timestamp=1588706716358&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
integrity sha1-oxdJ3H2B2E2wir+Te2uMQDP2J4Y=
dependencies:
base64-js "^1.0.2"
ieee754 "^1.1.4"
bytes@3.0.0: bytes@3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" resolved "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
...@@ -1645,6 +1889,11 @@ caller-path@^2.0.0: ...@@ -1645,6 +1889,11 @@ caller-path@^2.0.0:
dependencies: dependencies:
caller-callsite "^2.0.0" caller-callsite "^2.0.0"
callsite@1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/callsite/download/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
callsites@^2.0.0: callsites@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" resolved "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
...@@ -1672,6 +1921,17 @@ caseless@~0.12.0: ...@@ -1672,6 +1921,17 @@ caseless@~0.12.0:
resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
dependencies:
ansi-styles "^2.2.1"
escape-string-regexp "^1.0.2"
has-ansi "^2.0.0"
strip-ansi "^3.0.0"
supports-color "^2.0.0"
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2" version "2.4.2"
resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
...@@ -1714,6 +1974,11 @@ class-utils@^0.3.5: ...@@ -1714,6 +1974,11 @@ class-utils@^0.3.5:
isobject "^3.0.0" isobject "^3.0.0"
static-extend "^0.1.1" static-extend "^0.1.1"
classnames@2.x, classnames@^2.2.0, classnames@^2.2.5, classnames@^2.2.6:
version "2.2.6"
resolved "https://registry.npm.taobao.org/classnames/download/classnames-2.2.6.tgz?cache=0&sync_timestamp=1591175106694&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclassnames%2Fdownload%2Fclassnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
integrity sha1-Q5Nb/90pHzJtrQogUwmzjQD2UM4=
cli-cursor@^2.1.0: cli-cursor@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
...@@ -1721,13 +1986,6 @@ cli-cursor@^2.1.0: ...@@ -1721,13 +1986,6 @@ cli-cursor@^2.1.0:
dependencies: dependencies:
restore-cursor "^2.0.0" restore-cursor "^2.0.0"
cli-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
integrity sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=
dependencies:
restore-cursor "^3.1.0"
cli-spinners@^2.0.0: cli-spinners@^2.0.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.3.0.tgz?cache=0&sync_timestamp=1586157490774&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-2.3.0.tgz#0632239a4b5aa4c958610142c34bb7a651fc8df5" resolved "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.3.0.tgz?cache=0&sync_timestamp=1586157490774&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-2.3.0.tgz#0632239a4b5aa4c958610142c34bb7a651fc8df5"
...@@ -1835,11 +2093,38 @@ commondir@^1.0.1: ...@@ -1835,11 +2093,38 @@ commondir@^1.0.1:
resolved "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" resolved "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
component-bind@1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
component-classes@^1.2.5:
version "1.2.6"
resolved "https://registry.npm.taobao.org/component-classes/download/component-classes-1.2.6.tgz#c642394c3618a4d8b0b8919efccbbd930e5cd691"
integrity sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=
dependencies:
component-indexof "0.0.3"
component-emitter@1.2.1:
version "1.2.1"
resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
component-emitter@^1.2.1: component-emitter@^1.2.1:
version "1.3.0" version "1.3.0"
resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
integrity sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A= integrity sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=
component-indexof@0.0.3:
version "0.0.3"
resolved "https://registry.npm.taobao.org/component-indexof/download/component-indexof-0.0.3.tgz#11d091312239eb8f32c8f25ae9cb002ffe8d3c24"
integrity sha1-EdCRMSI5648yyPJa6csAL/6NPCQ=
component-inherit@0.0.3:
version "0.0.3"
resolved "https://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
compressible@~2.0.16: compressible@~2.0.16:
version "2.0.18" version "2.0.18"
resolved "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz?cache=0&sync_timestamp=1578286264482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompressible%2Fdownload%2Fcompressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" resolved "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz?cache=0&sync_timestamp=1578286264482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompressible%2Fdownload%2Fcompressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
...@@ -1865,7 +2150,7 @@ concat-map@0.0.1: ...@@ -1865,7 +2150,7 @@ concat-map@0.0.1:
resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
concat-stream@^1.6.0: concat-stream@^1.4.7, concat-stream@^1.6.0:
version "1.6.2" version "1.6.2"
resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ= integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=
...@@ -1885,7 +2170,7 @@ connect@^3.6.5: ...@@ -1885,7 +2170,7 @@ connect@^3.6.5:
parseurl "~1.3.3" parseurl "~1.3.3"
utils-merge "1.0.1" utils-merge "1.0.1"
convert-source-map@^1.4.0, convert-source-map@^1.7.0: convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.7.0:
version "1.7.0" version "1.7.0"
resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003637425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003637425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI= integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=
...@@ -1902,7 +2187,7 @@ core-js@^1.0.0: ...@@ -1902,7 +2187,7 @@ core-js@^1.0.0:
resolved "https://registry.npm.taobao.org/core-js/download/core-js-1.2.7.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" resolved "https://registry.npm.taobao.org/core-js/download/core-js-1.2.7.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
core-js@^2.2.2, core-js@^2.4.1: core-js@^2.2.2, core-js@^2.4.0, core-js@^2.4.1:
version "2.6.11" version "2.6.11"
resolved "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" resolved "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
integrity sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw= integrity sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=
...@@ -1922,7 +2207,7 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: ...@@ -1922,7 +2207,7 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.1.0:
js-yaml "^3.13.1" js-yaml "^3.13.1"
parse-json "^4.0.0" parse-json "^4.0.0"
create-react-class@^15.6.3: create-react-class@^15.6.0, create-react-class@^15.6.3:
version "15.6.3" version "15.6.3"
resolved "https://registry.npm.taobao.org/create-react-class/download/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" resolved "https://registry.npm.taobao.org/create-react-class/download/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
integrity sha1-LXMjf7P5cK5uvgEanmb0bbyoADY= integrity sha1-LXMjf7P5cK5uvgEanmb0bbyoADY=
...@@ -1931,7 +2216,7 @@ create-react-class@^15.6.3: ...@@ -1931,7 +2216,7 @@ create-react-class@^15.6.3:
loose-envify "^1.3.1" loose-envify "^1.3.1"
object-assign "^4.1.1" object-assign "^4.1.1"
cross-spawn@^5.1.0: cross-spawn@^5.0.1, cross-spawn@^5.1.0:
version "5.1.0" version "5.1.0"
resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
...@@ -1951,6 +2236,37 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: ...@@ -1951,6 +2236,37 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5:
shebang-command "^1.2.0" shebang-command "^1.2.0"
which "^1.2.9" which "^1.2.9"
css-animation@^1.3.2:
version "1.6.1"
resolved "https://registry.npm.taobao.org/css-animation/download/css-animation-1.6.1.tgz#162064a3b0d51f958b7ff37b3d6d4de18e17039e"
integrity sha1-FiBko7DVH5WLf/N7PW1N4Y4XA54=
dependencies:
babel-runtime "6.x"
component-classes "^1.2.5"
css-select@^2.1.0:
version "2.1.0"
resolved "https://registry.npm.taobao.org/css-select/download/css-select-2.1.0.tgz?cache=0&sync_timestamp=1573341911322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-select%2Fdownload%2Fcss-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef"
integrity sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=
dependencies:
boolbase "^1.0.0"
css-what "^3.2.1"
domutils "^1.7.0"
nth-check "^1.0.2"
css-tree@^1.0.0-alpha.39:
version "1.0.0-alpha.39"
resolved "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb"
integrity sha1-K/8//huz93bPfu/ZHuXLp3oUnus=
dependencies:
mdn-data "2.0.6"
source-map "^0.6.1"
css-what@^3.2.1:
version "3.3.0"
resolved "https://registry.npm.taobao.org/css-what/download/css-what-3.3.0.tgz?cache=0&sync_timestamp=1590961613221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-what%2Fdownload%2Fcss-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39"
integrity sha1-EP7Glqns4uWRrHctdZqsq6w4zTk=
cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
version "0.3.8" version "0.3.8"
resolved "https://registry.npm.taobao.org/cssom/download/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" resolved "https://registry.npm.taobao.org/cssom/download/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
...@@ -1984,13 +2300,20 @@ dayjs@^1.8.15: ...@@ -1984,13 +2300,20 @@ dayjs@^1.8.15:
resolved "https://registry.npm.taobao.org/dayjs/download/dayjs-1.8.28.tgz#37aa6201df483d089645cb6c8f6cef6f0c4dbc07" resolved "https://registry.npm.taobao.org/dayjs/download/dayjs-1.8.28.tgz#37aa6201df483d089645cb6c8f6cef6f0c4dbc07"
integrity sha1-N6piAd9IPQiWRctsj2zvbwxNvAc= integrity sha1-N6piAd9IPQiWRctsj2zvbwxNvAc=
debug@2.6.9, debug@^2.2.0, debug@^2.3.3: debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@~2.6.4:
version "2.6.9" version "2.6.9"
resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=
dependencies: dependencies:
ms "2.0.0" ms "2.0.0"
debug@=3.1.0, debug@~3.1.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=
dependencies:
ms "2.0.0"
debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
version "4.1.1" version "4.1.1"
resolved "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" resolved "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
...@@ -2008,6 +2331,13 @@ decode-uri-component@^0.2.0: ...@@ -2008,6 +2331,13 @@ decode-uri-component@^0.2.0:
resolved "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" resolved "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
deep-assign@^3.0.0:
version "3.0.0"
resolved "https://registry.npm.taobao.org/deep-assign/download/deep-assign-3.0.0.tgz#c8e4c4d401cba25550a2f0f486a2e75bc5f219a2"
integrity sha1-yOTE1AHLolVQovD0hqLnW8XyGaI=
dependencies:
is-obj "^1.0.0"
deep-is@~0.1.3: deep-is@~0.1.3:
version "0.1.3" version "0.1.3"
resolved "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" resolved "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
...@@ -2084,6 +2414,11 @@ diff-sequences@^24.9.0: ...@@ -2084,6 +2414,11 @@ diff-sequences@^24.9.0:
resolved "https://registry.npm.taobao.org/diff-sequences/download/diff-sequences-24.9.0.tgz?cache=0&sync_timestamp=1588614801842&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff-sequences%2Fdownload%2Fdiff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" resolved "https://registry.npm.taobao.org/diff-sequences/download/diff-sequences-24.9.0.tgz?cache=0&sync_timestamp=1588614801842&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff-sequences%2Fdownload%2Fdiff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"
integrity sha1-VxXWJE4qpl9Iu6C8ly2wsLEelbU= integrity sha1-VxXWJE4qpl9Iu6C8ly2wsLEelbU=
dijkstrajs@^1.0.1:
version "1.0.1"
resolved "https://registry.npm.taobao.org/dijkstrajs/download/dijkstrajs-1.0.1.tgz#d3cd81221e3ea40742cfcde556d4e99e98ddc71b"
integrity sha1-082BIh4+pAdCz83lVtTpnpjdxxs=
doctrine@^2.1.0: doctrine@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npm.taobao.org/doctrine/download/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" resolved "https://registry.npm.taobao.org/doctrine/download/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
...@@ -2098,6 +2433,29 @@ doctrine@^3.0.0: ...@@ -2098,6 +2433,29 @@ doctrine@^3.0.0:
dependencies: dependencies:
esutils "^2.0.2" esutils "^2.0.2"
dom-serializer@0:
version "0.2.2"
resolved "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
integrity sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=
dependencies:
domelementtype "^2.0.1"
entities "^2.0.0"
dom-walk@^0.1.0:
version "0.1.2"
resolved "https://registry.npm.taobao.org/dom-walk/download/dom-walk-0.1.2.tgz?cache=0&sync_timestamp=1585903968629&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-walk%2Fdownload%2Fdom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
integrity sha1-DFSL7wSPTR8qlySQAiNgYNqj/YQ=
domelementtype@1:
version "1.3.1"
resolved "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
integrity sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=
domelementtype@^2.0.1:
version "2.0.1"
resolved "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"
integrity sha1-H4vf6R9aeAYydOgDtL3O326U+U0=
domexception@^1.0.1: domexception@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" resolved "https://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
...@@ -2105,6 +2463,27 @@ domexception@^1.0.1: ...@@ -2105,6 +2463,27 @@ domexception@^1.0.1:
dependencies: dependencies:
webidl-conversions "^4.0.2" webidl-conversions "^4.0.2"
domutils@^1.7.0:
version "1.7.0"
resolved "https://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz?cache=0&sync_timestamp=1589052559692&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomutils%2Fdownload%2Fdomutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
integrity sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=
dependencies:
dom-serializer "0"
domelementtype "1"
dva-core@2.0.2:
version "2.0.2"
resolved "https://registry.npm.taobao.org/dva-core/download/dva-core-2.0.2.tgz#7166ef879e335db018b942c9c0f2e1a5543851a0"
integrity sha1-cWbvh54zXbAYuULJwPLhpVQ4UaA=
dependencies:
"@babel/runtime" "^7.0.0"
flatten "^1.0.2"
global "^4.3.2"
invariant "^2.2.1"
is-plain-object "^2.0.3"
redux-saga "^0.16.0"
warning "^3.0.0"
ecc-jsbn@~0.1.1: ecc-jsbn@~0.1.1:
version "0.1.2" version "0.1.2"
resolved "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" resolved "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
...@@ -2147,6 +2526,39 @@ end-of-stream@^1.1.0: ...@@ -2147,6 +2526,39 @@ end-of-stream@^1.1.0:
dependencies: dependencies:
once "^1.4.0" once "^1.4.0"
engine.io-client@~3.1.0:
version "3.1.6"
resolved "https://registry.npm.taobao.org/engine.io-client/download/engine.io-client-3.1.6.tgz?cache=0&sync_timestamp=1591281386863&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fengine.io-client%2Fdownload%2Fengine.io-client-3.1.6.tgz#5bdeb130f8b94a50ac5cbeb72583e7a4a063ddfd"
integrity sha1-W96xMPi5SlCsXL63JYPnpKBj3f0=
dependencies:
component-emitter "1.2.1"
component-inherit "0.0.3"
debug "~3.1.0"
engine.io-parser "~2.1.1"
has-cors "1.1.0"
indexof "0.0.1"
parseqs "0.0.5"
parseuri "0.0.5"
ws "~3.3.1"
xmlhttprequest-ssl "~1.5.4"
yeast "0.1.2"
engine.io-parser@~2.1.1:
version "2.1.3"
resolved "https://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-2.1.3.tgz?cache=0&sync_timestamp=1589894480408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fengine.io-parser%2Fdownload%2Fengine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6"
integrity sha1-dXq5cPvy37Mse3SwMyFtVznveaY=
dependencies:
after "0.8.2"
arraybuffer.slice "~0.0.7"
base64-arraybuffer "0.1.5"
blob "0.0.5"
has-binary2 "~1.0.2"
entities@^2.0.0:
version "2.0.3"
resolved "https://registry.npm.taobao.org/entities/download/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
integrity sha1-XEh+V0Krk8Fau12iJ1m4WQ7AO38=
envinfo@^7.1.0: envinfo@^7.1.0:
version "7.5.1" version "7.5.1"
resolved "https://registry.npm.taobao.org/envinfo/download/envinfo-7.5.1.tgz#93c26897225a00457c75e734d354ea9106a72236" resolved "https://registry.npm.taobao.org/envinfo/download/envinfo-7.5.1.tgz#93c26897225a00457c75e734d354ea9106a72236"
...@@ -2198,7 +2610,7 @@ escape-html@~1.0.3: ...@@ -2198,7 +2610,7 @@ escape-html@~1.0.3:
resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
escape-string-regexp@^1.0.5: escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
...@@ -2304,7 +2716,7 @@ eslint-scope@^5.0.0: ...@@ -2304,7 +2716,7 @@ eslint-scope@^5.0.0:
esrecurse "^4.1.0" esrecurse "^4.1.0"
estraverse "^4.1.1" estraverse "^4.1.1"
eslint-utils@^1.3.1, eslint-utils@^1.4.3: eslint-utils@^1.3.1, eslint-utils@^1.4.2:
version "1.4.3" version "1.4.3"
resolved "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz?cache=0&sync_timestamp=1592222107394&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" resolved "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz?cache=0&sync_timestamp=1592222107394&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
integrity sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8= integrity sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8=
...@@ -2316,10 +2728,10 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: ...@@ -2316,10 +2728,10 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
resolved "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1592583198905&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" resolved "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1592583198905&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha1-MOvR73wv3/AcOk8VEESvJfqwUj4= integrity sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=
eslint@^6.5.1: eslint@6.5.1:
version "6.8.0" version "6.5.1"
resolved "https://registry.npm.taobao.org/eslint/download/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" resolved "https://registry.npm.taobao.org/eslint/download/eslint-6.5.1.tgz#828e4c469697d43bb586144be152198b91e96ed6"
integrity sha1-YiYtZylzn5J1cjgkMC+yJ8jJP/s= integrity sha1-go5MRpaX1Du1hhRL4VIZi5HpbtY=
dependencies: dependencies:
"@babel/code-frame" "^7.0.0" "@babel/code-frame" "^7.0.0"
ajv "^6.10.0" ajv "^6.10.0"
...@@ -2328,19 +2740,19 @@ eslint@^6.5.1: ...@@ -2328,19 +2740,19 @@ eslint@^6.5.1:
debug "^4.0.1" debug "^4.0.1"
doctrine "^3.0.0" doctrine "^3.0.0"
eslint-scope "^5.0.0" eslint-scope "^5.0.0"
eslint-utils "^1.4.3" eslint-utils "^1.4.2"
eslint-visitor-keys "^1.1.0" eslint-visitor-keys "^1.1.0"
espree "^6.1.2" espree "^6.1.1"
esquery "^1.0.1" esquery "^1.0.1"
esutils "^2.0.2" esutils "^2.0.2"
file-entry-cache "^5.0.1" file-entry-cache "^5.0.1"
functional-red-black-tree "^1.0.1" functional-red-black-tree "^1.0.1"
glob-parent "^5.0.0" glob-parent "^5.0.0"
globals "^12.1.0" globals "^11.7.0"
ignore "^4.0.6" ignore "^4.0.6"
import-fresh "^3.0.0" import-fresh "^3.0.0"
imurmurhash "^0.1.4" imurmurhash "^0.1.4"
inquirer "^7.0.0" inquirer "^6.4.1"
is-glob "^4.0.0" is-glob "^4.0.0"
js-yaml "^3.13.1" js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1" json-stable-stringify-without-jsonify "^1.0.1"
...@@ -2349,7 +2761,7 @@ eslint@^6.5.1: ...@@ -2349,7 +2761,7 @@ eslint@^6.5.1:
minimatch "^3.0.4" minimatch "^3.0.4"
mkdirp "^0.5.1" mkdirp "^0.5.1"
natural-compare "^1.4.0" natural-compare "^1.4.0"
optionator "^0.8.3" optionator "^0.8.2"
progress "^2.0.0" progress "^2.0.0"
regexpp "^2.0.1" regexpp "^2.0.1"
semver "^6.1.2" semver "^6.1.2"
...@@ -2359,7 +2771,7 @@ eslint@^6.5.1: ...@@ -2359,7 +2771,7 @@ eslint@^6.5.1:
text-table "^0.2.0" text-table "^0.2.0"
v8-compile-cache "^2.0.3" v8-compile-cache "^2.0.3"
espree@^6.1.2: espree@^6.1.1:
version "6.2.1" version "6.2.1"
resolved "https://registry.npm.taobao.org/espree/download/espree-6.2.1.tgz?cache=0&sync_timestamp=1591269463485&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" resolved "https://registry.npm.taobao.org/espree/download/espree-6.2.1.tgz?cache=0&sync_timestamp=1591269463485&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
integrity sha1-d/xy4f10SiBSwg84pbV1gy6Cc0o= integrity sha1-d/xy4f10SiBSwg84pbV1gy6Cc0o=
...@@ -2626,13 +3038,6 @@ figures@^2.0.0: ...@@ -2626,13 +3038,6 @@ figures@^2.0.0:
dependencies: dependencies:
escape-string-regexp "^1.0.5" escape-string-regexp "^1.0.5"
figures@^3.0.0:
version "3.2.0"
resolved "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1581865349068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
integrity sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=
dependencies:
escape-string-regexp "^1.0.5"
file-entry-cache@^5.0.1: file-entry-cache@^5.0.1:
version "5.0.1" version "5.0.1"
resolved "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" resolved "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
...@@ -2706,6 +3111,18 @@ flatted@^2.0.0: ...@@ -2706,6 +3111,18 @@ flatted@^2.0.0:
resolved "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" resolved "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
integrity sha1-RXWyHivO50NKqb5mL0t7X5wrUTg= integrity sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=
flatten@^1.0.2:
version "1.0.3"
resolved "https://registry.npm.taobao.org/flatten/download/flatten-1.0.3.tgz?cache=0&sync_timestamp=1572489877048&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflatten%2Fdownload%2Fflatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
integrity sha1-wSg6yfJ7Noq8HjbR/3sEUBowNWs=
follow-redirects@1.5.10:
version "1.5.10"
resolved "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.10.tgz?cache=0&sync_timestamp=1592518405361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
integrity sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=
dependencies:
debug "=3.1.0"
for-in@^1.0.2: for-in@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" resolved "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
...@@ -2826,17 +3243,23 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: ...@@ -2826,17 +3243,23 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
once "^1.3.0" once "^1.3.0"
path-is-absolute "^1.0.0" path-is-absolute "^1.0.0"
globals@^11.1.0: global@^4.3.2:
version "4.4.0"
resolved "https://registry.npm.taobao.org/global/download/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
integrity sha1-PnsQUXkAajI+1xqvyj6cV6XMZAY=
dependencies:
min-document "^2.19.0"
process "^0.11.10"
globals@^11.1.0, globals@^11.7.0:
version "11.12.0" version "11.12.0"
resolved "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz?cache=0&sync_timestamp=1591426170432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" resolved "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz?cache=0&sync_timestamp=1591426170432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= integrity sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=
globals@^12.1.0: globals@^9.18.0:
version "12.4.0" version "9.18.0"
resolved "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz?cache=0&sync_timestamp=1591426170432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" resolved "https://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz?cache=0&sync_timestamp=1591426170432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
integrity sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg= integrity sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=
dependencies:
type-fest "^0.8.1"
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0:
version "4.2.4" version "4.2.4"
...@@ -2868,6 +3291,25 @@ har-validator@~5.1.3: ...@@ -2868,6 +3291,25 @@ har-validator@~5.1.3:
ajv "^6.5.5" ajv "^6.5.5"
har-schema "^2.0.0" har-schema "^2.0.0"
has-ansi@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
dependencies:
ansi-regex "^2.0.0"
has-binary2@~1.0.2:
version "1.0.3"
resolved "https://registry.npm.taobao.org/has-binary2/download/has-binary2-1.0.3.tgz?cache=0&sync_timestamp=1587049420544&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-binary2%2Fdownload%2Fhas-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
integrity sha1-d3asYn8+p3JQz8My2rfd9eT10R0=
dependencies:
isarray "2.0.1"
has-cors@1.1.0:
version "1.1.0"
resolved "https://registry.npm.taobao.org/has-cors/download/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
has-flag@^3.0.0: has-flag@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
...@@ -2926,6 +3368,13 @@ hermes-engine@~0.4.0: ...@@ -2926,6 +3368,13 @@ hermes-engine@~0.4.0:
resolved "https://registry.npm.taobao.org/hermes-engine/download/hermes-engine-0.4.1.tgz#2d02b295596298643c4d24b86687eb554db9e950" resolved "https://registry.npm.taobao.org/hermes-engine/download/hermes-engine-0.4.1.tgz#2d02b295596298643c4d24b86687eb554db9e950"
integrity sha1-LQKylVlimGQ8TSS4ZofrVU256VA= integrity sha1-LQKylVlimGQ8TSS4ZofrVU256VA=
hoist-non-react-statics@^3.3.0:
version "3.3.2"
resolved "https://registry.npm.taobao.org/hoist-non-react-statics/download/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha1-7OCsr3HWLClpwuxZ/v9CpLGoW0U=
dependencies:
react-is "^16.7.0"
hosted-git-info@^2.1.4: hosted-git-info@^2.1.4:
version "2.8.8" version "2.8.8"
resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
...@@ -2970,6 +3419,11 @@ iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@~0.4.13: ...@@ -2970,6 +3419,11 @@ iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@~0.4.13:
dependencies: dependencies:
safer-buffer ">= 2.1.2 < 3" safer-buffer ">= 2.1.2 < 3"
ieee754@^1.1.4:
version "1.1.13"
resolved "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
integrity sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=
ignore@^4.0.6: ignore@^4.0.6:
version "4.0.6" version "4.0.6"
resolved "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" resolved "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
...@@ -3014,6 +3468,11 @@ imurmurhash@^0.1.4: ...@@ -3014,6 +3468,11 @@ imurmurhash@^0.1.4:
resolved "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" resolved "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
indexof@0.0.1:
version "0.0.1"
resolved "https://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
inflight@^1.0.4: inflight@^1.0.4:
version "1.0.6" version "1.0.6"
resolved "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" resolved "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
...@@ -3047,26 +3506,26 @@ inquirer@^3.0.6: ...@@ -3047,26 +3506,26 @@ inquirer@^3.0.6:
strip-ansi "^4.0.0" strip-ansi "^4.0.0"
through "^2.3.6" through "^2.3.6"
inquirer@^7.0.0: inquirer@^6.4.1:
version "7.2.0" version "6.5.2"
resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-7.2.0.tgz?cache=0&sync_timestamp=1592184390073&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-7.2.0.tgz#63ce99d823090de7eb420e4bb05e6f3449aa389a" resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-6.5.2.tgz?cache=0&sync_timestamp=1592184390073&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
integrity sha1-Y86Z2CMJDefrQg5LsF5vNEmqOJo= integrity sha1-rVCUI3XQNtMn/1KMCL1fqwiZKMo=
dependencies: dependencies:
ansi-escapes "^4.2.1" ansi-escapes "^3.2.0"
chalk "^3.0.0" chalk "^2.4.2"
cli-cursor "^3.1.0" cli-cursor "^2.1.0"
cli-width "^2.0.0" cli-width "^2.0.0"
external-editor "^3.0.3" external-editor "^3.0.3"
figures "^3.0.0" figures "^2.0.0"
lodash "^4.17.15" lodash "^4.17.12"
mute-stream "0.0.8" mute-stream "0.0.7"
run-async "^2.4.0" run-async "^2.2.0"
rxjs "^6.5.3" rxjs "^6.4.0"
string-width "^4.1.0" string-width "^2.1.0"
strip-ansi "^6.0.0" strip-ansi "^5.1.0"
through "^2.3.6" through "^2.3.6"
invariant@^2.2.4: invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4:
version "2.2.4" version "2.2.4"
resolved "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" resolved "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
integrity sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY= integrity sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=
...@@ -3197,6 +3656,11 @@ is-number@^3.0.0: ...@@ -3197,6 +3656,11 @@ is-number@^3.0.0:
dependencies: dependencies:
kind-of "^3.0.2" kind-of "^3.0.2"
is-obj@^1.0.0:
version "1.0.1"
resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
is-plain-object@^2.0.3, is-plain-object@^2.0.4: is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4" version "2.0.4"
resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
...@@ -3248,6 +3712,16 @@ isarray@1.0.0, isarray@~1.0.0: ...@@ -3248,6 +3712,16 @@ isarray@1.0.0, isarray@~1.0.0:
resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
isarray@2.0.1:
version "2.0.1"
resolved "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
isarray@^2.0.1:
version "2.0.5"
resolved "https://registry.npm.taobao.org/isarray/download/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
integrity sha1-ivHkwSISRMxiRZ+vOJQNTmRKVyM=
isexe@^2.0.0: isexe@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
...@@ -3679,7 +4153,7 @@ jest-worker@^24.6.0, jest-worker@^24.9.0: ...@@ -3679,7 +4153,7 @@ jest-worker@^24.6.0, jest-worker@^24.9.0:
merge-stream "^2.0.0" merge-stream "^2.0.0"
supports-color "^6.1.0" supports-color "^6.1.0"
jest@^24.9.0: jest@24.9.0:
version "24.9.0" version "24.9.0"
resolved "https://registry.npm.taobao.org/jest/download/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" resolved "https://registry.npm.taobao.org/jest/download/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171"
integrity sha1-mH0pDAWgi1LFYYjBAC42jtsAcXE= integrity sha1-mH0pDAWgi1LFYYjBAC42jtsAcXE=
...@@ -3697,6 +4171,11 @@ jetifier@^1.6.2: ...@@ -3697,6 +4171,11 @@ jetifier@^1.6.2:
resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796260005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796260005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk=
js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz?cache=0&sync_timestamp=1586796260005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
js-yaml@^3.13.1: js-yaml@^3.13.1:
version "3.14.0" version "3.14.0"
resolved "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" resolved "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
...@@ -3789,7 +4268,7 @@ json-stringify-safe@~5.0.1: ...@@ -3789,7 +4268,7 @@ json-stringify-safe@~5.0.1:
resolved "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" resolved "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
json5@^2.1.2: json5@^2.1.0, json5@^2.1.2:
version "2.1.3" version "2.1.3"
resolved "https://registry.npm.taobao.org/json5/download/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" resolved "https://registry.npm.taobao.org/json5/download/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
integrity sha1-ybD3+pIzv+WAf+ZvzzpWF+1ZfUM= integrity sha1-ybD3+pIzv+WAf+ZvzzpWF+1ZfUM=
...@@ -3932,7 +4411,7 @@ lodash.unescape@4.0.1: ...@@ -3932,7 +4411,7 @@ lodash.unescape@4.0.1:
resolved "https://registry.npm.taobao.org/lodash.unescape/download/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" resolved "https://registry.npm.taobao.org/lodash.unescape/download/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.3.0: lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.3.0:
version "4.17.15" version "4.17.15"
resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&sync_timestamp=1571657272199&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&sync_timestamp=1571657272199&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg= integrity sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=
...@@ -3995,6 +4474,11 @@ map-visit@^1.0.0: ...@@ -3995,6 +4474,11 @@ map-visit@^1.0.0:
dependencies: dependencies:
object-visit "^1.0.0" object-visit "^1.0.0"
mdn-data@2.0.6:
version "2.0.6"
resolved "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978"
integrity sha1-hS3GD8ql2qLoz2yRicRA7T4EKXg=
merge-stream@^1.0.1: merge-stream@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.npm.taobao.org/merge-stream/download/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" resolved "https://registry.npm.taobao.org/merge-stream/download/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
...@@ -4083,7 +4567,7 @@ metro-minify-uglify@0.58.0: ...@@ -4083,7 +4567,7 @@ metro-minify-uglify@0.58.0:
dependencies: dependencies:
uglify-es "^3.1.9" uglify-es "^3.1.9"
metro-react-native-babel-preset@0.58.0, metro-react-native-babel-preset@^0.58.0: metro-react-native-babel-preset@0.58.0:
version "0.58.0" version "0.58.0"
resolved "https://registry.npm.taobao.org/metro-react-native-babel-preset/download/metro-react-native-babel-preset-0.58.0.tgz#18f48d33fe124280ffabc000ab8b42c488d762a2" resolved "https://registry.npm.taobao.org/metro-react-native-babel-preset/download/metro-react-native-babel-preset-0.58.0.tgz#18f48d33fe124280ffabc000ab8b42c488d762a2"
integrity sha1-GPSNM/4SQoD/q8AAq4tCxIjXYqI= integrity sha1-GPSNM/4SQoD/q8AAq4tCxIjXYqI=
...@@ -4286,10 +4770,12 @@ mimic-fn@^1.0.0: ...@@ -4286,10 +4770,12 @@ mimic-fn@^1.0.0:
resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
integrity sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI= integrity sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=
mimic-fn@^2.1.0: min-document@^2.19.0:
version "2.1.0" version "2.19.0"
resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" resolved "https://registry.npm.taobao.org/min-document/download/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
dependencies:
dom-walk "^0.1.0"
minimatch@^3.0.4: minimatch@^3.0.4:
version "3.0.4" version "3.0.4"
...@@ -4318,6 +4804,11 @@ mkdirp@^0.5.1: ...@@ -4318,6 +4804,11 @@ mkdirp@^0.5.1:
dependencies: dependencies:
minimist "^1.2.5" minimist "^1.2.5"
moment@2.27.0:
version "2.27.0"
resolved "https://registry.npm.taobao.org/moment/download/moment-2.27.0.tgz?cache=0&sync_timestamp=1592516081697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d"
integrity sha1-i/9OPiaiNiIN/j423nVrbrqgEF0=
ms@2.0.0: ms@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
...@@ -4338,11 +4829,6 @@ mute-stream@0.0.7: ...@@ -4338,11 +4829,6 @@ mute-stream@0.0.7:
resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
mute-stream@0.0.8:
version "0.0.8"
resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=
nan@^2.12.1: nan@^2.12.1:
version "2.14.1" version "2.14.1"
resolved "https://registry.npm.taobao.org/nan/download/nan-2.14.1.tgz?cache=0&sync_timestamp=1587495810273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" resolved "https://registry.npm.taobao.org/nan/download/nan-2.14.1.tgz?cache=0&sync_timestamp=1587495810273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
...@@ -4419,6 +4905,11 @@ node-stream-zip@^1.9.1: ...@@ -4419,6 +4905,11 @@ node-stream-zip@^1.9.1:
resolved "https://registry.npm.taobao.org/node-stream-zip/download/node-stream-zip-1.11.2.tgz#5d0124b80e2942afd7f5853a36ceb0d65c1d9e77" resolved "https://registry.npm.taobao.org/node-stream-zip/download/node-stream-zip-1.11.2.tgz#5d0124b80e2942afd7f5853a36ceb0d65c1d9e77"
integrity sha1-XQEkuA4pQq/X9YU6Ns6w1lwdnnc= integrity sha1-XQEkuA4pQq/X9YU6Ns6w1lwdnnc=
normalize-css-color@^1.0.2:
version "1.0.2"
resolved "https://registry.npm.taobao.org/normalize-css-color/download/normalize-css-color-1.0.2.tgz#02991e97cccec6623fe573afbbf0de6a1f3e9f8d"
integrity sha1-Apkel8zOxmI/5XOvu/Deah8+n40=
normalize-package-data@^2.3.2: normalize-package-data@^2.3.2:
version "2.5.0" version "2.5.0"
resolved "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" resolved "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
...@@ -4443,6 +4934,13 @@ npm-run-path@^2.0.0: ...@@ -4443,6 +4934,13 @@ npm-run-path@^2.0.0:
dependencies: dependencies:
path-key "^2.0.0" path-key "^2.0.0"
nth-check@^1.0.2:
version "1.0.2"
resolved "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
integrity sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=
dependencies:
boolbase "~1.0.0"
nullthrows@^1.1.1: nullthrows@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.npm.taobao.org/nullthrows/download/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" resolved "https://registry.npm.taobao.org/nullthrows/download/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
...@@ -4463,11 +4961,16 @@ ob1@0.58.0: ...@@ -4463,11 +4961,16 @@ ob1@0.58.0:
resolved "https://registry.npm.taobao.org/ob1/download/ob1-0.58.0.tgz#484a1e9a63a8b79d9ea6f3a83b2a42110faac973" resolved "https://registry.npm.taobao.org/ob1/download/ob1-0.58.0.tgz#484a1e9a63a8b79d9ea6f3a83b2a42110faac973"
integrity sha1-SEoemmOot52epvOoOypCEQ+qyXM= integrity sha1-SEoemmOot52epvOoOypCEQ+qyXM=
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1" version "4.1.1"
resolved "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1571657171505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" resolved "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1571657171505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
object-component@0.0.3:
version "0.0.3"
resolved "https://registry.npm.taobao.org/object-component/download/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=
object-copy@^0.1.0: object-copy@^0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" resolved "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
...@@ -4555,13 +5058,6 @@ onetime@^2.0.0: ...@@ -4555,13 +5058,6 @@ onetime@^2.0.0:
dependencies: dependencies:
mimic-fn "^1.0.0" mimic-fn "^1.0.0"
onetime@^5.1.0:
version "5.1.0"
resolved "https://registry.npm.taobao.org/onetime/download/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
integrity sha1-//DzyRYX/mK7UBiWNumayKbfe+U=
dependencies:
mimic-fn "^2.1.0"
open@^6.2.0: open@^6.2.0:
version "6.4.0" version "6.4.0"
resolved "https://registry.npm.taobao.org/open/download/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" resolved "https://registry.npm.taobao.org/open/download/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9"
...@@ -4569,7 +5065,7 @@ open@^6.2.0: ...@@ -4569,7 +5065,7 @@ open@^6.2.0:
dependencies: dependencies:
is-wsl "^1.1.0" is-wsl "^1.1.0"
optionator@^0.8.1, optionator@^0.8.3: optionator@^0.8.1, optionator@^0.8.2:
version "0.8.3" version "0.8.3"
resolved "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" resolved "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
integrity sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU= integrity sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=
...@@ -4598,6 +5094,11 @@ ora@^3.4.0: ...@@ -4598,6 +5094,11 @@ ora@^3.4.0:
strip-ansi "^5.2.0" strip-ansi "^5.2.0"
wcwidth "^1.0.1" wcwidth "^1.0.1"
os-shim@^0.1.2:
version "0.1.3"
resolved "https://registry.npm.taobao.org/os-shim/download/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917"
integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=
os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" resolved "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
...@@ -4671,6 +5172,20 @@ parse5@4.0.0: ...@@ -4671,6 +5172,20 @@ parse5@4.0.0:
resolved "https://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" resolved "https://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
integrity sha1-bXhlbj2o14tOwLkG98CO8d/j9gg= integrity sha1-bXhlbj2o14tOwLkG98CO8d/j9gg=
parseqs@0.0.5:
version "0.0.5"
resolved "https://registry.npm.taobao.org/parseqs/download/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=
dependencies:
better-assert "~1.0.0"
parseuri@0.0.5:
version "0.0.5"
resolved "https://registry.npm.taobao.org/parseuri/download/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=
dependencies:
better-assert "~1.0.0"
parseurl@~1.3.3: parseurl@~1.3.3:
version "1.3.3" version "1.3.3"
resolved "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" resolved "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
...@@ -4767,11 +5282,25 @@ pn@^1.1.0: ...@@ -4767,11 +5282,25 @@ pn@^1.1.0:
resolved "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" resolved "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
integrity sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs= integrity sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=
pngjs@^3.3.0:
version "3.4.0"
resolved "https://registry.npm.taobao.org/pngjs/download/pngjs-3.4.0.tgz?cache=0&sync_timestamp=1586978554221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpngjs%2Fdownload%2Fpngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
integrity sha1-mcp9clll+2VYFOr2XzjxK72/VV8=
posix-character-classes@^0.1.0: posix-character-classes@^0.1.0:
version "0.1.1" version "0.1.1"
resolved "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" resolved "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
pre-commit@1.2.2:
version "1.2.2"
resolved "https://registry.npm.taobao.org/pre-commit/download/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6"
integrity sha1-287g7p3nI15X95xW186UZBpp7sY=
dependencies:
cross-spawn "^5.0.1"
spawn-sync "^1.0.15"
which "1.2.x"
prelude-ls@~1.1.2: prelude-ls@~1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" resolved "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
...@@ -4812,6 +5341,11 @@ process-nextick-args@~2.0.0: ...@@ -4812,6 +5341,11 @@ process-nextick-args@~2.0.0:
resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I=
process@^0.11.10:
version "0.11.10"
resolved "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
progress@^2.0.0: progress@^2.0.0:
version "2.0.3" version "2.0.3"
resolved "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" resolved "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
...@@ -4832,7 +5366,7 @@ prompts@^2.0.1: ...@@ -4832,7 +5366,7 @@ prompts@^2.0.1:
kleur "^3.0.3" kleur "^3.0.3"
sisteransi "^1.0.4" sisteransi "^1.0.4"
prop-types@^15.6.2, prop-types@^15.7.2: prop-types@15.x, prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2:
version "15.7.2" version "15.7.2"
resolved "https://registry.npm.taobao.org/prop-types/download/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" resolved "https://registry.npm.taobao.org/prop-types/download/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha1-UsQedbjIfnK52TYOAga5ncv/psU= integrity sha1-UsQedbjIfnK52TYOAga5ncv/psU=
...@@ -4864,16 +5398,82 @@ punycode@^2.1.0, punycode@^2.1.1: ...@@ -4864,16 +5398,82 @@ punycode@^2.1.0, punycode@^2.1.1:
resolved "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" resolved "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew=
qrcode@^1.3.2:
version "1.4.4"
resolved "https://registry.npm.taobao.org/qrcode/download/qrcode-1.4.4.tgz#f0c43568a7e7510a55efc3b88d9602f71963ea83"
integrity sha1-8MQ1aKfnUQpV78O4jZYC9xlj6oM=
dependencies:
buffer "^5.4.3"
buffer-alloc "^1.2.0"
buffer-from "^1.1.1"
dijkstrajs "^1.0.1"
isarray "^2.0.1"
pngjs "^3.3.0"
yargs "^13.2.4"
qs@6.9.4:
version "6.9.4"
resolved "https://registry.npm.taobao.org/qs/download/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687"
integrity sha1-kJCykNH5FyjTwi5UhDykSupatoc=
qs@~6.5.2: qs@~6.5.2:
version "6.5.2" version "6.5.2"
resolved "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" resolved "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY= integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=
raf@^3.1.0, raf@^3.4.0:
version "3.4.1"
resolved "https://registry.npm.taobao.org/raf/download/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
integrity sha1-B0LpmkplUvRF1z4+4DKK8P8e3jk=
dependencies:
performance-now "^2.1.0"
range-parser@~1.2.1: range-parser@~1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" resolved "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
integrity sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE= integrity sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=
rc-animate@2.x:
version "2.11.1"
resolved "https://registry.npm.taobao.org/rc-animate/download/rc-animate-2.11.1.tgz#2666eeb6f1f2a495a13b2af09e236712278fdb2c"
integrity sha1-JmbutvHypJWhOyrwniNnEieP2yw=
dependencies:
babel-runtime "6.x"
classnames "^2.2.6"
css-animation "^1.3.2"
prop-types "15.x"
raf "^3.4.0"
rc-util "^4.15.3"
react-lifecycles-compat "^3.0.4"
rc-gesture@~0.0.18, rc-gesture@~0.0.22:
version "0.0.22"
resolved "https://registry.npm.taobao.org/rc-gesture/download/rc-gesture-0.0.22.tgz#fbcbdd5b46387a978b3ede48b42748e8ff77dddd"
integrity sha1-+8vdW0Y4epeLPt5ItCdI6P933d0=
dependencies:
babel-runtime "6.x"
rc-swipeout@~2.0.0:
version "2.0.11"
resolved "https://registry.npm.taobao.org/rc-swipeout/download/rc-swipeout-2.0.11.tgz#dfad9c7b38a15ea0376e39cb3356e36fed7a4155"
integrity sha1-362cezihXqA3bjnLM1bjb+16QVU=
dependencies:
babel-runtime "6.x"
classnames "2.x"
rc-gesture "~0.0.22"
react-native-swipeout "^2.2.2"
rc-util@^4.15.3:
version "4.21.1"
resolved "https://registry.npm.taobao.org/rc-util/download/rc-util-4.21.1.tgz?cache=0&sync_timestamp=1591671278890&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-util%2Fdownload%2Frc-util-4.21.1.tgz#88602d0c3185020aa1053d9a1e70eac161becb05"
integrity sha1-iGAtDDGFAgqhBT2aHnDqwWG+ywU=
dependencies:
add-dom-event-listener "^1.1.0"
prop-types "^15.5.10"
react-is "^16.12.0"
react-lifecycles-compat "^3.0.4"
shallowequal "^1.1.0"
react-devtools-core@^4.0.6: react-devtools-core@^4.0.6:
version "4.7.0" version "4.7.0"
resolved "https://registry.npm.taobao.org/react-devtools-core/download/react-devtools-core-4.7.0.tgz#71e89087352abe60c160dfb60a7fa700f612af7a" resolved "https://registry.npm.taobao.org/react-devtools-core/download/react-devtools-core-4.7.0.tgz#71e89087352abe60c160dfb60a7fa700f612af7a"
...@@ -4882,11 +5482,97 @@ react-devtools-core@^4.0.6: ...@@ -4882,11 +5482,97 @@ react-devtools-core@^4.0.6:
shell-quote "^1.6.1" shell-quote "^1.6.1"
ws "^7" ws "^7"
react-is@^16.12.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6: react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0:
version "16.13.1" version "16.13.1"
resolved "https://registry.npm.taobao.org/react-is/download/react-is-16.13.1.tgz?cache=0&sync_timestamp=1592589350363&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-is%2Fdownload%2Freact-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" resolved "https://registry.npm.taobao.org/react-is/download/react-is-16.13.1.tgz?cache=0&sync_timestamp=1592589350363&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-is%2Fdownload%2Freact-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ= integrity sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ=
react-lifecycles-compat@^3.0.4:
version "3.0.4"
resolved "https://registry.npm.taobao.org/react-lifecycles-compat/download/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
integrity sha1-TxonOv38jzSIqMUWv9p4+HI1I2I=
react-native-camera-roll-picker@^1.2.1:
version "1.3.0"
resolved "https://registry.npm.taobao.org/react-native-camera-roll-picker/download/react-native-camera-roll-picker-1.3.0.tgz#7d28465da32f66155da7e8ae2ce79b0debeb6743"
integrity sha1-fShGXaMvZhVdp+iuLOebDevrZ0M=
dependencies:
prop-types "^15.6.0"
react-native-collapsible@^0.9.0:
version "0.9.0"
resolved "https://registry.npm.taobao.org/react-native-collapsible/download/react-native-collapsible-0.9.0.tgz#207849faa15493820d19fa6a5e58f7c7b6c1b910"
integrity sha1-IHhJ+qFUk4INGfpqXlj3x7bBuRA=
dependencies:
prop-types "^15.5.10"
react-native-dismiss-keyboard@1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/react-native-dismiss-keyboard/download/react-native-dismiss-keyboard-1.0.0.tgz#32886242b3f2317e121f3aeb9b0a585e2b879b49"
integrity sha1-MohiQrPyMX4SHzrrmwpYXiuHm0k=
react-native-drawer-layout@~1.3.0:
version "1.3.2"
resolved "https://registry.npm.taobao.org/react-native-drawer-layout/download/react-native-drawer-layout-1.3.2.tgz#b9740d7663a1dc4f88a61b9c6d93d2d948ea426e"
integrity sha1-uXQNdmOh3E+IphucbZPS2UjqQm4=
dependencies:
react-native-dismiss-keyboard "1.0.0"
react-native-keyevent@0.2.8:
version "0.2.8"
resolved "https://registry.npm.taobao.org/react-native-keyevent/download/react-native-keyevent-0.2.8.tgz#f6c035bf17b8d8221e546e85e430cd1d3021c5d7"
integrity sha1-9sA1vxe42CIeVG6F5DDNHTAhxdc=
react-native-menu@^0.23.0:
version "0.23.0"
resolved "https://registry.npm.taobao.org/react-native-menu/download/react-native-menu-0.23.0.tgz#3c023239aed95d419275df50c199982ad7eb062b"
integrity sha1-PAIyOa7ZXUGSdd9QwZmYKtfrBis=
dependencies:
create-react-class "^15.6.0"
prop-types "^15.5.10"
react-timer-mixin "^0.13.3"
react-native-qrcode-svg@6.0.6:
version "6.0.6"
resolved "https://registry.npm.taobao.org/react-native-qrcode-svg/download/react-native-qrcode-svg-6.0.6.tgz#bd4756cc0d76eeb3d162dca2f55eea80e3ebbe97"
integrity sha1-vUdWzA127rPRYtyi9V7qgOPrvpc=
dependencies:
prop-types "^15.5.10"
qrcode "^1.3.2"
react-native-svg@12.1.0:
version "12.1.0"
resolved "https://registry.npm.taobao.org/react-native-svg/download/react-native-svg-12.1.0.tgz#acfe48c35cd5fca3d5fd767abae0560c36cfc03d"
integrity sha1-rP5Iw1zV/KPV/XZ6uuBWDDbPwD0=
dependencies:
css-select "^2.1.0"
css-tree "^1.0.0-alpha.39"
react-native-swipeout@^2.2.2:
version "2.3.6"
resolved "https://registry.npm.taobao.org/react-native-swipeout/download/react-native-swipeout-2.3.6.tgz#47dac8a835825cf3f2eef9e495574a3d9ab6d3fa"
integrity sha1-R9rIqDWCXPPy7vnklVdKPZq20/o=
dependencies:
create-react-class "^15.6.0"
prop-types "^15.5.10"
react-tween-state "^0.1.5"
react-native-swiper@1.6.0:
version "1.6.0"
resolved "https://registry.npm.taobao.org/react-native-swiper/download/react-native-swiper-1.6.0.tgz#59fdbdf95addee49630312f27077622c27776819"
integrity sha1-Wf29+Vrd7kljAxLycHdiLCd3aBk=
dependencies:
prop-types "^15.5.10"
react-native-vector-icons@6.6.0:
version "6.6.0"
resolved "https://registry.npm.taobao.org/react-native-vector-icons/download/react-native-vector-icons-6.6.0.tgz#66cf004918eb05d90778d64bd42077c1800d481b"
integrity sha1-Zs8ASRjrBdkHeNZL1CB3wYANSBs=
dependencies:
lodash "^4.0.0"
prop-types "^15.6.2"
yargs "^13.2.2"
react-native@0.62.2: react-native@0.62.2:
version "0.62.2" version "0.62.2"
resolved "https://registry.npm.taobao.org/react-native/download/react-native-0.62.2.tgz#d831e11a3178705449142df19a70ac2ca16bad10" resolved "https://registry.npm.taobao.org/react-native/download/react-native-0.62.2.tgz#d831e11a3178705449142df19a70ac2ca16bad10"
...@@ -4924,6 +5610,17 @@ react-native@0.62.2: ...@@ -4924,6 +5610,17 @@ react-native@0.62.2:
use-subscription "^1.0.0" use-subscription "^1.0.0"
whatwg-fetch "^3.0.0" whatwg-fetch "^3.0.0"
react-redux@7.2.0:
version "7.2.0"
resolved "https://registry.npm.taobao.org/react-redux/download/react-redux-7.2.0.tgz?cache=0&sync_timestamp=1581997590604&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-redux%2Fdownload%2Freact-redux-7.2.0.tgz#f970f62192b3981642fec46fd0db18a074fe879d"
integrity sha1-+XD2IZKzmBZC/sRv0NsYoHT+h50=
dependencies:
"@babel/runtime" "^7.5.5"
hoist-non-react-statics "^3.3.0"
loose-envify "^1.4.0"
prop-types "^15.7.2"
react-is "^16.9.0"
react-refresh@^0.4.0: react-refresh@^0.4.0:
version "0.4.3" version "0.4.3"
resolved "https://registry.npm.taobao.org/react-refresh/download/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" resolved "https://registry.npm.taobao.org/react-refresh/download/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53"
...@@ -4939,6 +5636,19 @@ react-test-renderer@16.11.0: ...@@ -4939,6 +5636,19 @@ react-test-renderer@16.11.0:
react-is "^16.8.6" react-is "^16.8.6"
scheduler "^0.17.0" scheduler "^0.17.0"
react-timer-mixin@^0.13.3:
version "0.13.4"
resolved "https://registry.npm.taobao.org/react-timer-mixin/download/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3"
integrity sha1-daAMPJTBOr4ptD1jtMZaiPyCZNM=
react-tween-state@^0.1.5:
version "0.1.5"
resolved "https://registry.npm.taobao.org/react-tween-state/download/react-tween-state-0.1.5.tgz#e98b066551efb93cb92dd1be14995c2e3deae339"
integrity sha1-6YsGZVHvuTy5LdG+FJlcLj3q4zk=
dependencies:
raf "^3.1.0"
tween-functions "^1.0.1"
react@16.11.0: react@16.11.0:
version "16.11.0" version "16.11.0"
resolved "https://registry.npm.taobao.org/react/download/react-16.11.0.tgz?cache=0&sync_timestamp=1592589335397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.11.0.tgz#d294545fe62299ccee83363599bf904e4a07fdbb" resolved "https://registry.npm.taobao.org/react/download/react-16.11.0.tgz?cache=0&sync_timestamp=1592589335397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact%2Fdownload%2Freact-16.11.0.tgz#d294545fe62299ccee83363599bf904e4a07fdbb"
...@@ -4985,6 +5695,19 @@ realpath-native@^1.1.0: ...@@ -4985,6 +5695,19 @@ realpath-native@^1.1.0:
dependencies: dependencies:
util.promisify "^1.0.0" util.promisify "^1.0.0"
redux-saga@^0.16.0:
version "0.16.2"
resolved "https://registry.npm.taobao.org/redux-saga/download/redux-saga-0.16.2.tgz#993662e86bc945d8509ac2b8daba3a8c615cc971"
integrity sha1-mTZi6GvJRdhQmsK42ro6jGFcyXE=
redux@4.0.5:
version "4.0.5"
resolved "https://registry.npm.taobao.org/redux/download/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f"
integrity sha1-TbXeWBbheJHeioDEJCMtBvBR2T8=
dependencies:
loose-envify "^1.4.0"
symbol-observable "^1.2.0"
regenerate-unicode-properties@^8.2.0: regenerate-unicode-properties@^8.2.0:
version "8.2.0" version "8.2.0"
resolved "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" resolved "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
...@@ -4997,6 +5720,11 @@ regenerate@^1.4.0: ...@@ -4997,6 +5720,11 @@ regenerate@^1.4.0:
resolved "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.1.tgz?cache=0&sync_timestamp=1591302331571&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate%2Fdownload%2Fregenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" resolved "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.1.tgz?cache=0&sync_timestamp=1591302331571&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate%2Fdownload%2Fregenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f"
integrity sha1-ytkq2Oa1kXc0hfvgWkhcr09Ffm8= integrity sha1-ytkq2Oa1kXc0hfvgWkhcr09Ffm8=
regenerator-runtime@^0.11.0:
version "0.11.1"
resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1584052481783&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
integrity sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=
regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4:
version "0.13.5" version "0.13.5"
resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.5.tgz?cache=0&sync_timestamp=1584052481783&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.5.tgz?cache=0&sync_timestamp=1584052481783&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697"
...@@ -5156,14 +5884,6 @@ restore-cursor@^2.0.0: ...@@ -5156,14 +5884,6 @@ restore-cursor@^2.0.0:
onetime "^2.0.0" onetime "^2.0.0"
signal-exit "^3.0.2" signal-exit "^3.0.2"
restore-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
integrity sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=
dependencies:
onetime "^5.1.0"
signal-exit "^3.0.2"
ret@~0.1.10: ret@~0.1.10:
version "0.1.15" version "0.1.15"
resolved "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" resolved "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
...@@ -5188,12 +5908,77 @@ rimraf@~2.2.6: ...@@ -5188,12 +5908,77 @@ rimraf@~2.2.6:
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" 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"
integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=
rmc-cascader@~5.0.0:
version "5.0.3"
resolved "https://registry.npm.taobao.org/rmc-cascader/download/rmc-cascader-5.0.3.tgz#c605b1eac6613e4c54aa6aed2cbae7f9c5a8c65f"
integrity sha1-xgWx6sZhPkxUqmrtLLrn+cWoxl8=
dependencies:
array-tree-filter "2.1.x"
babel-runtime "6.x"
rmc-picker "~5.0.0"
rmc-date-picker@^6.0.8:
version "6.0.10"
resolved "https://registry.npm.taobao.org/rmc-date-picker/download/rmc-date-picker-6.0.10.tgz#34dc7dfd424248be2d43527421576247c31583f6"
integrity sha1-NNx9/UJCSL4tQ1J0IVdiR8MVg/Y=
dependencies:
babel-runtime "6.x"
rmc-picker "~5.0.0"
rmc-dialog@1.1.1, rmc-dialog@^1.0.1, rmc-dialog@^1.1.1:
version "1.1.1"
resolved "https://registry.npm.taobao.org/rmc-dialog/download/rmc-dialog-1.1.1.tgz#1d7fbc6b2cad5b0b53fbab71fe29636d76f78217"
integrity sha1-HX+8ayytWwtT+6tx/iljbXb3ghc=
dependencies:
babel-runtime "6.x"
rc-animate "2.x"
rmc-feedback@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/rmc-feedback/download/rmc-feedback-2.0.0.tgz#cbc6cb3ae63c7a635eef0e25e4fbaf5ac366eeaa"
integrity sha1-y8bLOuY8emNe7w4l5PuvWsNm7qo=
dependencies:
babel-runtime "6.x"
classnames "^2.2.5"
rmc-input-number@^1.0.0:
version "1.0.5"
resolved "https://registry.npm.taobao.org/rmc-input-number/download/rmc-input-number-1.0.5.tgz#42e02a27b0c3c366be9ff0ce19d818b71e406f8f"
integrity sha1-QuAqJ7DDw2a+n/DOGdgYtx5Ab48=
dependencies:
babel-runtime "6.x"
classnames "^2.2.0"
rmc-feedback "^2.0.0"
rmc-picker@~5.0.0:
version "5.0.10"
resolved "https://registry.npm.taobao.org/rmc-picker/download/rmc-picker-5.0.10.tgz#9ca0acf45ad2c8afe9015a103a898436d825e18f"
integrity sha1-nKCs9FrSyK/pAVoQOomENtgl4Y8=
dependencies:
babel-runtime "6.x"
classnames "^2.2.6"
rmc-dialog "^1.1.1"
rmc-feedback "^2.0.0"
rmc-tabs@~1.2.0:
version "1.2.29"
resolved "https://registry.npm.taobao.org/rmc-tabs/download/rmc-tabs-1.2.29.tgz#dd2191525debbf8521e85aeb6d97670f652e4c83"
integrity sha1-3SGRUl3rv4Uh6FrrbZdnD2UuTIM=
dependencies:
babel-runtime "6.x"
rc-gesture "~0.0.18"
rn-topview@0.1.6, rn-topview@^0.1.6:
version "0.1.6"
resolved "https://registry.npm.taobao.org/rn-topview/download/rn-topview-0.1.6.tgz#b1b1216caf730f8547cd23c9b918ad0288454b11"
integrity sha1-sbEhbK9zD4VHzSPJuRitAohFSxE=
rsvp@^4.8.4: rsvp@^4.8.4:
version "4.8.5" version "4.8.5"
resolved "https://registry.npm.taobao.org/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" resolved "https://registry.npm.taobao.org/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
integrity sha1-yPFVMR0Wf2jyHhaN9x7FsIMRNzQ= integrity sha1-yPFVMR0Wf2jyHhaN9x7FsIMRNzQ=
run-async@^2.2.0, run-async@^2.4.0: run-async@^2.2.0:
version "2.4.1" version "2.4.1"
resolved "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" resolved "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
integrity sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU= integrity sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=
...@@ -5217,7 +6002,7 @@ rxjs@^5.4.3: ...@@ -5217,7 +6002,7 @@ rxjs@^5.4.3:
dependencies: dependencies:
symbol-observable "1.0.1" symbol-observable "1.0.1"
rxjs@^6.5.3: rxjs@^6.4.0:
version "6.5.5" version "6.5.5"
resolved "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" resolved "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
integrity sha1-xciE4wlMjP7jG/J+uH5UzPyH+ew= integrity sha1-xciE4wlMjP7jG/J+uH5UzPyH+ew=
...@@ -5348,6 +6133,11 @@ setprototypeof@1.1.1: ...@@ -5348,6 +6133,11 @@ setprototypeof@1.1.1:
resolved "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" resolved "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
integrity sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM= integrity sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=
shallowequal@^1.1.0:
version "1.1.0"
resolved "https://registry.npm.taobao.org/shallowequal/download/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
integrity sha1-GI1SHelbkIdAT9TctosT3wrk5/g=
shebang-command@^1.2.0: shebang-command@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
...@@ -5453,6 +6243,35 @@ snapdragon@^0.8.1: ...@@ -5453,6 +6243,35 @@ snapdragon@^0.8.1:
source-map-resolve "^0.5.0" source-map-resolve "^0.5.0"
use "^3.1.0" use "^3.1.0"
socket.io-client@2.0.4:
version "2.0.4"
resolved "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e"
integrity sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=
dependencies:
backo2 "1.0.2"
base64-arraybuffer "0.1.5"
component-bind "1.0.0"
component-emitter "1.2.1"
debug "~2.6.4"
engine.io-client "~3.1.0"
has-cors "1.1.0"
indexof "0.0.1"
object-component "0.0.3"
parseqs "0.0.5"
parseuri "0.0.5"
socket.io-parser "~3.1.1"
to-array "0.1.4"
socket.io-parser@~3.1.1:
version "3.1.3"
resolved "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-3.1.3.tgz#ed2da5ee79f10955036e3da413bfd7f1e4d86c8e"
integrity sha1-7S2l7nnxCVUDbj2kE7/X8eTYbI4=
dependencies:
component-emitter "1.2.1"
debug "~3.1.0"
has-binary2 "~1.0.2"
isarray "2.0.1"
source-map-resolve@^0.5.0: source-map-resolve@^0.5.0:
version "0.5.3" version "0.5.3"
resolved "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584829515586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" resolved "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584829515586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
...@@ -5487,6 +6306,14 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: ...@@ -5487,6 +6306,14 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM=
spawn-sync@^1.0.15:
version "1.0.15"
resolved "https://registry.npm.taobao.org/spawn-sync/download/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476"
integrity sha1-sAeZVX63+wyDdsKdROih6mfldHY=
dependencies:
concat-stream "^1.4.7"
os-shim "^0.1.2"
spdx-correct@^3.0.0: spdx-correct@^3.0.0:
version "3.1.1" version "3.1.1"
resolved "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz?cache=0&sync_timestamp=1590161967473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-correct%2Fdownload%2Fspdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" resolved "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz?cache=0&sync_timestamp=1590161967473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-correct%2Fdownload%2Fspdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
...@@ -5632,6 +6459,13 @@ string_decoder@~1.1.1: ...@@ -5632,6 +6459,13 @@ string_decoder@~1.1.1:
dependencies: dependencies:
safe-buffer "~5.1.0" safe-buffer "~5.1.0"
strip-ansi@^3.0.0:
version "3.0.1"
resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
dependencies:
ansi-regex "^2.0.0"
strip-ansi@^4.0.0: strip-ansi@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
...@@ -5673,6 +6507,11 @@ sudo-prompt@^9.0.0: ...@@ -5673,6 +6507,11 @@ sudo-prompt@^9.0.0:
resolved "https://registry.npm.taobao.org/sudo-prompt/download/sudo-prompt-9.2.1.tgz?cache=0&sync_timestamp=1588155913484&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsudo-prompt%2Fdownload%2Fsudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" resolved "https://registry.npm.taobao.org/sudo-prompt/download/sudo-prompt-9.2.1.tgz?cache=0&sync_timestamp=1588155913484&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsudo-prompt%2Fdownload%2Fsudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd"
integrity sha1-d++4QwnJykiVJ6TnSfKH5r3VKv0= integrity sha1-d++4QwnJykiVJ6TnSfKH5r3VKv0=
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
supports-color@^5.3.0: supports-color@^5.3.0:
version "5.5.0" version "5.5.0"
resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
...@@ -5699,6 +6538,11 @@ symbol-observable@1.0.1: ...@@ -5699,6 +6538,11 @@ symbol-observable@1.0.1:
resolved "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" resolved "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=
symbol-observable@^1.2.0:
version "1.2.0"
resolved "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
integrity sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ=
symbol-tree@^3.2.2: symbol-tree@^3.2.2:
version "3.2.4" version "3.2.4"
resolved "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" resolved "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
...@@ -5742,6 +6586,11 @@ throat@^4.0.0, throat@^4.1.0: ...@@ -5742,6 +6586,11 @@ throat@^4.0.0, throat@^4.1.0:
resolved "https://registry.npm.taobao.org/throat/download/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" resolved "https://registry.npm.taobao.org/throat/download/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
throttle-debounce@2.2.1:
version "2.2.1"
resolved "https://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-2.2.1.tgz?cache=0&sync_timestamp=1591627175939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrottle-debounce%2Fdownload%2Fthrottle-debounce-2.2.1.tgz#fbd933ae6793448816f7d5b3cae259d464c98137"
integrity sha1-+9kzrmeTRIgW99WzyuJZ1GTJgTc=
through2@^2.0.0, through2@^2.0.1: through2@^2.0.0, through2@^2.0.1:
version "2.0.5" version "2.0.5"
resolved "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" resolved "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
...@@ -5772,6 +6621,16 @@ tmpl@1.0.x: ...@@ -5772,6 +6621,16 @@ tmpl@1.0.x:
resolved "https://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" resolved "https://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
to-array@0.1.4:
version "0.1.4"
resolved "https://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
to-fast-properties@^1.0.3:
version "1.0.3"
resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz?cache=0&sync_timestamp=1580550317222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
to-fast-properties@^2.0.0: to-fast-properties@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1580550317222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1580550317222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
...@@ -5841,6 +6700,11 @@ tunnel-agent@^0.6.0: ...@@ -5841,6 +6700,11 @@ tunnel-agent@^0.6.0:
dependencies: dependencies:
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
tween-functions@^1.0.1:
version "1.2.0"
resolved "https://registry.npm.taobao.org/tween-functions/download/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff"
integrity sha1-GuOlDnxguz3vd06scHrLynO7w/8=
tweetnacl@^0.14.3, tweetnacl@~0.14.0: tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5" version "0.14.5"
resolved "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581364203962&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" resolved "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581364203962&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
...@@ -5853,21 +6717,11 @@ type-check@~0.3.2: ...@@ -5853,21 +6717,11 @@ type-check@~0.3.2:
dependencies: dependencies:
prelude-ls "~1.1.2" prelude-ls "~1.1.2"
type-fest@^0.11.0:
version "0.11.0"
resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz?cache=0&sync_timestamp=1591686750124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
integrity sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E=
type-fest@^0.7.1: type-fest@^0.7.1:
version "0.7.1" version "0.7.1"
resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.7.1.tgz?cache=0&sync_timestamp=1591686750124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.7.1.tgz?cache=0&sync_timestamp=1591686750124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
integrity sha1-jdpl/q8D7Xjwo/lnjxhpFH98XEg= integrity sha1-jdpl/q8D7Xjwo/lnjxhpFH98XEg=
type-fest@^0.8.1:
version "0.8.1"
resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1591686750124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
integrity sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=
typedarray@^0.0.6: typedarray@^0.0.6:
version "0.0.6" version "0.0.6"
resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
...@@ -5891,6 +6745,11 @@ ultron@1.0.x: ...@@ -5891,6 +6745,11 @@ ultron@1.0.x:
resolved "https://registry.npm.taobao.org/ultron/download/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" resolved "https://registry.npm.taobao.org/ultron/download/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=
ultron@~1.1.0:
version "1.1.1"
resolved "https://registry.npm.taobao.org/ultron/download/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
integrity sha1-n+FTahCmZKZSZqHjzPhf02MCvJw=
unicode-canonical-property-names-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4" version "1.0.4"
resolved "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" resolved "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
...@@ -5981,6 +6840,11 @@ util.promisify@^1.0.0: ...@@ -5981,6 +6840,11 @@ util.promisify@^1.0.0:
has-symbols "^1.0.1" has-symbols "^1.0.1"
object.getownpropertydescriptors "^2.1.0" object.getownpropertydescriptors "^2.1.0"
utility-types@^2.1.0:
version "2.1.0"
resolved "https://registry.npm.taobao.org/utility-types/download/utility-types-2.1.0.tgz#0c78fc9f7eb424d14302222b4ddd13fdb17f44ab"
integrity sha1-DHj8n360JNFDAiIrTd0T/bF/RKs=
utils-merge@1.0.1: utils-merge@1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" resolved "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
...@@ -6037,6 +6901,13 @@ walker@^1.0.7, walker@~1.0.5: ...@@ -6037,6 +6901,13 @@ walker@^1.0.7, walker@~1.0.5:
dependencies: dependencies:
makeerror "1.0.x" makeerror "1.0.x"
warning@^3.0.0:
version "3.0.0"
resolved "https://registry.npm.taobao.org/warning/download/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=
dependencies:
loose-envify "^1.0.0"
wcwidth@^1.0.1: wcwidth@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" resolved "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
...@@ -6089,6 +6960,13 @@ which-module@^2.0.0: ...@@ -6089,6 +6960,13 @@ which-module@^2.0.0:
resolved "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" resolved "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
which@1.2.x:
version "1.2.14"
resolved "https://registry.npm.taobao.org/which/download/which-1.2.14.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5"
integrity sha1-mofEN48D6CfOyvGs31bHNsAcFOU=
dependencies:
isexe "^2.0.0"
which@^1.2.9, which@^1.3.0: which@^1.2.9, which@^1.3.0:
version "1.3.1" version "1.3.1"
resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
...@@ -6174,6 +7052,15 @@ ws@^7: ...@@ -6174,6 +7052,15 @@ ws@^7:
resolved "https://registry.npm.taobao.org/ws/download/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" resolved "https://registry.npm.taobao.org/ws/download/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd"
integrity sha1-Sy9/IZs9Nze8Gi+/FF2CW5TTj/0= integrity sha1-Sy9/IZs9Nze8Gi+/FF2CW5TTj/0=
ws@~3.3.1:
version "3.3.3"
resolved "https://registry.npm.taobao.org/ws/download/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
integrity sha1-8c+E/i1ekB686U767OeF8YeiKPI=
dependencies:
async-limiter "~1.0.0"
safe-buffer "~5.1.0"
ultron "~1.1.0"
xcode@^2.0.0: xcode@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npm.taobao.org/xcode/download/xcode-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxcode%2Fdownload%2Fxcode-2.1.0.tgz#bab64a7e954bb50ca8d19da7e09531c65a43ecfe" resolved "https://registry.npm.taobao.org/xcode/download/xcode-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxcode%2Fdownload%2Fxcode-2.1.0.tgz#bab64a7e954bb50ca8d19da7e09531c65a43ecfe"
...@@ -6204,6 +7091,11 @@ xmldom@0.1.x: ...@@ -6204,6 +7091,11 @@ xmldom@0.1.x:
resolved "https://registry.npm.taobao.org/xmldom/download/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" resolved "https://registry.npm.taobao.org/xmldom/download/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff"
integrity sha1-t2yaG9nwqXN+WnLcNyMc84N14v8= integrity sha1-t2yaG9nwqXN+WnLcNyMc84N14v8=
xmlhttprequest-ssl@~1.5.4:
version "1.5.5"
resolved "https://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
xpipe@^1.0.5: xpipe@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.npm.taobao.org/xpipe/download/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" resolved "https://registry.npm.taobao.org/xpipe/download/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf"
...@@ -6248,7 +7140,7 @@ yargs-parser@^18.1.1: ...@@ -6248,7 +7140,7 @@ yargs-parser@^18.1.1:
camelcase "^5.0.0" camelcase "^5.0.0"
decamelize "^1.2.0" decamelize "^1.2.0"
yargs@^13.3.0: yargs@^13.2.2, yargs@^13.2.4, yargs@^13.3.0:
version "13.3.2" version "13.3.2"
resolved "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" resolved "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
integrity sha1-rX/+/sGqWVZayRX4Lcyzipwxot0= integrity sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=
...@@ -6297,3 +7189,8 @@ yargs@^15.1.0: ...@@ -6297,3 +7189,8 @@ yargs@^15.1.0:
which-module "^2.0.0" which-module "^2.0.0"
y18n "^4.0.0" y18n "^4.0.0"
yargs-parser "^18.1.1" yargs-parser "^18.1.1"
yeast@0.1.2:
version "0.1.2"
resolved "https://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment