From 4936c507304944ec9684a4cef795513bf2d0827e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Jans=C3=B8n=20Engvik?= Date: Thu, 2 Nov 2017 09:51:38 +0100 Subject: [PATCH] Adds eslint and fixes some of the issues with --fix option. (#6) * Add eslint and run eslint --fix. * 2.0.2 --- .eslintrc.json | 10 + Example/LazyloadImageExample.js | 98 +-- Example/LazyloadListExample.js | 227 +++--- Example/LazyloadScrollExample.js | 217 +++--- Example/main.js | 299 ++++---- index.js | 10 +- lib/Anim.js | 12 +- lib/LazyloadChild.js | 100 +-- lib/LazyloadImage.js | 56 +- lib/LazyloadListView.js | 32 +- lib/LazyloadManager.js | 142 ++-- lib/LazyloadScrollView.js | 136 ++-- lib/LazyloadView.js | 166 ++-- package.json | 13 +- yarn.lock | 1222 +++++++++++++++++++++++++++++- 15 files changed, 1987 insertions(+), 753 deletions(-) create mode 100644 .eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..34b7afa --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "extends": [ + "@aller/eslint-config-aller" + ], + "rules": { + "react/jsx-filename-extension": 0, + "no-underscore-dangle": 0, + "no-use-before-define": 0 + } +} diff --git a/Example/LazyloadImageExample.js b/Example/LazyloadImageExample.js index 2d7e534..e095134 100644 --- a/Example/LazyloadImageExample.js +++ b/Example/LazyloadImageExample.js @@ -1,66 +1,66 @@ import React, { - Component + Component, } from 'react'; import { - StyleSheet, - Text, - View, - TouchableHighlight + StyleSheet, + Text, + View, + TouchableHighlight, } from 'react-native'; import { - LazyloadScrollView, - LazyloadImage + LazyloadScrollView, + LazyloadImage, } from 'react-native-lazyload'; -let image = require('./image.jpg'); +const image = require('./image.jpg'); class LazyloadImageExample extends Component { - render() { - return ( - - {Array.apply(null, Array(100)).map((file, i) => - - )} - - ); - } + render() { + return ( + + {Array(...Array(100)).map((file, i) => ( + + ))} + + ); + } } const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#F5FCFF' - }, - content: { - paddingTop: 20, - justifyContent: 'center', - alignItems: 'center' - }, - image: { - width: 200, - height: 80, - borderWidth: StyleSheet.hairlineWidth, - borderColor: '#ccc', - marginHorizontal: 5, - marginVertical: 10, - borderRadius: 10, - overflow: 'hidden', - resizeMode: 'cover', - backgroundColor: '#eee' - } + container: { + flex: 1, + backgroundColor: '#F5FCFF', + }, + content: { + paddingTop: 20, + justifyContent: 'center', + alignItems: 'center', + }, + image: { + width: 200, + height: 80, + borderWidth: StyleSheet.hairlineWidth, + borderColor: '#ccc', + marginHorizontal: 5, + marginVertical: 10, + borderRadius: 10, + overflow: 'hidden', + resizeMode: 'cover', + backgroundColor: '#eee', + }, }); export default LazyloadImageExample; diff --git a/Example/LazyloadListExample.js b/Example/LazyloadListExample.js index af6df7b..8b07a74 100644 --- a/Example/LazyloadListExample.js +++ b/Example/LazyloadListExample.js @@ -1,137 +1,138 @@ import React, { - Component + Component, } from 'react'; import { - AppRegistry, - StyleSheet, - Text, - View, - ListView + AppRegistry, + StyleSheet, + Text, + View, + ListView, } from 'react-native'; import { - LazyloadListView, - LazyloadView + LazyloadListView, + LazyloadView, } from 'react-native-lazyload'; import data from './MOCK_DATA.json'; + class LazyloadListExample extends Component { - constructor() { - super(...arguments); - let ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); - this.state = { - dataSource: ds.cloneWithRows(data) - }; - } + constructor() { + super(...arguments); + const ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 }); + this.state = { + dataSource: ds.cloneWithRows(data), + }; + } renderRow = (file) => { - return + - - - {file.id} - - - {file.first_name} {file.last_name} - email: {file.email} - last visit ip: {file.ip_address} - - - {file.gender} - - - ; + + {file.id} + + + {file.first_name} {file.last_name} + email: {file.email} + last visit ip: {file.ip_address} + + + {file.gender} + + + ); }; render() { - return ; + return (); } } const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#F5FCFF' - }, - content: { - paddingTop: 20, - justifyContent: 'center', - alignItems: 'center' - }, - view: { - height: 70, - width: 320, - paddingVertical: 5, - borderBottomWidth: StyleSheet.hairlineWidth, - borderBottomColor: '#666' - }, - file: { - width: 320, - flex: 1, - flexDirection: 'row' - }, - id: { - width: 50, - alignItems: 'center', - justifyContent: 'center' - }, - idText: { - fontSize: 10 - }, - detail: { - justifyContent: 'space-around', - flex: 1 - }, - name: { - textAlign: 'center', - lineHeight: 15, - color: '#666', - marginBottom: 5 - }, - email: { - fontSize: 10, - color: 'blue', - textDecorationColor: 'blue', - textDecorationLine: 'underline', - textDecorationStyle: 'solid' - }, - ip: { - fontSize: 12, - color: 'grey' - }, - gender: { - width: 50, - alignItems: 'center', - justifyContent: 'center' - }, - genderText: { - fontSize: 10 - }, - title: { - color: '#333', - fontSize: 12 - }, - male: { - color: 'skyblue' - }, - female: { - color: 'pink' - } + container: { + flex: 1, + backgroundColor: '#F5FCFF', + }, + content: { + paddingTop: 20, + justifyContent: 'center', + alignItems: 'center', + }, + view: { + height: 70, + width: 320, + paddingVertical: 5, + borderBottomWidth: StyleSheet.hairlineWidth, + borderBottomColor: '#666', + }, + file: { + width: 320, + flex: 1, + flexDirection: 'row', + }, + id: { + width: 50, + alignItems: 'center', + justifyContent: 'center', + }, + idText: { + fontSize: 10, + }, + detail: { + justifyContent: 'space-around', + flex: 1, + }, + name: { + textAlign: 'center', + lineHeight: 15, + color: '#666', + marginBottom: 5, + }, + email: { + fontSize: 10, + color: 'blue', + textDecorationColor: 'blue', + textDecorationLine: 'underline', + textDecorationStyle: 'solid', + }, + ip: { + fontSize: 12, + color: 'grey', + }, + gender: { + width: 50, + alignItems: 'center', + justifyContent: 'center', + }, + genderText: { + fontSize: 10, + }, + title: { + color: '#333', + fontSize: 12, + }, + male: { + color: 'skyblue', + }, + female: { + color: 'pink', + }, }); export default LazyloadListExample; diff --git a/Example/LazyloadScrollExample.js b/Example/LazyloadScrollExample.js index a024f52..d5b6a87 100644 --- a/Example/LazyloadScrollExample.js +++ b/Example/LazyloadScrollExample.js @@ -1,125 +1,126 @@ import React, { - Component + Component, } from 'react'; import { - AppRegistry, - StyleSheet, - Text, - View + AppRegistry, + StyleSheet, + Text, + View, } from 'react-native'; import { - LazyloadScrollView, - LazyloadView + LazyloadScrollView, + LazyloadView, } from 'react-native-lazyload'; import data from './MOCK_DATA.json'; + class LazyloadScrollExample extends Component { - render() { - let start = ~~(Math.random() * 900); - let list = data.splice(start, 100); - return ( - - {list.map((file, i) => - - - {file.id} - - - {file.first_name} {file.last_name} - email: {file.email} - last visit ip: {file.ip_address} - - - {file.gender} - - - )} - - ); - } + render() { + const start = ~~(Math.random() * 900); + const list = data.splice(start, 100); + return ( + + {list.map((file, i) => ( + + + {file.id} + + + {file.first_name} {file.last_name} + email: {file.email} + last visit ip: {file.ip_address} + + + {file.gender} + + + ))} + + ); + } } const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#F5FCFF' - }, - content: { - paddingTop: 20, - justifyContent: 'center', - alignItems: 'center' - }, - view: { - height: 70, - width: 320, - paddingVertical: 5, - borderBottomWidth: StyleSheet.hairlineWidth, - borderBottomColor: '#666' - }, - file: { - width: 320, - flex: 1, - flexDirection: 'row' - }, - id: { - width: 50, - alignItems: 'center', - justifyContent: 'center' - }, - idText: { - fontSize: 10 - }, - detail: { - justifyContent: 'space-around', - flex: 1 - }, - name: { - textAlign: 'center', - lineHeight: 15, - color: '#666', - marginBottom: 5 - }, - email: { - fontSize: 10, - color: 'blue', - textDecorationColor: 'blue', - textDecorationLine: 'underline', - textDecorationStyle: 'solid' - }, - ip: { - fontSize: 12, - color: 'grey' - }, - gender: { - width: 50, - alignItems: 'center', - justifyContent: 'center' - }, - genderText: { - fontSize: 10 - }, - title: { - color: '#333', - fontSize: 12 - }, - male: { - color: 'skyblue' - }, - female: { - color: 'pink' - } + container: { + flex: 1, + backgroundColor: '#F5FCFF', + }, + content: { + paddingTop: 20, + justifyContent: 'center', + alignItems: 'center', + }, + view: { + height: 70, + width: 320, + paddingVertical: 5, + borderBottomWidth: StyleSheet.hairlineWidth, + borderBottomColor: '#666', + }, + file: { + width: 320, + flex: 1, + flexDirection: 'row', + }, + id: { + width: 50, + alignItems: 'center', + justifyContent: 'center', + }, + idText: { + fontSize: 10, + }, + detail: { + justifyContent: 'space-around', + flex: 1, + }, + name: { + textAlign: 'center', + lineHeight: 15, + color: '#666', + marginBottom: 5, + }, + email: { + fontSize: 10, + color: 'blue', + textDecorationColor: 'blue', + textDecorationLine: 'underline', + textDecorationStyle: 'solid', + }, + ip: { + fontSize: 12, + color: 'grey', + }, + gender: { + width: 50, + alignItems: 'center', + justifyContent: 'center', + }, + genderText: { + fontSize: 10, + }, + title: { + color: '#333', + fontSize: 12, + }, + male: { + color: 'skyblue', + }, + female: { + color: 'pink', + }, }); export default LazyloadScrollExample; diff --git a/Example/main.js b/Example/main.js index 92101d7..38a0d03 100644 --- a/Example/main.js +++ b/Example/main.js @@ -1,19 +1,20 @@ import React, { - Component, + Component, } from 'react'; import { - AppRegistry, - StyleSheet, - Text, - View, - TouchableHighlight, - TouchableOpacity, - Animated, - Easing + AppRegistry, + StyleSheet, + Text, + View, + TouchableHighlight, + TouchableOpacity, + Animated, + Easing, } from 'react-native'; import Modal from 'react-native-root-modal'; + const hairline = StyleSheet.hairlineWidth; import LazyloadScrollExample from './LazyloadScrollExample'; @@ -21,162 +22,162 @@ import LazyloadListExample from './LazyloadListExample'; import LazyloadImageExample from './LazyloadImageExample'; class Example extends React.Component { - constructor() { - super(...arguments); - this.state = { - modal: false, - scale: new Animated.Value(0), - content: null - }; - } + constructor() { + super(...arguments); + this.state = { + modal: false, + scale: new Animated.Value(0), + content: null, + }; + } show = (example) => { - if (this.state.modal) { - return; - } + if (this.state.modal) { + return; + } - this.state.scale.setValue(0); - Animated.spring(this.state.scale, { - toValue: 1, - useNativeDriver: true - }).start(); + this.state.scale.setValue(0); + Animated.spring(this.state.scale, { + toValue: 1, + useNativeDriver: true, + }).start(); - this.setState({ - modal: true, - content: example - }); + this.setState({ + modal: true, + content: example, + }); }; hide = () => { - this.state.scale.setValue(1); - Animated.timing(this.state.scale, { - toValue: 0, - easing: Easing.in(Easing.back(2)) - }).start(({finished}) => finished && this.setState({ - modal: false, - content: null - })); + this.state.scale.setValue(1); + Animated.timing(this.state.scale, { + toValue: 0, + easing: Easing.in(Easing.back(2)), + }).start(({ finished }) => finished && this.setState({ + modal: false, + content: null, + })); }; render() { - return - + return ( + SVG library for React Native - - - this.show()} - > - Lazyload ScrollView - - this.show()} - > - Lazyload ListView - - this.show()} - > - Lazyload Image - - - + + this.show()} + > + Lazyload ScrollView + + this.show()} + > + Lazyload ListView + + this.show()} + > + Lazyload Image + + + + + {this.state.content} + + + - - {this.state.content} - - - - X - - - - ; + X + + + + ); } } const styles = StyleSheet.create({ - container: { - flex: 1, - paddingTop: 20, - alignItems: 'center', - overflow: 'hidden' - }, - contentContainer: { - alignSelf: 'stretch', - borderTopWidth: hairline, - borderTopColor: '#ccc', - borderBottomWidth: hairline, - borderBottomColor: '#ccc', - paddingHorizontal: 10 - }, - modal: { - top: 0, - right: 0, - bottom: 0, - left: 0, - backgroundColor: 'rgba(0, 0, 0, 0.2)' - }, - modalContent: { - position: 'absolute', - top: 30, - right: 10, - bottom: 20, - left: 10, - backgroundColor: '#fff' - }, - close: { - position: 'absolute', - right: 20, - top: 40 - }, - closeButton: { - width: 20, - height: 20, - borderRadius: 10, - backgroundColor: 'red', - overflow: 'hidden', - alignItems: 'center', - justifyContent: 'center' - }, - closeText: { - color: '#fff' - }, - welcome: { - fontSize: 20, - textAlign: 'center', - margin: 10 - }, - instructions: { - textAlign: 'center', - color: '#333333', - marginBottom: 5 - }, - button: { - backgroundColor: '#ccc', - borderRadius: 5, - padding: 10, - marginVertical: 10, - alignItems: 'center' - } + container: { + flex: 1, + paddingTop: 20, + alignItems: 'center', + overflow: 'hidden', + }, + contentContainer: { + alignSelf: 'stretch', + borderTopWidth: hairline, + borderTopColor: '#ccc', + borderBottomWidth: hairline, + borderBottomColor: '#ccc', + paddingHorizontal: 10, + }, + modal: { + top: 0, + right: 0, + bottom: 0, + left: 0, + backgroundColor: 'rgba(0, 0, 0, 0.2)', + }, + modalContent: { + position: 'absolute', + top: 30, + right: 10, + bottom: 20, + left: 10, + backgroundColor: '#fff', + }, + close: { + position: 'absolute', + right: 20, + top: 40, + }, + closeButton: { + width: 20, + height: 20, + borderRadius: 10, + backgroundColor: 'red', + overflow: 'hidden', + alignItems: 'center', + justifyContent: 'center', + }, + closeText: { + color: '#fff', + }, + welcome: { + fontSize: 20, + textAlign: 'center', + margin: 10, + }, + instructions: { + textAlign: 'center', + color: '#333333', + marginBottom: 5, + }, + button: { + backgroundColor: '#ccc', + borderRadius: 5, + padding: 10, + marginVertical: 10, + alignItems: 'center', + }, }); AppRegistry.registerComponent('reacNativeLazyload', () => Example); diff --git a/index.js b/index.js index 56fc269..99faccc 100644 --- a/index.js +++ b/index.js @@ -5,9 +5,9 @@ import LazyloadScrollView from './lib/LazyloadScrollView'; import LazyloadManager from './lib/LazyloadManager'; export { - LazyloadImage, - LazyloadView, - LazyloadListView, - LazyloadScrollView, - LazyloadManager + LazyloadImage, + LazyloadView, + LazyloadListView, + LazyloadScrollView, + LazyloadManager, }; diff --git a/lib/Anim.js b/lib/Anim.js index 4dac35f..e73d6a0 100644 --- a/lib/Anim.js +++ b/lib/Anim.js @@ -2,11 +2,11 @@ import PropTypes from 'prop-types'; import ReactNative, { LayoutAnimation } from 'react-native'; export default PropTypes.shape({ - duration: PropTypes.number, - delay: PropTypes.number, - springDamping: PropTypes.number, - initialVelocity: PropTypes.number, - type: PropTypes.oneOf(Object.keys(LayoutAnimation.Types)), - property: PropTypes.oneOf(Object.keys(LayoutAnimation.Properties)) + duration: PropTypes.number, + delay: PropTypes.number, + springDamping: PropTypes.number, + initialVelocity: PropTypes.number, + type: PropTypes.oneOf(Object.keys(LayoutAnimation.Types)), + property: PropTypes.oneOf(Object.keys(LayoutAnimation.Properties)), }); diff --git a/lib/LazyloadChild.js b/lib/LazyloadChild.js index 4a85374..364c9e4 100644 --- a/lib/LazyloadChild.js +++ b/lib/LazyloadChild.js @@ -1,36 +1,36 @@ export default class { - constructor(container, measureLayout, toggle) { - let {offset, recycle, horizontal, contentOffset, dimensions} = container; - this._recycle = recycle; - this._toggle = toggle; - this._horizontal = horizontal; - if (recycle && offset >= recycle) { - console.warn('Recycle distance should be much more than render distance.'); - recycle = offset; - } + constructor(container, measureLayout, toggle) { + let { offset, recycle, horizontal, contentOffset, dimensions } = container; + this._recycle = recycle; + this._toggle = toggle; + this._horizontal = horizontal; + if (recycle && offset >= recycle) { + console.warn('Recycle distance should be much more than render distance.'); + recycle = offset; + } - measureLayout(container.data, (x, y, width, height) => { - let {width: sightWidth, height: sightHeight} = dimensions; - this._sight = horizontal ? { - start: -(sightWidth - x + offset), - end: x + width + offset - } : { - start: -(sightHeight - y + offset), - end: y + height + offset - }; - if (recycle) { - this._bound = horizontal ? { - start: -(recycle + sightWidth - x), - end: x + width + recycle - } : { - start: -(recycle + sightHeight - y), - end: y + height + recycle - }; - } + measureLayout(container.data, (x, y, width, height) => { + const { width: sightWidth, height: sightHeight } = dimensions; + this._sight = horizontal ? { + start: -(sightWidth - x + offset), + end: x + width + offset, + } : { + start: -(sightHeight - y + offset), + end: y + height + offset, + }; + if (recycle) { + this._bound = horizontal ? { + start: -(recycle + sightWidth - x), + end: x + width + recycle, + } : { + start: -(recycle + sightHeight - y), + end: y + height + recycle, + }; + } - this.move(contentOffset.x, contentOffset.y); - }); - } + this.move(contentOffset.x, contentOffset.y); + }); + } _recycled = false; _visible = false; @@ -41,27 +41,27 @@ export default class { _sight = null; move = (x, y) => { - if (!this._sight) { - return; - } - let sight = this._sight; - let bound = this._bound; - let recycle = this._recycle; - let scrolled = this._horizontal ? x : y; + if (!this._sight) { + return; + } + const sight = this._sight; + const bound = this._bound; + const recycle = this._recycle; + const scrolled = this._horizontal ? x : y; - if (this._recycled && scrolled >= bound.start && scrolled <= bound.end) { // Recycled element back into recycle distance - this._recycled = false; - this._visible = true; - this._toggle(true); - } else if (!this._visible && scrolled >= sight.start && scrolled <= sight.end) { // Invisible element scroll into sight - this._visible = true; - this._toggle(true); - } else if (this._visible && recycle && !this._recycled) { - if (scrolled > bound.end || scrolled < bound.start) { - this._recycled = true; - this._visible = false; - this._toggle(false); - } + if (this._recycled && scrolled >= bound.start && scrolled <= bound.end) { // Recycled element back into recycle distance + this._recycled = false; + this._visible = true; + this._toggle(true); + } else if (!this._visible && scrolled >= sight.start && scrolled <= sight.end) { // Invisible element scroll into sight + this._visible = true; + this._toggle(true); + } else if (this._visible && recycle && !this._recycled) { + if (scrolled > bound.end || scrolled < bound.start) { + this._recycled = true; + this._visible = false; + this._toggle(false); } + } }; } diff --git a/lib/LazyloadImage.js b/lib/LazyloadImage.js index 0850432..d0b6feb 100644 --- a/lib/LazyloadImage.js +++ b/lib/LazyloadImage.js @@ -5,41 +5,41 @@ import { Image, Platform } from 'react-native'; import LazyloadView from './LazyloadView'; import Anim from './Anim'; -const emptySource = {uri:'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'}; +const emptySource = { uri: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' }; -class LazyloadImage extends LazyloadView{ +class LazyloadImage extends LazyloadView { static displayName = 'LazyloadImage'; static propTypes = { - host: PropTypes.string, - initialVisibility: PropTypes.bool, - animation: PropTypes.oneOfType([ - PropTypes.shape({ - duration: PropTypes.number, - create: Anim, - update: Anim, - delete: Anim - }), - PropTypes.bool - ]), - ...Image.propTypes + host: PropTypes.string, + initialVisibility: PropTypes.bool, + animation: PropTypes.oneOfType([ + PropTypes.shape({ + duration: PropTypes.number, + create: Anim, + update: Anim, + delete: Anim, + }), + PropTypes.bool, + ]), + ...Image.propTypes, }; render() { - let key = null; - if (this.props.animation) { - key = this.state.visible ? 'visible' : 'invisible'; - } - return this.props.host ? this._root = ele} - {...this.props} - onLayout={this._onLayout} - key={key} - source={this.state.visible ? this.props.source : emptySource} - /> : this._root = ele} - {...this.props} - />; + let key = null; + if (this.props.animation) { + key = this.state.visible ? 'visible' : 'invisible'; + } + return this.props.host ? this._root = ele} + {...this.props} + onLayout={this._onLayout} + key={key} + source={this.state.visible ? this.props.source : emptySource} + /> : this._root = ele} + {...this.props} + />; } } diff --git a/lib/LazyloadListView.js b/lib/LazyloadListView.js index 4ecc52c..7a2443a 100644 --- a/lib/LazyloadListView.js +++ b/lib/LazyloadListView.js @@ -5,42 +5,42 @@ import ScrollableMixin from 'react-native-scrollable-mixin'; import LazyloadScrollView from './LazyloadScrollView'; -class LazyloadListView extends Component{ +class LazyloadListView extends Component { static displayName = 'LazyloadListView'; static propTypes = { - ...ListView.propTypes + ...ListView.propTypes, }; - refresh () { - this._scrollView.refresh(); + refresh() { + this._scrollView.refresh(); } get scrollProperties() { - return this._listView.scrollProperties; - }; + return this._listView.scrollProperties; + } /** * IMPORTANT: You must return the scroll responder of the underlying * scrollable component from getScrollResponder() when using ScrollableMixin. */ getScrollResponder() { - return this._listView.getScrollResponder(); + return this._listView.getScrollResponder(); } setNativeProps(props) { - this._listView.setNativeProps(props); + this._listView.setNativeProps(props); } render() { - return this.props.name ? } - ref={ele => this._listView = ele} - /> : this._listView = ele} - />; + return this.props.name ? } + ref={ele => this._listView = ele} + /> : this._listView = ele} + />; } } diff --git a/lib/LazyloadManager.js b/lib/LazyloadManager.js index 5fe8444..925ab63 100644 --- a/lib/LazyloadManager.js +++ b/lib/LazyloadManager.js @@ -2,94 +2,94 @@ import LazyloadChild from './LazyloadChild'; const containers = {}; -class LazyloadManager{ - static add = ({name, id}, measureLayout, toggle) => { - let container = containers[name]; - if (!container) { - container = containers[name] = { - children: {}, - count: 0, - contentOffset: {x: 0, y: 0}, - uninitiated: [] - } - } +class LazyloadManager { + static add = ({ name, id }, measureLayout, toggle) => { + let container = containers[name]; + if (!container) { + container = containers[name] = { + children: {}, + count: 0, + contentOffset: { x: 0, y: 0 }, + uninitiated: [], + }; + } - if (container.dimensions) { - if (!container.children[id]) { - container.count++; - } - - container.children[id] = new LazyloadChild( - container, - measureLayout, - toggle - ); - } else { - container.uninitiated.unshift(() => { - LazyloadManager.add({name, id}, measureLayout, toggle); - }); + if (container.dimensions) { + if (!container.children[id]) { + container.count++; } + + container.children[id] = new LazyloadChild( + container, + measureLayout, + toggle + ); + } else { + container.uninitiated.unshift(() => { + LazyloadManager.add({ name, id }, measureLayout, toggle); + }); + } }; static remove = (name, id) => { - let container = containers[name]; - if (container && container.children[id]) { - delete container.children[id]; - container.count--; - } + const container = containers[name]; + if (container && container.children[id]) { + delete container.children[id]; + container.count--; + } }; - constructor({name, dimensions, offset = 0, recycle, horizontal, contentOffset = {x: 0, y: 0}}, data) { - this._name = name; - - if (!name || !dimensions) { - - } - - let content = { - offset, - recycle, - horizontal, - contentOffset, - dimensions, - data + constructor({ name, dimensions, offset = 0, recycle, horizontal, contentOffset = { x: 0, y: 0 } }, data) { + this._name = name; + + if (!name || !dimensions) { + + } + + const content = { + offset, + recycle, + horizontal, + contentOffset, + dimensions, + data, + }; + if (!containers[name]) { + containers[name] = { + children: {}, + count: 0, + uninitiated: [], + ...content, }; - if (!containers[name]) { - containers[name] = { - children: {}, - count: 0, - uninitiated: [], - ...content - }; - } else { - Object.assign(containers[name], content); - } - - let uninitiated; - while (uninitiated = containers[name].uninitiated.pop()) { - uninitiated(); - } + } else { + Object.assign(containers[name], content); + } + + let uninitiated; + while (uninitiated = containers[name].uninitiated.pop()) { + uninitiated(); + } } _name = null; - calculate = ({x, y}) => { - let container = containers[this._name]; - - container.contentOffset = {x, y}; - if (container.count) { - let children = container.children; - for (let key in children) { - if (children.hasOwnProperty(key)) { - children[key].move(x, y); - } - } + calculate = ({ x, y }) => { + const container = containers[this._name]; + + container.contentOffset = { x, y }; + if (container.count) { + const children = container.children; + for (const key in children) { + if (children.hasOwnProperty(key)) { + children[key].move(x, y); + } } + } }; destroy = () => { - this._container = containers[this._name] = null; + this._container = containers[this._name] = null; }; } diff --git a/lib/LazyloadScrollView.js b/lib/LazyloadScrollView.js index 3dbabe8..86f2d72 100644 --- a/lib/LazyloadScrollView.js +++ b/lib/LazyloadScrollView.js @@ -5,55 +5,54 @@ import ScrollableMixin from 'react-native-scrollable-mixin'; import LazyloadManager from './LazyloadManager'; -class LazyloadScrollView extends Component{ +class LazyloadScrollView extends Component { static displayName = 'LazyloadScrollView'; static propTypes = { - name: PropTypes.string, - renderDistance: PropTypes.number, - recycle: PropTypes.bool, - recycleDistance : PropTypes.number, - horizontal: PropTypes.bool, - ...ScrollView.propTypes + name: PropTypes.string, + renderDistance: PropTypes.number, + recycle: PropTypes.bool, + recycleDistance: PropTypes.number, + horizontal: PropTypes.bool, + ...ScrollView.propTypes, }; static defaultProps = { - renderDistance: 0, - recycle: true, - recycleDistance: Dimensions.get('window').height * 4, - horizontal: false + renderDistance: 0, + recycle: true, + recycleDistance: Dimensions.get('window').height * 4, + horizontal: false, }; - constructor() { - super(); + super(); - // Used for saving scroll position when refreshing - this.currentPosition = { - x: 0, - y: 0 - }; + // Used for saving scroll position when refreshing + this.currentPosition = { + x: 0, + y: 0, + }; } componentWillUnmount = () => { - if(this._manager){ - this._manager.destroy(); - this._manager = null; - } + if (this._manager) { + this._manager.destroy(); + this._manager = null; + } }; getScrollResponder = () => this._scrollResponder; refresh = () => { - this._onScroll({ - nativeEvent: { - contentOffset: { - y: this.currentPosition.y, - x: this.currentPosition.x - } - } - }); + this._onScroll({ + nativeEvent: { + contentOffset: { + y: this.currentPosition.y, + x: this.currentPosition.x, + }, + }, + }); }; _manager = null; @@ -61,50 +60,49 @@ class LazyloadScrollView extends Component{ _scrollResponder = null; _onLayout = (e, node) => { - this.props.onLayout && this.props.onLayout(e, node); - let {width, height} = e.nativeEvent.layout; - let { - name, - renderDistance, - recycle, - recycleDistance - } = this.props; - - this._manager = new LazyloadManager( - { - name, - dimensions: { - width, - height - }, - offset: renderDistance, - recycle: recycle ? recycleDistance : 0, - horizontal: this.props.horizontal - }, - ReactNative.findNodeHandle(this) - ); - + this.props.onLayout && this.props.onLayout(e, node); + const { width, height } = e.nativeEvent.layout; + const { + name, + renderDistance, + recycle, + recycleDistance, + } = this.props; + + this._manager = new LazyloadManager( + { + name, + dimensions: { + width, + height, + }, + offset: renderDistance, + recycle: recycle ? recycleDistance : 0, + horizontal: this.props.horizontal, + }, + ReactNative.findNodeHandle(this) + ); }; - _onScroll = e => { - this.props.onScroll && this.props.onScroll(e); - let {x, y} = e.nativeEvent.contentOffset; - this.currentPosition = {x, y}; - this._manager && this._manager.calculate({x, y}); + _onScroll = (e) => { + this.props.onScroll && this.props.onScroll(e); + const { x, y } = e.nativeEvent.contentOffset; + this.currentPosition = { x, y }; + this._manager && this._manager.calculate({ x, y }); }; render() { - return this.props.name ? this._scrollResponder = ele} - name={null} - onScroll={this._onScroll} - onLayout={this._onLayout} - scrollEventThrottle={this.props.scrollEventThrottle || 16} - /> : this._scrollResponder = ele} - />; + return this.props.name ? this._scrollResponder = ele} + name={null} + onScroll={this._onScroll} + onLayout={this._onLayout} + scrollEventThrottle={this.props.scrollEventThrottle || 16} + /> : this._scrollResponder = ele} + />; } } diff --git a/lib/LazyloadView.js b/lib/LazyloadView.js index fdb7a80..bcf96ef 100644 --- a/lib/LazyloadView.js +++ b/lib/LazyloadView.js @@ -1,5 +1,5 @@ import PropTypes from 'prop-types'; -import React, { Component} from 'react'; +import React, { Component } from 'react'; import { View, LayoutAnimation } from 'react-native'; import LazyloadManager from './LazyloadManager'; @@ -7,55 +7,55 @@ import Anim from './Anim'; let id = 0; -class LazyloadView extends Component{ +class LazyloadView extends Component { static displayName = 'LazyloadView'; static propTypes = { - host: PropTypes.string, - initialVisibility: PropTypes.bool, - animation: PropTypes.oneOfType([ - PropTypes.shape({ - duration: PropTypes.number, - create: Anim, - update: Anim, - delete: Anim - }), - PropTypes.bool - ]), - ...View.propTypes + host: PropTypes.string, + initialVisibility: PropTypes.bool, + animation: PropTypes.oneOfType([ + PropTypes.shape({ + duration: PropTypes.number, + create: Anim, + update: Anim, + delete: Anim, + }), + PropTypes.bool, + ]), + ...View.propTypes, }; static defaultProps = { - initialVisibility: false, - animation: { - duration: 350, - create: { - property: LayoutAnimation.Properties.opacity, - type: 'easeIn' - } - } + initialVisibility: false, + animation: { + duration: 350, + create: { + property: LayoutAnimation.Properties.opacity, + type: 'easeIn', + }, + }, }; constructor() { - super(...arguments); - if (this.props.host) { - this._id = id++; - this._visible = this.props.initialVisibility; - this.state = { - visible: this._visible - }; - } - }; + super(...arguments); + if (this.props.host) { + this._id = id++; + this._visible = this.props.initialVisibility; + this.state = { + visible: this._visible, + }; + } + } componentWillUnmount = () => { - if (this.props.host) { - LazyloadManager.remove(this.props.host, this._id); - } - this._unmounted = true; + if (this.props.host) { + LazyloadManager.remove(this.props.host, this._id); + } + this._unmounted = true; }; shouldComponentUpdate = (nextProps) => { - return this._visible || !nextProps.host; + return this._visible || !nextProps.host; }; _root = null; @@ -63,75 +63,75 @@ class LazyloadView extends Component{ _timeout = null; _unmounted = false; - _toggle = visible => { - if (this._visible !== visible) { - this._visible = visible; - clearTimeout(this._timeout); - - // If we have a callback, call it with the visibility state change - if (this.props.onVisibilityChange && typeof this.props.onVisibilityChange === 'function') { - this.props.onVisibilityChange(this._visible, this.ref, this.props); - } - - this._timeout = setTimeout(() => { - if (this._unmounted) { - return; - } - - visible && this.props.animation && LayoutAnimation.configureNext(this.props.animation); - this.setState({ - visible - }); - }, 16); + _toggle = (visible) => { + if (this._visible !== visible) { + this._visible = visible; + clearTimeout(this._timeout); + + // If we have a callback, call it with the visibility state change + if (this.props.onVisibilityChange && typeof this.props.onVisibilityChange === 'function') { + this.props.onVisibilityChange(this._visible, this.ref, this.props); } + + this._timeout = setTimeout(() => { + if (this._unmounted) { + return; + } + + visible && this.props.animation && LayoutAnimation.configureNext(this.props.animation); + this.setState({ + visible, + }); + }, 16); + } }; measureInWindow = (...args) => { - this._root.measureInWindow(...args); + this._root.measureInWindow(...args); }; measureLayout = (...args) => { - this._root.measureLayout(...args); + this._root.measureLayout(...args); }; setNativeProps = (...args) => { - this._root.setNativeProps(...args); + this._root.setNativeProps(...args); }; focus = (...args) => { - this._root.focus(...args); + this._root.focus(...args); }; blur = (...args) => { - this._root.blur(...args); + this._root.blur(...args); }; _onLayout = (...args) => { - if (this._unmounted) { - return; - } - this.props.onLayout && this.props.onLayout(...args); - LazyloadManager.add( - { - name: this.props.host, - id: this._id - }, - this.measureLayout, - this._toggle - ); + if (this._unmounted) { + return; + } + this.props.onLayout && this.props.onLayout(...args); + LazyloadManager.add( + { + name: this.props.host, + id: this._id, + }, + this.measureLayout, + this._toggle + ); }; render() { - return this.props.host ? this._root = ele} - onLayout={this._onLayout} - > - {this.state.visible ? this.props.children : null} - : this._root = ele} - {...this.props} - />; + return this.props.host ? this._root = ele} + onLayout={this._onLayout} + > + {this.state.visible ? this.props.children : null} + : this._root = ele} + {...this.props} + />; } } diff --git a/package.json b/package.json index 7a6cac4..3f6b284 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-lazyload-deux", - "version": "2.0.1", + "version": "2.0.2", "description": "Lazyload for React Native", "license": "MIT", "main": "./index.js", @@ -8,10 +8,21 @@ "type": "git", "url": "https://github.com/soldotno/react-native-lazyload-deux" }, + "scripts": { + "test": "eslint . --max-warnings=0" + }, "dependencies": { "prop-types": "15.6.0", "react-native-scrollable-mixin": "1.0.1" }, + "devDependencies": { + "@aller/eslint-config-aller": "0.3.0", + "babel-eslint": "8.0.1", + "eslint": "4.10.0", + "eslint-plugin-import": "2.8.0", + "eslint-plugin-jsx-a11y": "5.0.3", + "eslint-plugin-react": "7.4.0" + }, "keywords": [ "react-component", "react-native", diff --git a/yarn.lock b/yarn.lock index 235a0d0..783a996 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,20 +2,548 @@ # yarn lockfile v1 +"@aller/eslint-config-aller@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@aller/eslint-config-aller/-/eslint-config-aller-0.3.0.tgz#ab1e03d4c053ad54977a019d3701f7178b140c0f" + dependencies: + eslint-config-airbnb "^15.1.0" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" + +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + +ajv@^5.2.0, ajv@^5.2.3: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ansi-escapes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +aria-query@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.5.0.tgz#85e3152cd8cc5bab18dbed61cd9c4fce54fa79c3" + dependencies: + ast-types-flow "0.0.7" + +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" +ast-types-flow@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + +axobject-query@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" + dependencies: + ast-types-flow "0.0.7" + +babel-code-frame@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-7.0.0-beta.0.tgz#418a7b5f3f7dc9a4670e61b1158b4c5661bec98d" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-code-frame@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-eslint@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.1.tgz#5d718be7a328625d006022eb293ed3008cbd6346" + dependencies: + babel-code-frame "7.0.0-beta.0" + babel-traverse "7.0.0-beta.0" + babel-types "7.0.0-beta.0" + babylon "7.0.0-beta.22" + +babel-helper-function-name@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.0.tgz#d1b6779b647e5c5c31ebeb05e13b998e4d352d56" + dependencies: + babel-helper-get-function-arity "7.0.0-beta.0" + babel-template "7.0.0-beta.0" + babel-traverse "7.0.0-beta.0" + babel-types "7.0.0-beta.0" + +babel-helper-get-function-arity@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.0.tgz#9d1ab7213bb5efe1ef1638a8ea1489969b5a8b6e" + dependencies: + babel-types "7.0.0-beta.0" + +babel-messages@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-7.0.0-beta.0.tgz#6df01296e49fc8fbd0637394326a167f36da817b" + +babel-template@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-7.0.0-beta.0.tgz#85083cf9e4395d5e48bf5154d7a8d6991cafecfb" + dependencies: + babel-traverse "7.0.0-beta.0" + babel-types "7.0.0-beta.0" + babylon "7.0.0-beta.22" + lodash "^4.2.0" + +babel-traverse@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-7.0.0-beta.0.tgz#da14be9b762f62a2f060db464eaafdd8cd072a41" + dependencies: + babel-code-frame "7.0.0-beta.0" + babel-helper-function-name "7.0.0-beta.0" + babel-messages "7.0.0-beta.0" + babel-types "7.0.0-beta.0" + babylon "7.0.0-beta.22" + debug "^3.0.1" + globals "^10.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-7.0.0-beta.0.tgz#eb8b6e556470e6dcc4aef982d79ad229469b5169" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + +babylon@7.0.0-beta.22: + version "7.0.0-beta.22" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.22.tgz#74f0ad82ed7c7c3cfeab74cf684f815104161b65" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +builtin-modules@^1.0.0, builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + 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.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +color-convert@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +damerau-levenshtein@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + +debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +emoji-regex@^6.1.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" dependencies: iconv-lite "~0.4.13" +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +eslint-config-airbnb-base@^11.3.0: + version "11.3.2" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz#8703b11abe3c88ac7ec2b745b7fdf52e00ae680a" + dependencies: + eslint-restricted-globals "^0.1.1" + +eslint-config-airbnb@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz#fd432965a906e30139001ba830f58f73aeddae8e" + dependencies: + eslint-config-airbnb-base "^11.3.0" + +eslint-import-resolver-node@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" + dependencies: + debug "^2.6.8" + resolve "^1.2.0" + +eslint-module-utils@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" + dependencies: + debug "^2.6.8" + pkg-dir "^1.0.0" + +eslint-plugin-import@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.6.8" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.1" + eslint-module-utils "^2.1.1" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + read-pkg-up "^2.0.0" + +eslint-plugin-jsx-a11y@5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.0.3.tgz#4a939f76ec125010528823331bf948cc573380b6" + dependencies: + aria-query "^0.5.0" + array-includes "^3.0.3" + ast-types-flow "0.0.7" + axobject-query "^0.1.0" + damerau-levenshtein "^1.0.0" + emoji-regex "^6.1.0" + jsx-ast-utils "^1.4.0" + +eslint-plugin-react@7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a" + dependencies: + doctrine "^2.0.0" + has "^1.0.1" + jsx-ast-utils "^2.0.0" + prop-types "^15.5.10" + +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + +eslint-scope@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint@4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.10.0.tgz#f25d0d7955c81968c2309aa5c9a229e045176bb7" + dependencies: + ajv "^5.2.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.0.1" + doctrine "^2.0.0" + eslint-scope "^3.7.1" + espree "^3.5.1" + esquery "^1.0.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^9.17.0" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "^4.0.1" + text-table "~0.2.0" + +espree@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e" + dependencies: + acorn "^5.1.1" + acorn-jsx "^3.0.0" + +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + dependencies: + estraverse "^4.1.0" + object-assign "^4.0.1" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +external-editor@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.5.tgz#52c249a3981b9ba187c7cacf5beb50bf1d91a6bc" + dependencies: + iconv-lite "^0.4.17" + jschardet "^1.4.2" + tmp "^0.0.33" + +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + fbjs@^0.8.16: version "0.8.16" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" @@ -28,14 +556,229 @@ fbjs@^0.8.16: setimmediate "^1.0.5" ua-parser-js "^0.7.9" -iconv-lite@~0.4.13: +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +flat-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^10.0.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-10.2.0.tgz#69490789091fcaa7f7d512c668c8eb73894a4ef2" + +globals@^9.17.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +ignore@^3.3.3: + version "3.3.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +invariant@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-resolvable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" + dependencies: + tryit "^1.0.1" + is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" @@ -43,16 +786,121 @@ isomorphic-fetch@^2.1.1: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" -js-tokens@^3.0.0: +js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" +js-yaml@^3.9.1: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jschardet@^1.4.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.6.0.tgz#c7d1a71edcff2839db2f9ec30fc5d5ebd3c1a678" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsx-ast-utils@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" + +jsx-ast-utils@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + dependencies: + array-includes "^3.0.3" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.cond@^4.3.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" + +lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + loose-envify@^1.0.0, loose-envify@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: js-tokens "^3.0.0" +lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + +minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -60,17 +908,137 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -object-assign@^4.1.0, object-assign@^4.1.1: +normalize-package-data@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" dependencies: asap "~2.0.3" -prop-types@15.6.0: +prop-types@15.6.0, prop-types@^15.5.10: version "15.6.0" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" dependencies: @@ -78,18 +1046,262 @@ prop-types@15.6.0: loose-envify "^1.3.1" object-assign "^4.1.1" -react-native-scrollable-mixin@^1.0.1: +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +react-native-scrollable-mixin@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/react-native-scrollable-mixin/-/react-native-scrollable-mixin-1.0.1.tgz#34a32167b64248594154fd0d6a8b03f22740548e" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.2.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve@^1.2.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +rimraf@^2.2.8: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + +table@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + +tryit@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + ua-parser-js@^0.7.9: version "0.7.17" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + +which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"