├── .gitignore ├── .npmignore ├── jsconfig.json ├── index.js ├── lib ├── NavBar.ios.js ├── NavBar.android.js ├── NavBarBackButton.android.js ├── NavBarBackButton.ios.js ├── TopNavigatorWrapper.js ├── RouteMapper.js └── NavigatorWrapper.js ├── LICENSE ├── package.json ├── .flowconfig ├── README.md ├── .eslintrc └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | node_modules 3 | index.ios.js 4 | iOS 5 | .vscode/ -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .* 2 | *.log 3 | node_modules 4 | test 5 | docs 6 | index.ios.js 7 | iOS 8 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "allowSyntheticDefaultImports": true 5 | }, 6 | "exclude": [ 7 | "node_modules" 8 | ] 9 | } -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import NavBarBackButton from './lib/NavBarBackButton' 4 | import NavBar from './lib/NavBar' 5 | import NavigatorWrapper from './lib/NavigatorWrapper' 6 | import TopNavigatorWrapper from './lib/TopNavigatorWrapper' 7 | import { 8 | defaultRouteMapper, 9 | leftButtonRouteMapperGenerator, 10 | rightButtonRouteMapperGenerator, 11 | titleRouteMapperGenerator, 12 | CenteredText 13 | } from './lib/RouteMapper' 14 | 15 | export { 16 | NavBarBackButton, 17 | NavBar, 18 | NavigatorWrapper, 19 | TopNavigatorWrapper, 20 | defaultRouteMapper, 21 | leftButtonRouteMapperGenerator, 22 | rightButtonRouteMapperGenerator, 23 | titleRouteMapperGenerator, 24 | CenteredText, 25 | } 26 | -------------------------------------------------------------------------------- /lib/NavBar.ios.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React from 'react' 4 | import { StyleSheet, PixelRatio } from 'react-native' 5 | import CustomComponents from 'react-native-deprecated-custom-components' 6 | 7 | class NavBar extends React.Component { 8 | updateProgress (progress, fromIndex, toIndex) { 9 | this._nav.updateProgress(progress, fromIndex, toIndex); 10 | } 11 | 12 | render () { 13 | return ( 14 | { this._nav = nav }} 20 | /> 21 | ) 22 | } 23 | } 24 | 25 | NavBar.propTypes = { 26 | ...CustomComponents.Navigator.NavigationBar.propTypes, 27 | } 28 | 29 | const styles = StyleSheet.create({ 30 | navBar: { 31 | backgroundColor: 'white', 32 | borderBottomWidth: 1 / PixelRatio.get(), 33 | borderColor: '#8e8e93', 34 | }, 35 | }) 36 | 37 | export default NavBar 38 | -------------------------------------------------------------------------------- /lib/NavBar.android.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React from 'react' 4 | import { StyleSheet } from 'react-native' 5 | import CustomComponents from 'react-native-deprecated-custom-components' 6 | 7 | const stylesAndroid = StyleSheet.create({ 8 | navBar: { 9 | backgroundColor: '#f5f5f5', 10 | flexDirection: 'row', 11 | alignItems: 'center', 12 | justifyContent: 'center', 13 | } 14 | }) 15 | 16 | class NavBar extends React.Component { 17 | updateProgress (progress, fromIndex, toIndex) { 18 | this._nav.updateProgress(progress, fromIndex, toIndex); 19 | } 20 | 21 | render () { 22 | return ( 23 | { this._nav = nav }} 29 | /> 30 | ) 31 | } 32 | } 33 | 34 | NavBar.propTypes = { 35 | ...CustomComponents.Navigator.NavigationBar.propTypes, 36 | } 37 | 38 | export default NavBar 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 APSL 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-native-navigator-wrapper", 3 | "version": "0.3.0", 4 | "description": "A React Native Navigator component wrapper that implements nested navigators for both push and modal transitions.", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/APSL/react-native-navigator-wrapper.git" 12 | }, 13 | "keywords": [ 14 | "ios", 15 | "android", 16 | "react", 17 | "react-native", 18 | "react-component", 19 | "navigator" 20 | ], 21 | "author": "Alvaro Medina Ballester ", 22 | "license": "MIT", 23 | "bugs": { 24 | "url": "https://github.com/APSL/react-native-navigator-wrapper/issues" 25 | }, 26 | "homepage": "https://github.com/APSL/react-native-navigator-wrapper#readme", 27 | "devDependencies": { 28 | "babel-eslint": "^7.2.3", 29 | "eslint": "^3.19.0", 30 | "eslint-plugin-react": "^6.10.3", 31 | "prettier": "^1.3.0" 32 | }, 33 | "dependencies": { 34 | "react-native-deprecated-custom-components": "^0.1.0", 35 | "react-native-vector-icons": "^4.0.1" 36 | } 37 | } -------------------------------------------------------------------------------- /lib/NavBarBackButton.android.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React, { PropTypes } from 'react' 4 | import { TouchableOpacity, Text, StyleSheet } from 'react-native' 5 | import Ionicon from 'react-native-vector-icons/Ionicons' 6 | 7 | class NavBarBackButton extends React.Component { 8 | constructor (props) { 9 | super(props) 10 | this.state = { 11 | tintColor: props.tintColor || 'black' 12 | } 13 | } 14 | 15 | _renderBackTitle () { 16 | if (this.props.showBackTitle) { 17 | return ( 18 | 19 | {this.props.children} 20 | 21 | ) 22 | } 23 | } 24 | 25 | render () { 26 | const touchableProps = { 27 | onPress: this.props.onPress, 28 | onPressIn: this.props.onPressIn, 29 | onPressOut: this.props.onPressOut, 30 | onLongPress: this.props.onLongPress 31 | } 32 | return ( 33 | 36 | 38 | {this._renderBackTitle.bind(this)} 39 | 40 | ) 41 | } 42 | } 43 | 44 | NavBarBackButton.propTypes = { 45 | ...TouchableOpacity.propTypes, 46 | tintColor: PropTypes.string, 47 | children: PropTypes.string.isRequired, 48 | style: Text.propTypes.style, 49 | showBackTitle: PropTypes.bool, 50 | } 51 | 52 | const styles = StyleSheet.create({ 53 | container: { 54 | flexDirection: 'row', 55 | alignItems: 'center', 56 | height: 50, 57 | paddingRight: 15, 58 | }, 59 | icon: { 60 | marginLeft: 10, 61 | }, 62 | navText: { 63 | paddingLeft: 5, 64 | paddingTop: 7, 65 | }, 66 | }) 67 | 68 | export default NavBarBackButton 69 | -------------------------------------------------------------------------------- /lib/NavBarBackButton.ios.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React, { PropTypes } from 'react' 4 | import { TouchableOpacity, Text, StyleSheet } from 'react-native' 5 | import Ionicon from 'react-native-vector-icons/Ionicons' 6 | 7 | class NavBarBackButton extends React.Component { 8 | state: Object; 9 | 10 | constructor (props: Object) { 11 | super(props) 12 | this.state = { 13 | tintColor: props.tintColor || 'black' 14 | } 15 | } 16 | 17 | _renderBackTitle () { 18 | if (this.props.showBackTitle) { 19 | return ( 20 | 21 | {this.props.children} 22 | 23 | ) 24 | } 25 | } 26 | 27 | render () { 28 | const touchableProps = { 29 | onPress: this.props.onPress, 30 | onPressIn: this.props.onPressIn, 31 | onPressOut: this.props.onPressOut, 32 | onLongPress: this.props.onLongPress 33 | } 34 | return ( 35 | 38 | 40 | {this._renderBackTitle()} 41 | 42 | ) 43 | } 44 | } 45 | 46 | NavBarBackButton.propTypes = { 47 | ...TouchableOpacity.propTypes, 48 | tintColor: PropTypes.string, 49 | children: PropTypes.string.isRequired, 50 | style: Text.propTypes.style, 51 | showBackTitle: PropTypes.bool, 52 | } 53 | 54 | const styles = StyleSheet.create({ 55 | container: { 56 | flexDirection: 'row', 57 | paddingTop: 2, 58 | paddingRight: 15, 59 | }, 60 | icon: { 61 | paddingLeft: 8, 62 | paddingTop: 2, 63 | }, 64 | navText: { 65 | paddingLeft: 5, 66 | paddingTop: 7, 67 | }, 68 | }) 69 | 70 | export default NavBarBackButton 71 | -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | 3 | # We fork some components by platform. 4 | .*/*.web.js 5 | .*/*.android.js 6 | 7 | # Some modules have their own node_modules with overlap 8 | .*/node_modules/node-haste/.* 9 | 10 | # Ugh 11 | .*/node_modules/babel.* 12 | .*/node_modules/babylon.* 13 | .*/node_modules/invariant.* 14 | 15 | # Ignore react and fbjs where there are overlaps, but don't ignore 16 | # anything that react-native relies on 17 | .*/node_modules/fbjs/lib/Map.js 18 | .*/node_modules/fbjs/lib/fetch.js 19 | .*/node_modules/fbjs/lib/ExecutionEnvironment.js 20 | .*/node_modules/fbjs/lib/ErrorUtils.js 21 | 22 | # Flow has a built-in definition for the 'react' module which we prefer to use 23 | # over the currently-untyped source 24 | .*/node_modules/react/react.js 25 | .*/node_modules/react/lib/React.js 26 | .*/node_modules/react/lib/ReactDOM.js 27 | 28 | .*/__mocks__/.* 29 | .*/__tests__/.* 30 | 31 | .*/commoner/test/source/widget/share.js 32 | 33 | # Ignore commoner tests 34 | .*/node_modules/commoner/test/.* 35 | 36 | # See https://github.com/facebook/flow/issues/442 37 | .*/react-tools/node_modules/commoner/lib/reader.js 38 | 39 | # Ignore jest 40 | .*/node_modules/jest-cli/.* 41 | 42 | # Ignore Website 43 | .*/website/.* 44 | 45 | # Ignore generators 46 | .*/local-cli/generator.* 47 | 48 | # Ignore BUCK generated folders 49 | .*\.buckd/ 50 | 51 | .*/node_modules/is-my-json-valid/test/.*\.json 52 | .*/node_modules/iconv-lite/encodings/tables/.*\.json 53 | .*/node_modules/y18n/test/.*\.json 54 | .*/node_modules/spdx-license-ids/spdx-license-ids.json 55 | .*/node_modules/spdx-exceptions/index.json 56 | .*/node_modules/resolve/test/subdirs/node_modules/a/b/c/x.json 57 | .*/node_modules/resolve/lib/core.json 58 | .*/node_modules/jsonparse/samplejson/.*\.json 59 | .*/node_modules/json5/test/.*\.json 60 | .*/node_modules/ua-parser-js/test/.*\.json 61 | .*/node_modules/builtin-modules/builtin-modules.json 62 | .*/node_modules/binary-extensions/binary-extensions.json 63 | .*/node_modules/url-regex/tlds.json 64 | .*/node_modules/joi/.*\.json 65 | .*/node_modules/isemail/.*\.json 66 | .*/node_modules/tr46/.*\.json 67 | 68 | 69 | [include] 70 | 71 | [libs] 72 | node_modules/react-native/Libraries/react-native/react-native-interface.js 73 | node_modules/react-native/flow 74 | flow/ 75 | 76 | [options] 77 | module.system=haste 78 | 79 | esproposal.class_static_fields=enable 80 | esproposal.class_instance_fields=enable 81 | 82 | munge_underscores=true 83 | 84 | module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub' 85 | module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\)$' -> 'RelativeImageStub' 86 | 87 | suppress_type=$FlowIssue 88 | suppress_type=$FlowFixMe 89 | suppress_type=$FixMe 90 | 91 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(2[0-3]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) 92 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(2[0-3]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ 93 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy 94 | 95 | [version] 96 | >=0.23.0 97 | -------------------------------------------------------------------------------- /lib/TopNavigatorWrapper.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React, { PropTypes } from 'react' 4 | import { View, Platform } from 'react-native' 5 | import NavigatorWrapper from './NavigatorWrapper' 6 | import { defaultRouteMapper } from './RouteMapper' 7 | import CustomComponents from 'react-native-deprecated-custom-components' 8 | 9 | class TopNavigatorWrapper extends React.Component { 10 | static isAndroid = Platform.OS !== 'ios'; 11 | 12 | _renderScene (route: Object, navigator: Object) { 13 | // Render the inner component or the modal. This is basically a container 14 | // that can handle anything, usually a TabBarIOS with more NavigatorWrappers 15 | // inside. 16 | if (route.id === 'mainComponent') { 17 | // Inject the top navigator into the inner component in order to be able 18 | // to open a modal from anywhere 19 | const children = React.cloneElement(this.props.children, { 20 | topNavigator: navigator 21 | }) 22 | return ( 23 | 24 | {children} 25 | 26 | ) 27 | } 28 | 29 | // Render the modal component. This component serves as a FloatFromBottom 30 | // Navigator. Can have another navigator inside. ``passProps`` is sent into 31 | // the NavigatorWrapper in order to send props to the component pushed. 32 | // 33 | // By generating the routeMapper from a function, we can pass the outer 34 | // modal navigator into the route mapper. 35 | const modalRouteMapper = this.props.modalRouteMapper || defaultRouteMapper 36 | return ( 37 | 47 | ) 48 | } 49 | 50 | render () { 51 | const modalAnimation = (TopNavigatorWrapper.isAndroid) ? CustomComponents.Navigator.SceneConfigs.FloatFromBottomAndroid : CustomComponents.Navigator.SceneConfigs.FloatFromBottom 52 | return ( 53 | (this._renderScene(route, navigator))} 56 | initialRoute={{id: 'mainComponent'}} 57 | configureScene={(route, routeStack) => modalAnimation} 58 | style={this.props.modalStyle} 59 | /> 60 | ) 61 | } 62 | } 63 | 64 | TopNavigatorWrapper.propTypes = { 65 | /** 66 | * Optional style for the default modal navigation bar. 67 | */ 68 | modalNavBarStyle: View.propTypes.style, 69 | 70 | /** 71 | * Route mapper for the modal component 72 | */ 73 | modalRouteMapper: PropTypes.func, 74 | 75 | /** 76 | * The style of the inner container 77 | */ 78 | containerStyle: View.propTypes.style, 79 | 80 | /** 81 | * The style of the modal transition 82 | */ 83 | modalStyle: View.propTypes.style, 84 | 85 | /** 86 | * Hides the modal navigation bar 87 | */ 88 | hideNavBar: PropTypes.bool, 89 | } 90 | 91 | export default TopNavigatorWrapper 92 | -------------------------------------------------------------------------------- /lib/RouteMapper.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React from 'react' 4 | import { View, Text, StyleSheet, Platform } from 'react-native' 5 | import NavBarBackButton from './NavBarBackButton' 6 | 7 | export function leftButtonRouteMapperGenerator (BackComponent, styles, tintColor, topNavigator) { 8 | return { 9 | LeftButton: (route, navigator, index, navState) => { 10 | if (route.leftElement) { 11 | const leftElement = React.cloneElement(route.leftElement, { 12 | navigator: navigator, 13 | topNavigator: topNavigator, 14 | }) 15 | return ( 16 | 17 | {leftElement} 18 | 19 | ) 20 | } else if (index > 0) { 21 | const previousRoute = navState.routeStack[index - 1] 22 | return ( 23 | 24 | navigator.pop()} 26 | style={[{flex: 1}, styles]} 27 | tintColor={tintColor} 28 | showBackTitle={true}> 29 | {previousRoute.title} 30 | 31 | 32 | ) 33 | } 34 | return null 35 | } 36 | } 37 | } 38 | 39 | export function rightButtonRouteMapperGenerator (RightComponent, topNavigator) { 40 | return { 41 | RightButton: (route, navigator, index, navState) => { 42 | if (route.rightElement) { 43 | const rightElement = React.cloneElement(route.rightElement, { 44 | navigator: navigator, 45 | topNavigator: topNavigator, 46 | }) 47 | return ( 48 | 49 | {rightElement} 50 | 51 | ) 52 | } else if (RightComponent) { 53 | return 54 | } 55 | return null 56 | } 57 | } 58 | } 59 | 60 | export function titleRouteMapperGenerator (TitleComponent, styles, topNavigator) { 61 | return { 62 | Title: (route, navigator, index, navState) => { 63 | const Component = TitleComponent || Text 64 | return ( 65 | 66 | {route.title} 67 | 68 | ) 69 | } 70 | } 71 | } 72 | 73 | export class CenteredText extends React.Component { 74 | render () { 75 | return ( 76 | 77 | 78 | {this.props.children} 79 | 80 | 81 | ) 82 | } 83 | } 84 | 85 | const titleStyles = StyleSheet.create({ 86 | container: { 87 | flex: 1, 88 | flexDirection: 'row', 89 | alignItems: 'center', 90 | }, 91 | title: { 92 | textAlign: (Platform.OS === 'ios') ? 'center' : 'left', 93 | } 94 | }) 95 | 96 | const defaultStyles = StyleSheet.create({ 97 | back: { 98 | flex: 1, 99 | color: (Platform.OS === 'ios') ? '#0076ff' : '#607D8B', 100 | }, 101 | navFont: { 102 | fontSize: 17, 103 | }, 104 | navText: { 105 | flex: 1, 106 | }, 107 | elementContainer: { 108 | flex: 1, 109 | flexDirection: 'row', 110 | alignItems: 'center', 111 | }, 112 | }) 113 | 114 | export function defaultRouteMapper () { 115 | return { 116 | ...leftButtonRouteMapperGenerator(NavBarBackButton, [defaultStyles.navFont, defaultStyles.back], (Platform.OS === 'ios') ? '#0076ff' : '#607D8B'), 117 | ...rightButtonRouteMapperGenerator(), 118 | ...titleRouteMapperGenerator(CenteredText, [defaultStyles.navFont, defaultStyles.navText]) 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-native-navigator-wrapper 2 | 3 | A React Native Navigator component wrapper that implements nested navigators for 4 | both push and modal transitions. 5 | 6 | ## ⚠️ DEPRECATED ⚠️ 7 | This component has been deprecated. Use it at your own risk. 8 | 9 |

10 | Wrapper example 11 |

12 | 13 | ## Installation 14 | You can install this component through ``npm``: 15 | 16 | ```shell 17 | npm i react-native-navigator-wrapper --save 18 | ``` 19 | 20 | Configure the awesome 21 | [``react-native-vector-icons``](https://github.com/oblador/react-native-vector-icons#installation) 22 | from Joel Oblador to display the back button icons. Remember to include the 23 | ``Ionicons.ttf`` font in your project. All the components of the library are 24 | written in ES6/ES7 style. 25 | 26 | ## Motivation 27 | This library implements the nested ``Navigator`` strategy to let the developer 28 | to use both push-like transitions and modal transitions that can also handle 29 | push navigation inside them. Think about a login/signup process. You can let the 30 | user to browse your app and then present a modal when they want to register. 31 | Once the modal is open, you can provide push navigation between signup or register 32 | screens. This is what tries to solve this component. 33 | 34 | Take this pseudo-jsx code as an example: 35 | 36 | ```js 37 | { 39 | if (route.id === 'innerNavigator') { 40 | // This navigator uses push-like transitions 41 | return 42 | } 43 | // This navigator also uses push-like transitions, but it is opened using 44 | // FloatFromBottom scene config 45 | return 46 | }} 47 | /> 48 | ``` 49 | 50 | The parent navigator will push new components using ``FloatFromBottom``. Both 51 | inner navigators will use ``FloatFromRight``, but the inner navigator will keep 52 | the default navigation history and the other navigator is going to be used when 53 | presenting a modal component. With this you can have push navigation inside a 54 | modal component. 55 | 56 | ## Usage 57 | This library can be used in several ways. It's composed from a couple of different 58 | components that interact with each other. In short, it has a navigation bar that 59 | mimics the iOS and Android navigation bar and two navigation wrappers. 60 | 61 | ### Nested navigation with ``TopNavigatorWrapper`` 62 | You can use ``TopNavigatorWrapper`` component to bring the nested navigator 63 | strategy just importing the component and wrapping whatever you want to render 64 | inside it: 65 | 66 | ```js 67 | import React from 'react' 68 | import { TopNavigatorWrapper } from 'react-native-navigator-wrapper' 69 | import MyComponent from './MyComponent' 70 | 71 | class MyApp extends React.Component { 72 | render () { 73 | return ( 74 | 75 | 76 | 77 | ) 78 | } 79 | } 80 | ``` 81 | 82 | You component ``MyComponent`` will have a **topNavigator** prop. It will let you to push new components in a modal-style, opening from bottom to top. 83 | 84 | ### Navigation with ``NavigatorWrapper`` 85 | If you just want to use the navigation bar inside a navigator, use the 86 | ``NavigatorWrapper`` component: 87 | 88 | ```js 89 | import React from 'react' 90 | import { NavigatorWrapper } from 'react-native-navigator-wrapper' 91 | 92 | class MyComponent extends React.Component { 93 | render () { 94 | return ( 95 | 101 | ) 102 | } 103 | } 104 | ``` 105 | 106 | Every time you push a component that's inside the ``NavigatorWrapper`` component 107 | you will have a **navigator** prop, just like the top navigation option before, 108 | that will let you to keep pushing components in the stack. 109 | 110 | ### Custom ``routeMapper`` 111 | The React Native ``Navigator.NavigatorBar`` component has an object called 112 | ``routeMapper`` that configures the three components that can be displayed 113 | inside the navigation bar: ``LeftButton``, ``RightButton`` and ``Title``. 114 | This library auto-generates a default route mapper object that displays an iOS & Android style back button, a title and accepts a right element to render. 115 | 116 | It also provides functions to generate each of the route mapper components so 117 | you can build a completely custom navigation bar for each ``NavigatorWrapper``. 118 | See the source code for more information. 119 | 120 | ## 🚧 Roadmap 121 | 122 | - [ ] Handle several hardware back button actions with multiple navigators (Android). 123 | 124 | ## License 125 | MIT. 126 | -------------------------------------------------------------------------------- /lib/NavigatorWrapper.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React, { PropTypes } from 'react' 4 | import { 5 | View, 6 | BackAndroid, 7 | Platform, 8 | } from 'react-native' 9 | import { defaultRouteMapper } from './RouteMapper' 10 | import NavBar from './NavBar' 11 | import CustomComponents from 'react-native-deprecated-custom-components' 12 | 13 | class NavigatorWrapper extends React.Component { 14 | static isAndroid = Platform.OS !== 'ios'; 15 | static androidToolbarHeight = 56; 16 | static iosStatusAndNavbarHeight = 64; 17 | 18 | navigator: Object; 19 | firstComponentInStack: boolean; 20 | bindedBackFunction: Function; 21 | 22 | _handleAndroidBackButton () { 23 | if (this.navigator && !this.firstComponentInStack) { 24 | this.navigator.pop() 25 | return true 26 | } 27 | return false 28 | } 29 | 30 | constructor (props: Object) { 31 | super(props) 32 | this.firstComponentInStack = true 33 | } 34 | 35 | componentDidMount () { 36 | // Automatically handle back button under Android platform 37 | if (NavigatorWrapper.isAndroid && this.props.initialRoute.handleBackAndroid !== false) { 38 | this.bindedBackFunction = this._handleAndroidBackButton.bind(this) 39 | BackAndroid.addEventListener('hardwareBackPress', this.bindedBackFunction) 40 | } 41 | } 42 | 43 | componentWillUnmount () { 44 | if (NavigatorWrapper.isAndroid) { 45 | BackAndroid.removeEventListener( 46 | 'hardwareBackPress', 47 | this.bindedBackFunction 48 | ) 49 | } 50 | } 51 | 52 | renderScene (route: Object, navigator: Object) { 53 | let marginTop = NavigatorWrapper.iosStatusAndNavbarHeight 54 | this.firstComponentInStack = (navigator.state.routeStack.length === 1) 55 | if (NavigatorWrapper.isAndroid) { 56 | // Save navigator to handle back button under Android 57 | if (!this.navigator) { 58 | this.navigator = navigator 59 | } 60 | // Configure right navbar height 61 | marginTop = NavigatorWrapper.androidToolbarHeight 62 | } 63 | const RenderComponent = route.component 64 | return ( 65 | 66 | 73 | 74 | ) 75 | } 76 | 77 | render () { 78 | const navAnimation = (NavigatorWrapper.isAndroid) ? CustomComponents.Navigator.SceneConfigs.FadeAndroid : CustomComponents.Navigator.SceneConfigs.PushFromRight 79 | const routeMapper = this.props.routeMapper || defaultRouteMapper() 80 | const NavigationBar = (this.props.hideNavBar) ? null : 81 | return ( 82 | this.props.navigationBarAnimation || navAnimation} 84 | initialRoute={this.props.initialRoute} 85 | initialRouteStack={this.props.initialRouteStack} 86 | navigationBar={NavigationBar} 87 | renderScene={this.renderScene.bind(this)} 88 | /> 89 | ) 90 | } 91 | } 92 | 93 | NavigatorWrapper.propTypes = { 94 | /** 95 | * Provide the initial route or the initial route stack. 96 | * 97 | * ``leftElement``, ``textElement`` and ``rightElement``` are optional 98 | * elements to overwrite route mapper defaults. 99 | */ 100 | initialRoute: PropTypes.shape({ 101 | component: PropTypes.func.isRequired, 102 | title: PropTypes.string.isRequired, 103 | passProps: PropTypes.object, 104 | leftElement: PropTypes.node, 105 | textElement: PropTypes.node, 106 | rightElement: PropTypes.node, 107 | // Set to false to disable the back button under Android 108 | handleBackAndroid: PropTypes.bool, 109 | }), 110 | initialRouteStack: PropTypes.arrayOf(PropTypes.object), 111 | 112 | /** 113 | * Optional ``topNavigator`` object to use as a parent navigator for modal 114 | * transitions. 115 | */ 116 | topNavigator: PropTypes.object, 117 | 118 | /** 119 | * Optional style for the default navigation bar. 120 | */ 121 | navBarStyle: View.propTypes.style, 122 | 123 | /** 124 | * Defines the navigator style. Useful for changing the background color 125 | * while transitioning 126 | */ 127 | style: View.propTypes.style, 128 | 129 | /** 130 | * A ``routeMapper`` object to customize Left, Title and Right components for 131 | * the ``NavigationBar``. 132 | */ 133 | routeMapper: PropTypes.object, 134 | 135 | /** 136 | * Optional prop to hide the navigation bar 137 | */ 138 | hideNavBar: PropTypes.bool, 139 | 140 | /** 141 | * Optional navigation scene config animation 142 | */ 143 | navigationBarAnimation: PropTypes.object, 144 | } 145 | 146 | export default NavigatorWrapper 147 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "babel-eslint", 3 | "ecmaFeatures": { 4 | "jsx": true 5 | }, 6 | "env": { 7 | "es6": true, 8 | "jasmine": true, 9 | "node": true, 10 | }, 11 | "plugins": [ 12 | "react" 13 | ], 14 | "globals": { 15 | "__DEV__": true, 16 | "__dirname": false, 17 | "__fbBatchedBridgeConfig": false, 18 | "cancelAnimationFrame": false, 19 | "clearImmediate": true, 20 | "clearInterval": false, 21 | "clearTimeout": false, 22 | "console": false, 23 | "document": false, 24 | "escape": false, 25 | "exports": false, 26 | "fetch": false, 27 | "global": false, 28 | "jest": false, 29 | "Map": true, 30 | "module": false, 31 | "navigator": false, 32 | "process": false, 33 | "Promise": true, 34 | "requestAnimationFrame": true, 35 | "require": false, 36 | "Set": true, 37 | "setImmediate": true, 38 | "setInterval": false, 39 | "setTimeout": false, 40 | "window": false, 41 | "XMLHttpRequest": false, 42 | "pit": false, 43 | "FormData": true, 44 | }, 45 | "rules": { 46 | "comma-dangle": 0, 47 | "no-cond-assign": 1, 48 | "no-console": 0, 49 | "no-constant-condition": 0, 50 | "no-control-regex": 1, 51 | "no-debugger": 1, 52 | "no-dupe-keys": 1, 53 | "no-empty": 0, 54 | "no-empty-character-class": 1, 55 | "no-ex-assign": 1, 56 | "no-extra-boolean-cast": 1, 57 | "no-extra-parens": 0, 58 | "no-extra-semi": 1, 59 | "no-func-assign": 1, 60 | "no-inner-declarations": 0, 61 | "no-invalid-regexp": 1, 62 | "no-negated-in-lhs": 1, 63 | "no-obj-calls": 1, 64 | "no-regex-spaces": 1, 65 | "no-reserved-keys": 0, 66 | "no-sparse-arrays": 1, 67 | "no-unreachable": 1, 68 | "use-isnan": 1, 69 | "valid-jsdoc": 0, 70 | "valid-typeof": 1, 71 | "block-scoped-var": 0, 72 | "complexity": 0, 73 | "consistent-return": 0, 74 | "curly": 1, 75 | "default-case": 0, 76 | "dot-notation": 1, 77 | "eqeqeq": 1, 78 | "guard-for-in": 0, 79 | "no-alert": 1, 80 | "no-caller": 1, 81 | "no-div-regex": 1, 82 | "no-else-return": 0, 83 | "no-empty-label": 1, 84 | "no-eq-null": 0, 85 | "no-eval": 1, 86 | "no-extend-native": 1, 87 | "no-extra-bind": 1, 88 | "no-fallthrough": 1, 89 | "no-floating-decimal": 1, 90 | "no-implied-eval": 1, 91 | "no-labels": 1, 92 | "no-iterator": 1, 93 | "no-lone-blocks": 1, 94 | "no-loop-func": 0, 95 | "no-multi-str": 0, 96 | "no-native-reassign": 0, 97 | "no-new": 1, 98 | "no-new-func": 1, 99 | "no-new-wrappers": 1, 100 | "no-octal": 1, 101 | "no-octal-escape": 1, 102 | "no-proto": 1, 103 | "no-redeclare": 0, 104 | "no-return-assign": 1, 105 | "no-script-url": 1, 106 | "no-self-compare": 1, 107 | "no-sequences": 1, 108 | "no-unused-expressions": 0, 109 | "no-void": 1, 110 | "no-warning-comments": 0, 111 | "no-with": 1, 112 | "radix": 1, 113 | "vars-on-top": 0, 114 | "wrap-iife": 0, 115 | "yoda": 1, 116 | "strict": 0, 117 | "no-catch-shadow": 1, 118 | "no-delete-var": 1, 119 | "no-label-var": 1, 120 | "no-shadow": 1, 121 | "no-shadow-restricted-names": 1, 122 | "no-undef": 2, 123 | "no-undefined": 0, 124 | "no-undef-init": 1, 125 | "no-unused-vars": [ 126 | 1, 127 | { 128 | "vars": "all", 129 | "args": "none" 130 | } 131 | ], 132 | "no-use-before-define": 0, 133 | "handle-callback-err": 1, 134 | "no-mixed-requires": 1, 135 | "no-new-require": 1, 136 | "no-path-concat": 1, 137 | "no-process-exit": 0, 138 | "no-restricted-modules": 1, 139 | "no-sync": 0, 140 | "key-spacing": 0, 141 | "comma-spacing": 0, 142 | "no-multi-spaces": 0, 143 | "brace-style": 0, 144 | "camelcase": 0, 145 | "consistent-this": [ 146 | 1, 147 | "self" 148 | ], 149 | "eol-last": 1, 150 | "func-names": 0, 151 | "func-style": 0, 152 | "new-cap": 0, 153 | "new-parens": 1, 154 | "no-nested-ternary": 0, 155 | "no-array-constructor": 1, 156 | "no-lonely-if": 0, 157 | "no-new-object": 1, 158 | "no-spaced-func": 1, 159 | "semi-spacing": 1, 160 | "no-ternary": 0, 161 | "no-trailing-spaces": 1, 162 | "no-underscore-dangle": 0, 163 | "no-mixed-spaces-and-tabs": 1, 164 | "quotes": [ 165 | 1, 166 | "single", 167 | "avoid-escape" 168 | ], 169 | "quote-props": 0, 170 | "semi": 0, 171 | "sort-vars": 0, 172 | "space-after-keywords": 1, 173 | "space-in-brackets": 0, 174 | "space-in-parens": 0, 175 | "space-infix-ops": 1, 176 | "space-return-throw-case": 1, 177 | "space-unary-ops": [ 178 | 1, 179 | { 180 | "words": true, 181 | "nonwords": false 182 | } 183 | ], 184 | "max-nested-callbacks": 0, 185 | "one-var": 0, 186 | "wrap-regex": 0, 187 | "max-depth": 0, 188 | "max-len": 0, 189 | "max-params": 0, 190 | "max-statements": 0, 191 | "no-bitwise": 1, 192 | "no-plusplus": 0, 193 | "react/display-name": 0, 194 | "react/jsx-boolean-value": 0, 195 | "react/jsx-quotes": [ 196 | 1, 197 | "single", 198 | "avoid-escape" 199 | ], 200 | "react/jsx-no-undef": 1, 201 | "react/jsx-sort-props": 0, 202 | "react/jsx-uses-react": 0, 203 | "react/jsx-uses-vars": 1, 204 | "react/no-did-mount-set-state": [ 205 | 1, 206 | "allow-in-func" 207 | ], 208 | "react/no-did-update-set-state": [ 209 | 1, 210 | "allow-in-func" 211 | ], 212 | "react/no-multi-comp": 0, 213 | "react/no-unknown-property": 0, 214 | "react/prop-types": 0, 215 | "react/react-in-jsx-scope": 0, 216 | "react/self-closing-comp": 1, 217 | "react/wrap-multilines": 0 218 | } 219 | } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | acorn-jsx@^3.0.0: 6 | version "3.0.1" 7 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" 8 | dependencies: 9 | acorn "^3.0.4" 10 | 11 | acorn@^3.0.4: 12 | version "3.3.0" 13 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 14 | 15 | acorn@^5.0.1: 16 | version "5.0.3" 17 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" 18 | 19 | ajv-keywords@^1.0.0: 20 | version "1.5.1" 21 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" 22 | 23 | ajv@^4.7.0: 24 | version "4.11.8" 25 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" 26 | dependencies: 27 | co "^4.6.0" 28 | json-stable-stringify "^1.0.1" 29 | 30 | ansi-escapes@^1.1.0: 31 | version "1.4.0" 32 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 33 | 34 | ansi-regex@^2.0.0: 35 | version "2.1.1" 36 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 37 | 38 | ansi-styles@^2.2.1: 39 | version "2.2.1" 40 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 41 | 42 | ansi-styles@^3.0.0: 43 | version "3.0.0" 44 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" 45 | dependencies: 46 | color-convert "^1.0.0" 47 | 48 | argparse@^1.0.7: 49 | version "1.0.9" 50 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 51 | dependencies: 52 | sprintf-js "~1.0.2" 53 | 54 | array-union@^1.0.1: 55 | version "1.0.2" 56 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 57 | dependencies: 58 | array-uniq "^1.0.1" 59 | 60 | array-uniq@^1.0.1: 61 | version "1.0.3" 62 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 63 | 64 | array.prototype.find@^2.0.1: 65 | version "2.0.4" 66 | resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90" 67 | dependencies: 68 | define-properties "^1.1.2" 69 | es-abstract "^1.7.0" 70 | 71 | arrify@^1.0.0: 72 | version "1.0.1" 73 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 74 | 75 | asap@~2.0.3: 76 | version "2.0.5" 77 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" 78 | 79 | ast-types@0.9.8: 80 | version "0.9.8" 81 | resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.8.tgz#6cb6a40beba31f49f20928e28439fc14a3dab078" 82 | 83 | babel-code-frame@6.22.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: 84 | version "6.22.0" 85 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" 86 | dependencies: 87 | chalk "^1.1.0" 88 | esutils "^2.0.2" 89 | js-tokens "^3.0.0" 90 | 91 | babel-eslint@^7.2.3: 92 | version "7.2.3" 93 | resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" 94 | dependencies: 95 | babel-code-frame "^6.22.0" 96 | babel-traverse "^6.23.1" 97 | babel-types "^6.23.0" 98 | babylon "^6.17.0" 99 | 100 | babel-messages@^6.23.0: 101 | version "6.23.0" 102 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 103 | dependencies: 104 | babel-runtime "^6.22.0" 105 | 106 | babel-runtime@^6.22.0: 107 | version "6.23.0" 108 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" 109 | dependencies: 110 | core-js "^2.4.0" 111 | regenerator-runtime "^0.10.0" 112 | 113 | babel-traverse@^6.23.1: 114 | version "6.24.1" 115 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" 116 | dependencies: 117 | babel-code-frame "^6.22.0" 118 | babel-messages "^6.23.0" 119 | babel-runtime "^6.22.0" 120 | babel-types "^6.24.1" 121 | babylon "^6.15.0" 122 | debug "^2.2.0" 123 | globals "^9.0.0" 124 | invariant "^2.2.0" 125 | lodash "^4.2.0" 126 | 127 | babel-types@^6.23.0, babel-types@^6.24.1: 128 | version "6.24.1" 129 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" 130 | dependencies: 131 | babel-runtime "^6.22.0" 132 | esutils "^2.0.2" 133 | lodash "^4.2.0" 134 | to-fast-properties "^1.0.1" 135 | 136 | babylon@7.0.0-beta.8: 137 | version "7.0.0-beta.8" 138 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.8.tgz#2bdc5ae366041442c27e068cce6f0d7c06ea9949" 139 | 140 | babylon@^6.15.0, babylon@^6.17.0: 141 | version "6.17.0" 142 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932" 143 | 144 | balanced-match@^0.4.1: 145 | version "0.4.2" 146 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 147 | 148 | brace-expansion@^1.0.0: 149 | version "1.1.7" 150 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" 151 | dependencies: 152 | balanced-match "^0.4.1" 153 | concat-map "0.0.1" 154 | 155 | buffer-shims@~1.0.0: 156 | version "1.0.0" 157 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 158 | 159 | builtin-modules@^1.0.0: 160 | version "1.1.1" 161 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 162 | 163 | caller-path@^0.1.0: 164 | version "0.1.0" 165 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 166 | dependencies: 167 | callsites "^0.2.0" 168 | 169 | callsites@^0.2.0: 170 | version "0.2.0" 171 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" 172 | 173 | camelcase@^3.0.0: 174 | version "3.0.0" 175 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" 176 | 177 | chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: 178 | version "1.1.3" 179 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 180 | dependencies: 181 | ansi-styles "^2.2.1" 182 | escape-string-regexp "^1.0.2" 183 | has-ansi "^2.0.0" 184 | strip-ansi "^3.0.0" 185 | supports-color "^2.0.0" 186 | 187 | circular-json@^0.3.1: 188 | version "0.3.1" 189 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" 190 | 191 | cli-cursor@^1.0.1: 192 | version "1.0.2" 193 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" 194 | dependencies: 195 | restore-cursor "^1.0.1" 196 | 197 | cli-width@^2.0.0: 198 | version "2.1.0" 199 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" 200 | 201 | cliui@^3.2.0: 202 | version "3.2.0" 203 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 204 | dependencies: 205 | string-width "^1.0.1" 206 | strip-ansi "^3.0.1" 207 | wrap-ansi "^2.0.0" 208 | 209 | co@^4.6.0: 210 | version "4.6.0" 211 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 212 | 213 | code-point-at@^1.0.0: 214 | version "1.1.0" 215 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 216 | 217 | color-convert@^1.0.0: 218 | version "1.9.0" 219 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" 220 | dependencies: 221 | color-name "^1.1.1" 222 | 223 | color-name@^1.1.1: 224 | version "1.1.2" 225 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" 226 | 227 | concat-map@0.0.1: 228 | version "0.0.1" 229 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 230 | 231 | concat-stream@^1.5.2: 232 | version "1.6.0" 233 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" 234 | dependencies: 235 | inherits "^2.0.3" 236 | readable-stream "^2.2.2" 237 | typedarray "^0.0.6" 238 | 239 | core-js@^1.0.0: 240 | version "1.2.7" 241 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" 242 | 243 | core-js@^2.4.0: 244 | version "2.4.1" 245 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 246 | 247 | core-util-is@~1.0.0: 248 | version "1.0.2" 249 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 250 | 251 | d@1: 252 | version "1.0.0" 253 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" 254 | dependencies: 255 | es5-ext "^0.10.9" 256 | 257 | debug@^2.1.1, debug@^2.2.0: 258 | version "2.6.6" 259 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" 260 | dependencies: 261 | ms "0.7.3" 262 | 263 | decamelize@^1.1.1: 264 | version "1.2.0" 265 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 266 | 267 | deep-is@~0.1.3: 268 | version "0.1.3" 269 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 270 | 271 | define-properties@^1.1.2: 272 | version "1.1.2" 273 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 274 | dependencies: 275 | foreach "^2.0.5" 276 | object-keys "^1.0.8" 277 | 278 | del@^2.0.2: 279 | version "2.2.2" 280 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 281 | dependencies: 282 | globby "^5.0.0" 283 | is-path-cwd "^1.0.0" 284 | is-path-in-cwd "^1.0.0" 285 | object-assign "^4.0.1" 286 | pify "^2.0.0" 287 | pinkie-promise "^2.0.0" 288 | rimraf "^2.2.8" 289 | 290 | doctrine@^1.2.2: 291 | version "1.5.0" 292 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" 293 | dependencies: 294 | esutils "^2.0.2" 295 | isarray "^1.0.0" 296 | 297 | doctrine@^2.0.0: 298 | version "2.0.0" 299 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" 300 | dependencies: 301 | esutils "^2.0.2" 302 | isarray "^1.0.0" 303 | 304 | encoding@^0.1.11: 305 | version "0.1.12" 306 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 307 | dependencies: 308 | iconv-lite "~0.4.13" 309 | 310 | error-ex@^1.2.0: 311 | version "1.3.1" 312 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 313 | dependencies: 314 | is-arrayish "^0.2.1" 315 | 316 | es-abstract@^1.7.0: 317 | version "1.7.0" 318 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" 319 | dependencies: 320 | es-to-primitive "^1.1.1" 321 | function-bind "^1.1.0" 322 | is-callable "^1.1.3" 323 | is-regex "^1.0.3" 324 | 325 | es-to-primitive@^1.1.1: 326 | version "1.1.1" 327 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" 328 | dependencies: 329 | is-callable "^1.1.1" 330 | is-date-object "^1.0.1" 331 | is-symbol "^1.0.1" 332 | 333 | es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: 334 | version "0.10.15" 335 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6" 336 | dependencies: 337 | es6-iterator "2" 338 | es6-symbol "~3.1" 339 | 340 | es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: 341 | version "2.0.1" 342 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" 343 | dependencies: 344 | d "1" 345 | es5-ext "^0.10.14" 346 | es6-symbol "^3.1" 347 | 348 | es6-map@^0.1.3: 349 | version "0.1.5" 350 | resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" 351 | dependencies: 352 | d "1" 353 | es5-ext "~0.10.14" 354 | es6-iterator "~2.0.1" 355 | es6-set "~0.1.5" 356 | es6-symbol "~3.1.1" 357 | event-emitter "~0.3.5" 358 | 359 | es6-set@~0.1.5: 360 | version "0.1.5" 361 | resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" 362 | dependencies: 363 | d "1" 364 | es5-ext "~0.10.14" 365 | es6-iterator "~2.0.1" 366 | es6-symbol "3.1.1" 367 | event-emitter "~0.3.5" 368 | 369 | es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: 370 | version "3.1.1" 371 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 372 | dependencies: 373 | d "1" 374 | es5-ext "~0.10.14" 375 | 376 | es6-weak-map@^2.0.1: 377 | version "2.0.2" 378 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" 379 | dependencies: 380 | d "1" 381 | es5-ext "^0.10.14" 382 | es6-iterator "^2.0.1" 383 | es6-symbol "^3.1.1" 384 | 385 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 386 | version "1.0.5" 387 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 388 | 389 | escope@^3.6.0: 390 | version "3.6.0" 391 | resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" 392 | dependencies: 393 | es6-map "^0.1.3" 394 | es6-weak-map "^2.0.1" 395 | esrecurse "^4.1.0" 396 | estraverse "^4.1.1" 397 | 398 | eslint-plugin-react@^6.10.3: 399 | version "6.10.3" 400 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" 401 | dependencies: 402 | array.prototype.find "^2.0.1" 403 | doctrine "^1.2.2" 404 | has "^1.0.1" 405 | jsx-ast-utils "^1.3.4" 406 | object.assign "^4.0.4" 407 | 408 | eslint@^3.19.0: 409 | version "3.19.0" 410 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" 411 | dependencies: 412 | babel-code-frame "^6.16.0" 413 | chalk "^1.1.3" 414 | concat-stream "^1.5.2" 415 | debug "^2.1.1" 416 | doctrine "^2.0.0" 417 | escope "^3.6.0" 418 | espree "^3.4.0" 419 | esquery "^1.0.0" 420 | estraverse "^4.2.0" 421 | esutils "^2.0.2" 422 | file-entry-cache "^2.0.0" 423 | glob "^7.0.3" 424 | globals "^9.14.0" 425 | ignore "^3.2.0" 426 | imurmurhash "^0.1.4" 427 | inquirer "^0.12.0" 428 | is-my-json-valid "^2.10.0" 429 | is-resolvable "^1.0.0" 430 | js-yaml "^3.5.1" 431 | json-stable-stringify "^1.0.0" 432 | levn "^0.3.0" 433 | lodash "^4.0.0" 434 | mkdirp "^0.5.0" 435 | natural-compare "^1.4.0" 436 | optionator "^0.8.2" 437 | path-is-inside "^1.0.1" 438 | pluralize "^1.2.1" 439 | progress "^1.1.8" 440 | require-uncached "^1.0.2" 441 | shelljs "^0.7.5" 442 | strip-bom "^3.0.0" 443 | strip-json-comments "~2.0.1" 444 | table "^3.7.8" 445 | text-table "~0.2.0" 446 | user-home "^2.0.0" 447 | 448 | espree@^3.4.0: 449 | version "3.4.2" 450 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.2.tgz#38dbdedbedc95b8961a1fbf04734a8f6a9c8c592" 451 | dependencies: 452 | acorn "^5.0.1" 453 | acorn-jsx "^3.0.0" 454 | 455 | esprima@^3.1.1: 456 | version "3.1.3" 457 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 458 | 459 | esquery@^1.0.0: 460 | version "1.0.0" 461 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" 462 | dependencies: 463 | estraverse "^4.0.0" 464 | 465 | esrecurse@^4.1.0: 466 | version "4.1.0" 467 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" 468 | dependencies: 469 | estraverse "~4.1.0" 470 | object-assign "^4.0.1" 471 | 472 | estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: 473 | version "4.2.0" 474 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 475 | 476 | estraverse@~4.1.0: 477 | version "4.1.1" 478 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" 479 | 480 | esutils@2.0.2, esutils@^2.0.2: 481 | version "2.0.2" 482 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 483 | 484 | event-emitter@~0.3.5: 485 | version "0.3.5" 486 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 487 | dependencies: 488 | d "1" 489 | es5-ext "~0.10.14" 490 | 491 | exit-hook@^1.0.0: 492 | version "1.1.1" 493 | resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" 494 | 495 | fast-levenshtein@~2.0.4: 496 | version "2.0.6" 497 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 498 | 499 | fbjs@~0.8.9: 500 | version "0.8.12" 501 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" 502 | dependencies: 503 | core-js "^1.0.0" 504 | isomorphic-fetch "^2.1.1" 505 | loose-envify "^1.0.0" 506 | object-assign "^4.1.0" 507 | promise "^7.1.1" 508 | setimmediate "^1.0.5" 509 | ua-parser-js "^0.7.9" 510 | 511 | figures@^1.3.5: 512 | version "1.7.0" 513 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 514 | dependencies: 515 | escape-string-regexp "^1.0.5" 516 | object-assign "^4.1.0" 517 | 518 | file-entry-cache@^2.0.0: 519 | version "2.0.0" 520 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" 521 | dependencies: 522 | flat-cache "^1.2.1" 523 | object-assign "^4.0.1" 524 | 525 | find-up@^1.0.0: 526 | version "1.1.2" 527 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 528 | dependencies: 529 | path-exists "^2.0.0" 530 | pinkie-promise "^2.0.0" 531 | 532 | flat-cache@^1.2.1: 533 | version "1.2.2" 534 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" 535 | dependencies: 536 | circular-json "^0.3.1" 537 | del "^2.0.2" 538 | graceful-fs "^4.1.2" 539 | write "^0.2.1" 540 | 541 | flow-parser@0.45.0: 542 | version "0.45.0" 543 | resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.45.0.tgz#aa29d4ae27f06aa02817772bba0fcbefef7e62f0" 544 | 545 | foreach@^2.0.5: 546 | version "2.0.5" 547 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 548 | 549 | fs.realpath@^1.0.0: 550 | version "1.0.0" 551 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 552 | 553 | function-bind@^1.0.2, function-bind@^1.1.0: 554 | version "1.1.0" 555 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" 556 | 557 | generate-function@^2.0.0: 558 | version "2.0.0" 559 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" 560 | 561 | generate-object-property@^1.1.0: 562 | version "1.2.0" 563 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" 564 | dependencies: 565 | is-property "^1.0.0" 566 | 567 | get-caller-file@^1.0.1: 568 | version "1.0.2" 569 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" 570 | 571 | get-stdin@5.0.1: 572 | version "5.0.1" 573 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" 574 | 575 | glob@7.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: 576 | version "7.1.1" 577 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 578 | dependencies: 579 | fs.realpath "^1.0.0" 580 | inflight "^1.0.4" 581 | inherits "2" 582 | minimatch "^3.0.2" 583 | once "^1.3.0" 584 | path-is-absolute "^1.0.0" 585 | 586 | globals@^9.0.0, globals@^9.14.0: 587 | version "9.17.0" 588 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" 589 | 590 | globby@^5.0.0: 591 | version "5.0.0" 592 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 593 | dependencies: 594 | array-union "^1.0.1" 595 | arrify "^1.0.0" 596 | glob "^7.0.3" 597 | object-assign "^4.0.1" 598 | pify "^2.0.0" 599 | pinkie-promise "^2.0.0" 600 | 601 | graceful-fs@^4.1.2: 602 | version "4.1.11" 603 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 604 | 605 | has-ansi@^2.0.0: 606 | version "2.0.0" 607 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 608 | dependencies: 609 | ansi-regex "^2.0.0" 610 | 611 | has@^1.0.1: 612 | version "1.0.1" 613 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" 614 | dependencies: 615 | function-bind "^1.0.2" 616 | 617 | hosted-git-info@^2.1.4: 618 | version "2.4.2" 619 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" 620 | 621 | iconv-lite@~0.4.13: 622 | version "0.4.17" 623 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d" 624 | 625 | ignore@^3.2.0: 626 | version "3.3.0" 627 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.0.tgz#3812d22cbe9125f2c2b4915755a1b8abd745a001" 628 | 629 | immutable@~3.7.6: 630 | version "3.7.6" 631 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" 632 | 633 | imurmurhash@^0.1.4: 634 | version "0.1.4" 635 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 636 | 637 | inflight@^1.0.4: 638 | version "1.0.6" 639 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 640 | dependencies: 641 | once "^1.3.0" 642 | wrappy "1" 643 | 644 | inherits@2, inherits@^2.0.3, inherits@~2.0.1: 645 | version "2.0.3" 646 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 647 | 648 | inquirer@^0.12.0: 649 | version "0.12.0" 650 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" 651 | dependencies: 652 | ansi-escapes "^1.1.0" 653 | ansi-regex "^2.0.0" 654 | chalk "^1.0.0" 655 | cli-cursor "^1.0.1" 656 | cli-width "^2.0.0" 657 | figures "^1.3.5" 658 | lodash "^4.3.0" 659 | readline2 "^1.0.1" 660 | run-async "^0.1.0" 661 | rx-lite "^3.1.2" 662 | string-width "^1.0.1" 663 | strip-ansi "^3.0.0" 664 | through "^2.3.6" 665 | 666 | interpret@^1.0.0: 667 | version "1.0.3" 668 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" 669 | 670 | invariant@^2.2.0: 671 | version "2.2.2" 672 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" 673 | dependencies: 674 | loose-envify "^1.0.0" 675 | 676 | invert-kv@^1.0.0: 677 | version "1.0.0" 678 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 679 | 680 | is-arrayish@^0.2.1: 681 | version "0.2.1" 682 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 683 | 684 | is-builtin-module@^1.0.0: 685 | version "1.0.0" 686 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 687 | dependencies: 688 | builtin-modules "^1.0.0" 689 | 690 | is-callable@^1.1.1, is-callable@^1.1.3: 691 | version "1.1.3" 692 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" 693 | 694 | is-date-object@^1.0.1: 695 | version "1.0.1" 696 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 697 | 698 | is-fullwidth-code-point@^1.0.0: 699 | version "1.0.0" 700 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 701 | dependencies: 702 | number-is-nan "^1.0.0" 703 | 704 | is-fullwidth-code-point@^2.0.0: 705 | version "2.0.0" 706 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 707 | 708 | is-my-json-valid@^2.10.0: 709 | version "2.16.0" 710 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" 711 | dependencies: 712 | generate-function "^2.0.0" 713 | generate-object-property "^1.1.0" 714 | jsonpointer "^4.0.0" 715 | xtend "^4.0.0" 716 | 717 | is-path-cwd@^1.0.0: 718 | version "1.0.0" 719 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 720 | 721 | is-path-in-cwd@^1.0.0: 722 | version "1.0.0" 723 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" 724 | dependencies: 725 | is-path-inside "^1.0.0" 726 | 727 | is-path-inside@^1.0.0: 728 | version "1.0.0" 729 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" 730 | dependencies: 731 | path-is-inside "^1.0.1" 732 | 733 | is-property@^1.0.0: 734 | version "1.0.2" 735 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" 736 | 737 | is-regex@^1.0.3: 738 | version "1.0.4" 739 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 740 | dependencies: 741 | has "^1.0.1" 742 | 743 | is-resolvable@^1.0.0: 744 | version "1.0.0" 745 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" 746 | dependencies: 747 | tryit "^1.0.1" 748 | 749 | is-stream@^1.0.1: 750 | version "1.1.0" 751 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 752 | 753 | is-symbol@^1.0.1: 754 | version "1.0.1" 755 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" 756 | 757 | is-utf8@^0.2.0: 758 | version "0.2.1" 759 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 760 | 761 | isarray@^1.0.0, isarray@~1.0.0: 762 | version "1.0.0" 763 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 764 | 765 | isomorphic-fetch@^2.1.1: 766 | version "2.2.1" 767 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" 768 | dependencies: 769 | node-fetch "^1.0.1" 770 | whatwg-fetch ">=0.10.0" 771 | 772 | jest-matcher-utils@^19.0.0: 773 | version "19.0.0" 774 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz#5ecd9b63565d2b001f61fbf7ec4c7f537964564d" 775 | dependencies: 776 | chalk "^1.1.3" 777 | pretty-format "^19.0.0" 778 | 779 | jest-validate@19.0.0: 780 | version "19.0.0" 781 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.0.tgz#8c6318a20ecfeaba0ba5378bfbb8277abded4173" 782 | dependencies: 783 | chalk "^1.1.1" 784 | jest-matcher-utils "^19.0.0" 785 | leven "^2.0.0" 786 | pretty-format "^19.0.0" 787 | 788 | js-tokens@^3.0.0: 789 | version "3.0.1" 790 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" 791 | 792 | js-yaml@^3.5.1: 793 | version "3.8.3" 794 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" 795 | dependencies: 796 | argparse "^1.0.7" 797 | esprima "^3.1.1" 798 | 799 | json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: 800 | version "1.0.1" 801 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 802 | dependencies: 803 | jsonify "~0.0.0" 804 | 805 | jsonify@~0.0.0: 806 | version "0.0.0" 807 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 808 | 809 | jsonpointer@^4.0.0: 810 | version "4.0.1" 811 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" 812 | 813 | jsx-ast-utils@^1.3.4: 814 | version "1.4.1" 815 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" 816 | 817 | lcid@^1.0.0: 818 | version "1.0.0" 819 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 820 | dependencies: 821 | invert-kv "^1.0.0" 822 | 823 | leven@^2.0.0: 824 | version "2.1.0" 825 | resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" 826 | 827 | levn@^0.3.0, levn@~0.3.0: 828 | version "0.3.0" 829 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 830 | dependencies: 831 | prelude-ls "~1.1.2" 832 | type-check "~0.3.2" 833 | 834 | load-json-file@^1.0.0: 835 | version "1.1.0" 836 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 837 | dependencies: 838 | graceful-fs "^4.1.2" 839 | parse-json "^2.2.0" 840 | pify "^2.0.0" 841 | pinkie-promise "^2.0.0" 842 | strip-bom "^2.0.0" 843 | 844 | lodash@^4.0.0, lodash@^4.2.0, lodash@^4.3.0: 845 | version "4.17.4" 846 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 847 | 848 | loose-envify@^1.0.0: 849 | version "1.3.1" 850 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 851 | dependencies: 852 | js-tokens "^3.0.0" 853 | 854 | minimatch@^3.0.2: 855 | version "3.0.3" 856 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 857 | dependencies: 858 | brace-expansion "^1.0.0" 859 | 860 | minimist@0.0.8: 861 | version "0.0.8" 862 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 863 | 864 | minimist@1.2.0: 865 | version "1.2.0" 866 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 867 | 868 | mkdirp@^0.5.0, mkdirp@^0.5.1: 869 | version "0.5.1" 870 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 871 | dependencies: 872 | minimist "0.0.8" 873 | 874 | ms@0.7.3: 875 | version "0.7.3" 876 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" 877 | 878 | mute-stream@0.0.5: 879 | version "0.0.5" 880 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" 881 | 882 | natural-compare@^1.4.0: 883 | version "1.4.0" 884 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 885 | 886 | node-fetch@^1.0.1: 887 | version "1.6.3" 888 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" 889 | dependencies: 890 | encoding "^0.1.11" 891 | is-stream "^1.0.1" 892 | 893 | normalize-package-data@^2.3.2: 894 | version "2.3.8" 895 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" 896 | dependencies: 897 | hosted-git-info "^2.1.4" 898 | is-builtin-module "^1.0.0" 899 | semver "2 || 3 || 4 || 5" 900 | validate-npm-package-license "^3.0.1" 901 | 902 | number-is-nan@^1.0.0: 903 | version "1.0.1" 904 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 905 | 906 | object-assign@^4.0.1, object-assign@^4.1.0: 907 | version "4.1.1" 908 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 909 | 910 | object-keys@^1.0.10, object-keys@^1.0.8: 911 | version "1.0.11" 912 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" 913 | 914 | object.assign@^4.0.4: 915 | version "4.0.4" 916 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" 917 | dependencies: 918 | define-properties "^1.1.2" 919 | function-bind "^1.1.0" 920 | object-keys "^1.0.10" 921 | 922 | once@^1.3.0: 923 | version "1.4.0" 924 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 925 | dependencies: 926 | wrappy "1" 927 | 928 | onetime@^1.0.0: 929 | version "1.1.0" 930 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" 931 | 932 | optionator@^0.8.2: 933 | version "0.8.2" 934 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 935 | dependencies: 936 | deep-is "~0.1.3" 937 | fast-levenshtein "~2.0.4" 938 | levn "~0.3.0" 939 | prelude-ls "~1.1.2" 940 | type-check "~0.3.2" 941 | wordwrap "~1.0.0" 942 | 943 | os-homedir@^1.0.0: 944 | version "1.0.2" 945 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 946 | 947 | os-locale@^1.4.0: 948 | version "1.4.0" 949 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" 950 | dependencies: 951 | lcid "^1.0.0" 952 | 953 | parse-json@^2.2.0: 954 | version "2.2.0" 955 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 956 | dependencies: 957 | error-ex "^1.2.0" 958 | 959 | path-exists@^2.0.0: 960 | version "2.1.0" 961 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 962 | dependencies: 963 | pinkie-promise "^2.0.0" 964 | 965 | path-is-absolute@^1.0.0: 966 | version "1.0.1" 967 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 968 | 969 | path-is-inside@^1.0.1: 970 | version "1.0.2" 971 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 972 | 973 | path-parse@^1.0.5: 974 | version "1.0.5" 975 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 976 | 977 | path-type@^1.0.0: 978 | version "1.1.0" 979 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 980 | dependencies: 981 | graceful-fs "^4.1.2" 982 | pify "^2.0.0" 983 | pinkie-promise "^2.0.0" 984 | 985 | pify@^2.0.0: 986 | version "2.3.0" 987 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 988 | 989 | pinkie-promise@^2.0.0: 990 | version "2.0.1" 991 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 992 | dependencies: 993 | pinkie "^2.0.0" 994 | 995 | pinkie@^2.0.0: 996 | version "2.0.4" 997 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 998 | 999 | pluralize@^1.2.1: 1000 | version "1.2.1" 1001 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" 1002 | 1003 | prelude-ls@~1.1.2: 1004 | version "1.1.2" 1005 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1006 | 1007 | prettier@^1.3.0: 1008 | version "1.3.0" 1009 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.3.0.tgz#cb02314f1ae2a99e951c17acb77a4096a1060ac2" 1010 | dependencies: 1011 | ast-types "0.9.8" 1012 | babel-code-frame "6.22.0" 1013 | babylon "7.0.0-beta.8" 1014 | chalk "1.1.3" 1015 | esutils "2.0.2" 1016 | flow-parser "0.45.0" 1017 | get-stdin "5.0.1" 1018 | glob "7.1.1" 1019 | jest-validate "19.0.0" 1020 | minimist "1.2.0" 1021 | 1022 | pretty-format@^19.0.0: 1023 | version "19.0.0" 1024 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84" 1025 | dependencies: 1026 | ansi-styles "^3.0.0" 1027 | 1028 | process-nextick-args@~1.0.6: 1029 | version "1.0.7" 1030 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1031 | 1032 | progress@^1.1.8: 1033 | version "1.1.8" 1034 | resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" 1035 | 1036 | promise@^7.1.1: 1037 | version "7.1.1" 1038 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" 1039 | dependencies: 1040 | asap "~2.0.3" 1041 | 1042 | react-native-deprecated-custom-components@^0.1.0: 1043 | version "0.1.0" 1044 | resolved "https://registry.yarnpkg.com/react-native-deprecated-custom-components/-/react-native-deprecated-custom-components-0.1.0.tgz#f716d431ef2dc4f91b7a686af091ee3656538086" 1045 | dependencies: 1046 | fbjs "~0.8.9" 1047 | immutable "~3.7.6" 1048 | react-timer-mixin "^0.13.2" 1049 | rebound "^0.0.13" 1050 | 1051 | react-native-vector-icons@^4.0.1: 1052 | version "4.0.1" 1053 | resolved "https://registry.yarnpkg.com/react-native-vector-icons/-/react-native-vector-icons-4.0.1.tgz#39c05d2e775deeb98d5afdbda5dcf67965ff674f" 1054 | dependencies: 1055 | lodash "^4.0.0" 1056 | yargs "^6.3.0" 1057 | 1058 | react-timer-mixin@^0.13.2: 1059 | version "0.13.3" 1060 | resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz#0da8b9f807ec07dc3e854d082c737c65605b3d22" 1061 | 1062 | read-pkg-up@^1.0.1: 1063 | version "1.0.1" 1064 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 1065 | dependencies: 1066 | find-up "^1.0.0" 1067 | read-pkg "^1.0.0" 1068 | 1069 | read-pkg@^1.0.0: 1070 | version "1.1.0" 1071 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 1072 | dependencies: 1073 | load-json-file "^1.0.0" 1074 | normalize-package-data "^2.3.2" 1075 | path-type "^1.0.0" 1076 | 1077 | readable-stream@^2.2.2: 1078 | version "2.2.9" 1079 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" 1080 | dependencies: 1081 | buffer-shims "~1.0.0" 1082 | core-util-is "~1.0.0" 1083 | inherits "~2.0.1" 1084 | isarray "~1.0.0" 1085 | process-nextick-args "~1.0.6" 1086 | string_decoder "~1.0.0" 1087 | util-deprecate "~1.0.1" 1088 | 1089 | readline2@^1.0.1: 1090 | version "1.0.1" 1091 | resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" 1092 | dependencies: 1093 | code-point-at "^1.0.0" 1094 | is-fullwidth-code-point "^1.0.0" 1095 | mute-stream "0.0.5" 1096 | 1097 | rebound@^0.0.13: 1098 | version "0.0.13" 1099 | resolved "https://registry.yarnpkg.com/rebound/-/rebound-0.0.13.tgz#4a225254caf7da756797b19c5817bf7a7941fac1" 1100 | 1101 | rechoir@^0.6.2: 1102 | version "0.6.2" 1103 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" 1104 | dependencies: 1105 | resolve "^1.1.6" 1106 | 1107 | regenerator-runtime@^0.10.0: 1108 | version "0.10.5" 1109 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" 1110 | 1111 | require-directory@^2.1.1: 1112 | version "2.1.1" 1113 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1114 | 1115 | require-main-filename@^1.0.1: 1116 | version "1.0.1" 1117 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 1118 | 1119 | require-uncached@^1.0.2: 1120 | version "1.0.3" 1121 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" 1122 | dependencies: 1123 | caller-path "^0.1.0" 1124 | resolve-from "^1.0.0" 1125 | 1126 | resolve-from@^1.0.0: 1127 | version "1.0.1" 1128 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" 1129 | 1130 | resolve@^1.1.6: 1131 | version "1.3.3" 1132 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" 1133 | dependencies: 1134 | path-parse "^1.0.5" 1135 | 1136 | restore-cursor@^1.0.1: 1137 | version "1.0.1" 1138 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" 1139 | dependencies: 1140 | exit-hook "^1.0.0" 1141 | onetime "^1.0.0" 1142 | 1143 | rimraf@^2.2.8: 1144 | version "2.6.1" 1145 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 1146 | dependencies: 1147 | glob "^7.0.5" 1148 | 1149 | run-async@^0.1.0: 1150 | version "0.1.0" 1151 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" 1152 | dependencies: 1153 | once "^1.3.0" 1154 | 1155 | rx-lite@^3.1.2: 1156 | version "3.1.2" 1157 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" 1158 | 1159 | "semver@2 || 3 || 4 || 5": 1160 | version "5.3.0" 1161 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 1162 | 1163 | set-blocking@^2.0.0: 1164 | version "2.0.0" 1165 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1166 | 1167 | setimmediate@^1.0.5: 1168 | version "1.0.5" 1169 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 1170 | 1171 | shelljs@^0.7.5: 1172 | version "0.7.7" 1173 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" 1174 | dependencies: 1175 | glob "^7.0.0" 1176 | interpret "^1.0.0" 1177 | rechoir "^0.6.2" 1178 | 1179 | slice-ansi@0.0.4: 1180 | version "0.0.4" 1181 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" 1182 | 1183 | spdx-correct@~1.0.0: 1184 | version "1.0.2" 1185 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 1186 | dependencies: 1187 | spdx-license-ids "^1.0.2" 1188 | 1189 | spdx-expression-parse@~1.0.0: 1190 | version "1.0.4" 1191 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 1192 | 1193 | spdx-license-ids@^1.0.2: 1194 | version "1.2.2" 1195 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 1196 | 1197 | sprintf-js@~1.0.2: 1198 | version "1.0.3" 1199 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1200 | 1201 | string-width@^1.0.1, string-width@^1.0.2: 1202 | version "1.0.2" 1203 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1204 | dependencies: 1205 | code-point-at "^1.0.0" 1206 | is-fullwidth-code-point "^1.0.0" 1207 | strip-ansi "^3.0.0" 1208 | 1209 | string-width@^2.0.0: 1210 | version "2.0.0" 1211 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" 1212 | dependencies: 1213 | is-fullwidth-code-point "^2.0.0" 1214 | strip-ansi "^3.0.0" 1215 | 1216 | string_decoder@~1.0.0: 1217 | version "1.0.0" 1218 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" 1219 | dependencies: 1220 | buffer-shims "~1.0.0" 1221 | 1222 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1223 | version "3.0.1" 1224 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1225 | dependencies: 1226 | ansi-regex "^2.0.0" 1227 | 1228 | strip-bom@^2.0.0: 1229 | version "2.0.0" 1230 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 1231 | dependencies: 1232 | is-utf8 "^0.2.0" 1233 | 1234 | strip-bom@^3.0.0: 1235 | version "3.0.0" 1236 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1237 | 1238 | strip-json-comments@~2.0.1: 1239 | version "2.0.1" 1240 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1241 | 1242 | supports-color@^2.0.0: 1243 | version "2.0.0" 1244 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1245 | 1246 | table@^3.7.8: 1247 | version "3.8.3" 1248 | resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" 1249 | dependencies: 1250 | ajv "^4.7.0" 1251 | ajv-keywords "^1.0.0" 1252 | chalk "^1.1.1" 1253 | lodash "^4.0.0" 1254 | slice-ansi "0.0.4" 1255 | string-width "^2.0.0" 1256 | 1257 | text-table@~0.2.0: 1258 | version "0.2.0" 1259 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1260 | 1261 | through@^2.3.6: 1262 | version "2.3.8" 1263 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1264 | 1265 | to-fast-properties@^1.0.1: 1266 | version "1.0.3" 1267 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 1268 | 1269 | tryit@^1.0.1: 1270 | version "1.0.3" 1271 | resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" 1272 | 1273 | type-check@~0.3.2: 1274 | version "0.3.2" 1275 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1276 | dependencies: 1277 | prelude-ls "~1.1.2" 1278 | 1279 | typedarray@^0.0.6: 1280 | version "0.0.6" 1281 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 1282 | 1283 | ua-parser-js@^0.7.9: 1284 | version "0.7.12" 1285 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" 1286 | 1287 | user-home@^2.0.0: 1288 | version "2.0.0" 1289 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" 1290 | dependencies: 1291 | os-homedir "^1.0.0" 1292 | 1293 | util-deprecate@~1.0.1: 1294 | version "1.0.2" 1295 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1296 | 1297 | validate-npm-package-license@^3.0.1: 1298 | version "3.0.1" 1299 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 1300 | dependencies: 1301 | spdx-correct "~1.0.0" 1302 | spdx-expression-parse "~1.0.0" 1303 | 1304 | whatwg-fetch@>=0.10.0: 1305 | version "2.0.3" 1306 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" 1307 | 1308 | which-module@^1.0.0: 1309 | version "1.0.0" 1310 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" 1311 | 1312 | wordwrap@~1.0.0: 1313 | version "1.0.0" 1314 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 1315 | 1316 | wrap-ansi@^2.0.0: 1317 | version "2.1.0" 1318 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 1319 | dependencies: 1320 | string-width "^1.0.1" 1321 | strip-ansi "^3.0.1" 1322 | 1323 | wrappy@1: 1324 | version "1.0.2" 1325 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1326 | 1327 | write@^0.2.1: 1328 | version "0.2.1" 1329 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 1330 | dependencies: 1331 | mkdirp "^0.5.1" 1332 | 1333 | xtend@^4.0.0: 1334 | version "4.0.1" 1335 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 1336 | 1337 | y18n@^3.2.1: 1338 | version "3.2.1" 1339 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 1340 | 1341 | yargs-parser@^4.2.0: 1342 | version "4.2.1" 1343 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" 1344 | dependencies: 1345 | camelcase "^3.0.0" 1346 | 1347 | yargs@^6.3.0: 1348 | version "6.6.0" 1349 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" 1350 | dependencies: 1351 | camelcase "^3.0.0" 1352 | cliui "^3.2.0" 1353 | decamelize "^1.1.1" 1354 | get-caller-file "^1.0.1" 1355 | os-locale "^1.4.0" 1356 | read-pkg-up "^1.0.1" 1357 | require-directory "^2.1.1" 1358 | require-main-filename "^1.0.1" 1359 | set-blocking "^2.0.0" 1360 | string-width "^1.0.2" 1361 | which-module "^1.0.0" 1362 | y18n "^3.2.1" 1363 | yargs-parser "^4.2.0" 1364 | --------------------------------------------------------------------------------