From f26a821f73c5fa5bbc1a19448826711410efa9bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Tue, 9 May 2017 09:50:43 +0200 Subject: [PATCH 01/50] refactor(all): upgrade react-navigation --- .../xcshareddata/xcschemes/Huge-tvOS.xcscheme | 2 +- .../xcshareddata/xcschemes/Huge.xcscheme | 2 +- examples/Huge/src/app/index.js | 6 - modules/CardStack.js | 17 +- modules/DefaultRenderer.js | 174 ++++++------------ modules/NativeNavigation.js | 0 modules/NavBar.js | 22 ++- modules/Navigation.js | 10 +- modules/__tests__/StackUtils-spec.js | 28 +-- package.json | 2 +- yarn.lock | 41 +++-- 11 files changed, 139 insertions(+), 165 deletions(-) create mode 100644 modules/NativeNavigation.js diff --git a/examples/Huge/ios/Huge.xcodeproj/xcshareddata/xcschemes/Huge-tvOS.xcscheme b/examples/Huge/ios/Huge.xcodeproj/xcshareddata/xcschemes/Huge-tvOS.xcscheme index 7484ed8..c8fe887 100644 --- a/examples/Huge/ios/Huge.xcodeproj/xcshareddata/xcschemes/Huge-tvOS.xcscheme +++ b/examples/Huge/ios/Huge.xcodeproj/xcshareddata/xcschemes/Huge-tvOS.xcscheme @@ -1,6 +1,6 @@ ( path="/app" render={({ location, match: { state, url } }) => ( - ( - My modal - )} - /> { // Build the card stack $FlowFixMe const { children, history: { entries, index }, location } = props const cards = children && StackUtils.build(children) - if (!cards) throw new Error('No childre found') + if (!cards) throw new Error('No cards found') // Get initial route of navigation state if (!entries) throw new Error('No history entries found') // Build navigation state @@ -76,10 +76,13 @@ class CardStack extends Component { BackAndroid.removeEventListener('hardwareBackPress', this.onNavigateBack) } - // Listen all history events + // Listen all history events + update card props componentWillReceiveProps(nextProps: OwnProps): void { - const { history: { action, entries }, location } = nextProps - const { cards, navigationState: { routes, index } } = this.state + // $FlowFixMe + const { children, history: { action, entries }, location } = nextProps + const { navigationState: { routes, index } } = this.state + // Re-build cards + const cards = children && StackUtils.build(children) // Get current card const currentRoute = routes[index] const currentCard = cards.find(({ key }) => key === currentRoute.routeName) @@ -96,6 +99,7 @@ class CardStack extends Component { switch (action) { case 'PUSH': { this.setState(state => ({ + cards, location, historyIndex: nextProps.history.index, navigationState: StateUtils.push( @@ -138,6 +142,7 @@ class CardStack extends Component { } case 'REPLACE': { this.setState(state => ({ + cards, location, historyIndex: nextProps.history.index, navigationState: StateUtils.replaceAtIndex( @@ -150,6 +155,10 @@ class CardStack extends Component { } default: } + } else { + this.setState({ + cards, + }) } } diff --git a/modules/DefaultRenderer.js b/modules/DefaultRenderer.js index 4817d2b..288b0f7 100644 --- a/modules/DefaultRenderer.js +++ b/modules/DefaultRenderer.js @@ -1,34 +1,19 @@ /* @flow */ /* eslint no-duplicate-imports: 0 */ -import React, { Component } from 'react' -import { NativeModules, StyleSheet, Platform, View } from 'react-native' -import { Transitioner } from 'react-navigation' -import Card from 'react-navigation/src/views/Card' -import CardStackPanResponder from 'react-navigation/src/views/CardStackPanResponder' -import TransitionConfigs from 'react-navigation/src/views/TransitionConfigs' -import type { TransitionConfig } from 'react-navigation/src/views/TransitionConfigs' -import type { NavigationScene, NavigationTransitionProps } from 'react-navigation/src/TypeDefinition' -import type { NavigationProps, CardsRendererProps } from './TypeDefinitions' -import * as StackUtils from './StackUtils' - -const NativeAnimatedModule = NativeModules && NativeModules.NativeAnimatedModule - -const styles = StyleSheet.create({ - container: { - flex: 1, - flexDirection: 'column-reverse', - overflow: 'hidden', - }, - scenes: { - flex: 1, - }, -}) +import React from 'react' +import { CardStack, Transitioner } from 'react-navigation' type SceneRendererProps = & CardsRendererProps & NavigationTransitionProps +type NavigationScreen = { + state: { + routeName: string, + }, +} + type Props = & CardsRendererProps & NavigationProps @@ -37,116 +22,79 @@ type Props = renderHeader: (props: SceneRendererProps) => ?React$Element, } - -class Navigation extends Component { +class DefaultRenderer extends React.Component { props: Props - configureTransition = ( - transitionProps: NavigationTransitionProps, - prevTransitionProps: NavigationTransitionProps, - ) => { + getScreenOptions = ( + navigationScreen: NavigationScreen, + sceneProps: SceneRendererProps, + ): Object => { + // Get route name + const { state: { routeName } } = navigationScreen + // Get current scene + const scene = sceneProps.scenes.find(({ route }) => { + return route.routeName === routeName + }) + // Return header return { - ...this.getTransitionConfig( - transitionProps, - prevTransitionProps, - ).transitionSpec, - useNativeDriver: !!NativeAnimatedModule, - } - } - - getTransitionConfig = ( - transitionProps: NavigationTransitionProps, - prevTransitionProps: NavigationTransitionProps, - ): TransitionConfig => { - return TransitionConfigs.defaultTransitionConfig( - transitionProps, - prevTransitionProps, - false, - ) - } - - renderInnerCard = (props: SceneRendererProps): ?React$Element => { - // Build scene view - const SceneView = this.props.renderScene(props) - if (!SceneView) return null - // Render card - if (Platform.OS === 'android') { - return ( - - {Platform.OS === 'android' && this.props.renderHeader(props)} - {SceneView} - - ) + header: () => this.props.renderHeader({ + ...this.props, + ...sceneProps, + scene, + }), } - return SceneView } - renderCard = (props: SceneRendererProps & { scene: NavigationScene }): React$Element => { - // Build pan handlers $FlowFixMe - const { screenInterpolator } = this.getTransitionConfig() - const style = screenInterpolator && screenInterpolator(props) - const panHandlersProps = { - ...props, - onNavigateBack: props.onNavigateBack, - } - const panHandlers = Platform.OS === 'ios' - ? CardStackPanResponder.forHorizontal(panHandlersProps) - : null - // Get cardStyle prop - const ownProps = StackUtils.get( - props.cards, - props.scene.route, - ) - // Render component with current scene - return ( - this.renderInnerCard(props)} - style={[ - style, - this.props.cardStyle, - ownProps && ownProps.cardStyle, - ]} - /> - ) + getSceenComponent = ( + routeName: string, + sceneProps: SceneRendererProps, + ): () => React$Element => { + // Get current scene + const scene = sceneProps.scenes.find(({ route }) => { + return route.routeName === routeName + }) + // Return scene component + return this.props.renderScene({ + ...this.props, + ...sceneProps, + scene, + }) } - renderView = (props: SceneRendererProps): React$Element => { - // Build floatingHeader - const floatingHeader = Platform.OS === 'ios' - ? this.props.renderHeader(props) - : null - // Render all scenes with floatingHeader - return ( - - - {props.scenes.map((scene, index) => this.renderCard({ - ...props, - scene, - index, - }))} - - {floatingHeader} - - ) - } + renderView = (ownProps: SceneRendererProps): React$Element => ( + this.getScreenOptions(navigationScreen, ownProps), + getComponentForRouteName: routeName => this.getSceenComponent(routeName, ownProps), + }} + navigation={{ + goBack: this.props.onNavigateBack, + state: this.props.navigationState, + dispatch: (action) => { + if (action.type === 'Navigation/BACK') { + this.props.onNavigateBack() + } + return false + }, + }} + /> + ) render(): React$Element { const { navigationState } = this.props return ( this.renderView({ ...this.props, ...ownProps })} + render={this.renderView} /> ) } } -export default Navigation +export default DefaultRenderer diff --git a/modules/NativeNavigation.js b/modules/NativeNavigation.js new file mode 100644 index 0000000..e69de29 diff --git a/modules/NavBar.js b/modules/NavBar.js index 739c631..25d765f 100644 --- a/modules/NavBar.js +++ b/modules/NavBar.js @@ -32,7 +32,10 @@ class NavBar extends Component { sceneProps.cards, sceneProps.scenes[Math.max(0, sceneProps.scene.index - 1)].route, ) - const previousTitle = sceneProps.backButtonTitle || (previousRoute && previousRoute.title) + const previousTitle = ( + sceneProps.backButtonTitle || + (previousRoute && previousRoute.title) + ) // Return default component return ( { } render(): ?React$Element { - const sceneProps = StackUtils.get(this.props.cards, this.props.scene.route) return (
{ + const sceneProps = StackUtils.get(this.props.cards, scene.route) + const props = { ...this.props, scene } + return { + options: { + headerStyle: (sceneProps && sceneProps.navBarStyle) || this.props.navBarStyle, + headerLeft: StackUtils.renderSubView(this.renderLeftComponent, props)(), + headerTitle: StackUtils.renderSubView(this.renderTitleComponent, props)(), + headerRight: StackUtils.renderSubView(this.renderRightComponent, props)(), + }, + } + }} /> ) } diff --git a/modules/Navigation.js b/modules/Navigation.js index 2b1bc77..46630c1 100644 --- a/modules/Navigation.js +++ b/modules/Navigation.js @@ -2,7 +2,7 @@ /* eslint no-duplicate-imports: 0 */ /* eslint react/no-children-prop: 0 */ -import React, { Component, createElement } from 'react' +import React, { Component } from 'react' import type { NavigationProps, CardSubViewProps } from './TypeDefinitions' import CardStack from './CardStack' import DefaultRenderer from './DefaultRenderer' @@ -28,11 +28,11 @@ class Navigation extends Component { return } - renderScene = (sceneProps: CardSubViewProps): ?React$Element => { + renderScene = (sceneProps: CardSubViewProps): ?ReactClass => { const { render, children, component } = sceneProps - if (render) return render(sceneProps) - else if (children && typeof children === 'function') return children(sceneProps) - else if (component) return createElement(component, sceneProps) + if (render) return render + else if (children && typeof children === 'function') return children + else if (component) return component return null } diff --git a/modules/__tests__/StackUtils-spec.js b/modules/__tests__/StackUtils-spec.js index 39202b4..0c085ac 100644 --- a/modules/__tests__/StackUtils-spec.js +++ b/modules/__tests__/StackUtils-spec.js @@ -7,8 +7,8 @@ import * as StackUtils from './../StackUtils' const { build, shouldUpdate, get, getRoute, createKey } = StackUtils -describe('StackUtils', () => { - it('build() works correctly', () => { +describe('build util', () => { + it('works correctly', () => { const children = [ { expect(JSON.stringify(build(children))).toEqual(JSON.stringify(results)) }) - it('build() creates correctly render method', () => { + it('creates correctly render method', () => { const children = [ { }) }) -describe('StackUtils.shouldUpdate() util', () => { - it('shouldUpdate() returns true when paths are different', () => { +describe('shouldUpdate util', () => { + it('returns true when paths are different', () => { const currentCard = { path: '/foo' } const nextCard = { path: '/bar' } const currentRouterHistory = createHistory({ @@ -71,7 +71,7 @@ describe('StackUtils.shouldUpdate() util', () => { ) expect(input).toBeTruthy() }) - it('shouldUpdate() returns false when paths are equal', () => { + it('returns false when paths are equal', () => { const currentCard = { path: '/foo' } const nextCard = { path: '/foo' } const currentRouterHistory = createHistory({ @@ -89,7 +89,7 @@ describe('StackUtils.shouldUpdate() util', () => { ) expect(input).toBeFalsy() }) - it('shouldUpdate() returns true when paths (with params) are equal and pathnames are different (1)', () => { + it('returns true when paths (with params) are equal and pathnames are different (1)', () => { const currentCard = { path: '/article/:id' } const nextCard = { path: '/article/:id' } const currentRouterHistory = createHistory({ @@ -107,7 +107,7 @@ describe('StackUtils.shouldUpdate() util', () => { ) expect(input).toBeTruthy() }) - it('shouldUpdate() returns true when paths (with params) are equal and pathnames are different (2)', () => { + it('returns true when paths (with params) are equal and pathnames are different (2)', () => { const currentCard = { path: '/article/:id' } const nextCard = { path: '/article/:id' } const currentRouterHistory = createHistory({ @@ -125,7 +125,7 @@ describe('StackUtils.shouldUpdate() util', () => { ) expect(input).toBeTruthy() }) - it('shouldUpdate() returns false when paths (without params) are equal and pathname are different', () => { + it('returns false when paths (without params) are equal and pathname are different', () => { const currentCard = { path: '/app' } const nextCard = { path: '/app' } const currentRouterHistory = createHistory({ @@ -145,8 +145,8 @@ describe('StackUtils.shouldUpdate() util', () => { }) }) -describe('StackUtils.get() util', () => { - it('get() works correctly', () => { +describe('get util', () => { + it('works correctly', () => { const route = { key: '/index@@h9208990', routeName: '/index' } const currentCard = { key: '/index', @@ -161,15 +161,15 @@ describe('StackUtils.get() util', () => { }) }) -describe('StackUtils.getRoute() util', () => { - it('getRoute() works correctly', () => { +describe('getRoute util', () => { + it('works correctly', () => { const stack = [{ key: '/foo', path: '/foo' }, { key: '/bar', path: '/bar' }] const history = createHistory({ initialEntries: ['/bar'] }) expect(getRoute(stack, history.location).routeName).toEqual('/bar') }) }) -describe('StackUtils.createKey() util', () => { +describe('createKey util', () => { it('createKey() works correctly', () => { const key = createKey({ key: '/foo' }) expect(key.slice(0, 4)).toEqual('/foo') diff --git a/package.json b/package.json index 8a38953..75dc69c 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ }, "dependencies": { "react-native-tab-view": "0.0.57", - "react-navigation": "1.0.0-beta.7" + "react-navigation": "v1.0.0-beta.9" }, "devDependencies": { "babel-eslint": "7.1.1", diff --git a/yarn.lock b/yarn.lock index 3151320..5e363ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1757,7 +1757,7 @@ fbjs-scripts@^0.7.0: semver "^5.1.0" through2 "^2.0.0" -fbjs@^0.8.4, fbjs@^0.8.5: +fbjs@^0.8.4, fbjs@^0.8.5, fbjs@^0.8.9: version "0.8.9" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.9.tgz#180247fbd347dcc9004517b904f865400a0c8f14" dependencies: @@ -3397,6 +3397,12 @@ promise@^7.1.1: dependencies: asap "~2.0.3" +prop-types@^15.5.8: + version "15.5.8" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394" + dependencies: + fbjs "^0.8.9" + prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" @@ -3452,22 +3458,28 @@ react-native-dismiss-keyboard@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/react-native-dismiss-keyboard/-/react-native-dismiss-keyboard-1.0.0.tgz#32886242b3f2317e121f3aeb9b0a585e2b879b49" -react-native-drawer-layout-polyfill@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/react-native-drawer-layout-polyfill/-/react-native-drawer-layout-polyfill-1.1.0.tgz#6a76f582b260ebe64e556a58d473ddd51adc93ab" +react-native-drawer-layout-polyfill@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/react-native-drawer-layout-polyfill/-/react-native-drawer-layout-polyfill-1.2.0.tgz#0d77bd3af8964ffe7fd0f1f6550d6be328a5b567" dependencies: - react-native-drawer-layout "~1.1.5" + react-native-drawer-layout "1.2.0" -react-native-drawer-layout@~1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/react-native-drawer-layout/-/react-native-drawer-layout-1.1.6.tgz#e6fff2e2a13cd3821496827e65c20222d4441009" +react-native-drawer-layout@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/react-native-drawer-layout/-/react-native-drawer-layout-1.2.0.tgz#ae274ee17fadce58d9d7ecef4797d9fad672af74" dependencies: react-native-dismiss-keyboard "1.0.0" -react-native-tab-view@0.0.57, react-native-tab-view@^0.0.57: +react-native-tab-view@0.0.57: version "0.0.57" resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-0.0.57.tgz#715e2ea4100fa50168e134df3947dd76ebd55743" +react-native-tab-view@^0.0.61: + version "0.0.61" + resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-0.0.61.tgz#9f5446c9ad33158b87f0bccf5004fbff79ca1f92" + dependencies: + prop-types "^15.5.8" + react-native@^0.42.3: version "0.42.3" resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.42.3.tgz#450c8a03a5e3e991a08a426f22776dd8feb80b26" @@ -3548,16 +3560,17 @@ react-native@^0.42.3: xmldoc "^0.4.0" yargs "^6.4.0" -react-navigation@1.0.0-beta.7: - version "1.0.0-beta.7" - resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-1.0.0-beta.7.tgz#acd89a01903ef0d1335f1ff364d1dbe67bc70039" +react-navigation@v1.0.0-beta.9: + version "1.0.0-beta.9" + resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-1.0.0-beta.9.tgz#9fb1f8e4d15cee70cc8b5d58719a986ca443664d" dependencies: clamp "^1.0.1" fbjs "^0.8.5" hoist-non-react-statics "^1.2.0" path-to-regexp "^1.7.0" - react-native-drawer-layout-polyfill "^1.0.4" - react-native-tab-view "^0.0.57" + prop-types "^15.5.8" + react-native-drawer-layout-polyfill "1.2.0" + react-native-tab-view "^0.0.61" react-proxy@^1.1.7: version "1.1.8" From f5f2c2d4b53c8174ab797271fe940e0aeb5bd8d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 17 May 2017 11:14:02 +0200 Subject: [PATCH 02/50] feat(navigation): improve perf + some fixes + remove staticMatch prop --- modules/Card.js | 59 +++++++---------------- modules/CardStack.js | 87 +++++++++++++++++----------------- modules/DefaultRenderer.js | 6 ++- modules/Navigation.js | 25 ++++++---- modules/SceneView.js | 51 ++++++++++++++++++++ modules/__tests__/Card-spec.js | 21 -------- 6 files changed, 133 insertions(+), 116 deletions(-) create mode 100644 modules/SceneView.js diff --git a/modules/Card.js b/modules/Card.js index c07029b..aedd45f 100644 --- a/modules/Card.js +++ b/modules/Card.js @@ -1,51 +1,28 @@ /* @flow */ /* eslint no-duplicate-imports: 0 */ -import React, { Component, createElement } from 'react' +import React from 'react' import { Route } from 'react-router' -import type { ContextRouter, Match } from 'react-router' import type { CardProps } from './TypeDefinitions' +import SceneView from './SceneView' type Props = CardProps -type State = { - staticMatch: ?Match, -} - -class Card extends Component { - - props: Props - - state: State = { - staticMatch: null, - } - - renderView = (props: ContextRouter): ?React$Element => { - // Initialyze own props - if (!this.state.staticMatch && props.match) { - this.state.staticMatch = props.match - } - const ownProps = { - ...props, - ...this.state, - } - // Render view - const { render, children, component } = this.props - if (render) return render(ownProps) - else if (children && typeof children === 'function') return children(ownProps) - else if (component) return createElement(component, ownProps) - return null - } - - render(): React$Element { - const { path, exact, strict } = this.props - return ( - - {this.renderView} - - ) - } - -} +const Card = (props: Props): React$Element => ( + + {({ history, location, match }) => ( + + )} + +) export default Card diff --git a/modules/CardStack.js b/modules/CardStack.js index ec27523..9178874 100755 --- a/modules/CardStack.js +++ b/modules/CardStack.js @@ -2,11 +2,12 @@ /* eslint no-duplicate-imports: 0 */ /* eslint react/no-unused-prop-types: 0 */ -import React, { Component } from 'react' -import { BackAndroid } from 'react-native' -import { Route, matchPath } from 'react-router' +import { Component } from 'react' +import { BackHandler } from 'react-native' +import { matchPath } from 'react-router' import { StateUtils } from 'react-navigation' -import type { ContextRouter, Location } from 'react-router' +import type { ContextRouter, Location, HistoryAction } from 'react-router' +import isEqual from 'lodash.isequal' import type { CardsRendererProps, NavigationState, Card, CardProps } from './TypeDefinitions' import * as StackUtils from './StackUtils' @@ -20,25 +21,24 @@ type State = { cards: Array, } -type Props = { +type Props = ContextRouter & { // eslint-disable-next-line children?: Array>, render: (props: CardsRendererProps) => React$Element, } -// $FlowFixMe -type OwnProps = ContextRouter & Props +class CardStack extends Component { -class CardStack extends Component { - - props: OwnProps + props: Props state: State + unlistenHistory: Function + // Initialyze navigation state with initial history - constructor(props: OwnProps): void { + constructor(props: Props): void { super(props) // Build the card stack $FlowFixMe - const { children, history: { entries, index }, location } = props + const { children, history: { entries, index, location } } = props const cards = children && StackUtils.build(children) if (!cards) throw new Error('No cards found') // Get initial route of navigation state @@ -66,23 +66,24 @@ class CardStack extends Component { this.state = { navigationState, cards, location, historyIndex } } - // Listen hardware BackAndroid event + // Listen hardware BackHandler event componentDidMount(): void { - BackAndroid.addEventListener('hardwareBackPress', this.onNavigateBack) + const { history } = this.props + BackHandler.addEventListener('hardwareBackPress', this.onNavigateBack) + this.unlistenHistory = history.listen(this.onChangeHistory) } // Remove all listeners componentWillUnmount(): void { - BackAndroid.removeEventListener('hardwareBackPress', this.onNavigateBack) + BackHandler.removeEventListener('hardwareBackPress', this.onNavigateBack) + this.unlistenHistory() } - // Listen all history events + update card props - componentWillReceiveProps(nextProps: OwnProps): void { - // $FlowFixMe - const { children, history: { action, entries }, location } = nextProps - const { navigationState: { routes, index } } = this.state + // Listen all history events + onChangeHistory = (location: Location, action: HistoryAction): void => { + const { history: { entries, index: indexHistory } } = this.props + const { cards, navigationState: { routes, index } } = this.state // Re-build cards - const cards = children && StackUtils.build(children) // Get current card const currentRoute = routes[index] const currentCard = cards.find(({ key }) => key === currentRoute.routeName) @@ -99,9 +100,8 @@ class CardStack extends Component { switch (action) { case 'PUSH': { this.setState(state => ({ - cards, location, - historyIndex: nextProps.history.index, + historyIndex: indexHistory, navigationState: StateUtils.push( state.navigationState, { ...nextRoute, key }, @@ -111,17 +111,17 @@ class CardStack extends Component { } case 'POP': { if ( - this.props.history.index === undefined || - nextProps.history.index === undefined || + indexHistory === undefined || + indexHistory === undefined || entries === undefined ) { return } - const n = this.state.historyIndex - nextProps.history.index + const n = this.state.historyIndex - indexHistory if (n > 1) { this.setState(state => ({ location, - historyIndex: nextProps.history.index, + historyIndex: indexHistory, navigationState: StateUtils.reset( state.navigationState, state.navigationState.routes.slice( @@ -134,7 +134,7 @@ class CardStack extends Component { } else { this.setState(state => ({ location, - historyIndex: nextProps.history.index, + historyIndex: indexHistory, navigationState: StateUtils.pop(state.navigationState), })) } @@ -142,9 +142,8 @@ class CardStack extends Component { } case 'REPLACE': { this.setState(state => ({ - cards, location, - historyIndex: nextProps.history.index, + historyIndex: indexHistory, navigationState: StateUtils.replaceAtIndex( state.navigationState, state.navigationState.index, @@ -155,13 +154,22 @@ class CardStack extends Component { } default: } - } else { - this.setState({ - cards, - }) } } + shouldComponentUpdate(nextProps: Props, nextState: State): boolean { + return !isEqual( + this.state.navigationState.routes + .map(({ match }) => { + return match.url + }), + nextState.navigationState.routes + .map(({ match }) => { + return match.url + }), + ) + } + // Pop to previous scene (n-1) onNavigateBack = (): boolean => { if (this.state.navigationState.index > 0) { @@ -184,13 +192,4 @@ class CardStack extends Component { } -export default (props: Props) => ( - - {(ownProps: ContextRouter) => ( - - )} - -) +export default CardStack diff --git a/modules/DefaultRenderer.js b/modules/DefaultRenderer.js index 288b0f7..8319ab7 100644 --- a/modules/DefaultRenderer.js +++ b/modules/DefaultRenderer.js @@ -3,6 +3,8 @@ import React from 'react' import { CardStack, Transitioner } from 'react-navigation' +import type { NavigationTransitionProps } from 'react-navigation/src/TypeDefinition' +import type { NavigationProps, CardsRendererProps } from './TypeDefinitions' type SceneRendererProps = & CardsRendererProps @@ -54,7 +56,7 @@ class DefaultRenderer extends React.Component { const scene = sceneProps.scenes.find(({ route }) => { return route.routeName === routeName }) - // Return scene component + // Return scene component $FlowFixMe return this.props.renderScene({ ...this.props, ...sceneProps, @@ -71,7 +73,7 @@ class DefaultRenderer extends React.Component { getComponentForRouteName: routeName => this.getSceenComponent(routeName, ownProps), }} navigation={{ - goBack: this.props.onNavigateBack, + goBack: this.props.onNavigateBack, // $FlowFixMe state: this.props.navigationState, dispatch: (action) => { if (action.type === 'Navigation/BACK') { diff --git a/modules/Navigation.js b/modules/Navigation.js index 46630c1..d6a24ab 100644 --- a/modules/Navigation.js +++ b/modules/Navigation.js @@ -3,6 +3,8 @@ /* eslint react/no-children-prop: 0 */ import React, { Component } from 'react' +import { Route } from 'react-router' +import type { ContextRouter } from 'react-router' import type { NavigationProps, CardSubViewProps } from './TypeDefinitions' import CardStack from './CardStack' import DefaultRenderer from './DefaultRenderer' @@ -39,15 +41,22 @@ class Navigation extends Component { render(): React$Element { const { children, ...props } = this.props return ( - ( - ( + ( + + )} /> )} /> diff --git a/modules/SceneView.js b/modules/SceneView.js new file mode 100644 index 0000000..ee8b816 --- /dev/null +++ b/modules/SceneView.js @@ -0,0 +1,51 @@ +/* @flow */ + +import React from 'react' +import type { ContextRouter, Location } from 'react-router' +import type { CardProps } from './TypeDefinitions' + +type Props = ContextRouter & CardProps + +type State = { + location: Location, +} + +class SceneView extends React.Component { + + props: Props + state: State + + unlisten: Function + + constructor(props: Props) { + super(props) + this.state = { + location: props.location, + } + } + + componentDidMount(): void { + const { history } = this.props + this.unlisten = history.listen(this.onChangeHistory) + } + + componentWillUnmount(): void { + this.unlisten() + } + + onChangeHistory = (location: Location): void => { + this.setState({ location }) + } + + render(): ?React$Element { + const { render, children, component } = this.props + const ownProps = { ...this.props, ...this.state } + if (render) return render(ownProps) + else if (children && typeof children === 'function') return children(ownProps) + else if (component) return React.createElement(component, ownProps) + return null + } + +} + +export default SceneView diff --git a/modules/__tests__/Card-spec.js b/modules/__tests__/Card-spec.js index 04e7937..73563e2 100644 --- a/modules/__tests__/Card-spec.js +++ b/modules/__tests__/Card-spec.js @@ -23,24 +23,3 @@ it(' renders correctly', () => { const tree = component.toJSON() expect(tree).toMatchSnapshot() }) - -it(' renders correctly with staticMatch prop when route doesn\'t match', () => { - const history = createHistory({ - initialEntries: ['/foo/1'], - }) - const component = renderer.create( - - ( - {params.id} - )} - /> - , - ) - let tree = component.toJSON() - expect(tree).toMatchSnapshot() - history.push('/bar') - tree = component.toJSON() - expect(tree).toMatchSnapshot() -}) From 11a951523b6aa48ed24d0cb00f90e7ab620235f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 17 May 2017 11:14:57 +0200 Subject: [PATCH 03/50] chore(all): update dependencies --- .flowconfig | 7 +- package.json | 21 +- yarn.lock | 805 +++++++++++++++++++++++++++++++-------------------- 3 files changed, 507 insertions(+), 326 deletions(-) diff --git a/.flowconfig b/.flowconfig index c5c66c7..baafde9 100644 --- a/.flowconfig +++ b/.flowconfig @@ -38,11 +38,12 @@ suppress_type=$FlowIssue suppress_type=$FlowFixMe suppress_type=$FixMe -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-8]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-8]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(4[0-2]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(4[0-2]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy +suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError unsafe.enable_getters_and_setters=true [version] -^0.38.0 +^0.42.0 diff --git a/package.json b/package.json index 75dc69c..9c67d99 100644 --- a/package.json +++ b/package.json @@ -32,8 +32,9 @@ "react-router-native": "4.0.x" }, "dependencies": { - "react-native-tab-view": "0.0.57", - "react-navigation": "v1.0.0-beta.9" + "lodash.isequal": "^4.5.0", + "react-native-tab-view": "0.0.65", + "react-navigation": "1.0.0-beta.9" }, "devDependencies": { "babel-eslint": "7.1.1", @@ -46,13 +47,13 @@ "eslint-plugin-import": "2.2.0", "eslint-plugin-jsx-a11y": "4.0.0", "eslint-plugin-react": "6.10.0", - "flow-bin": "0.38", - "history": "4.6.0", - "jest": "19.0.2", - "react": "^15.4.2", - "react-native": "^0.42.3", - "react-router": "^4.0.0", - "react-router-native": "^4.0.0", - "react-test-renderer": "^15.4.2" + "flow-bin": "0.42.0", + "history": "4.6.1", + "jest": "20.0.1", + "react": "16.0.0-alpha.6", + "react-native": "0.44.0", + "react-router": "4.1.1", + "react-router-native": "4.1.1", + "react-test-renderer": "16.0.0-alpha.6" } } diff --git a/yarn.lock b/yarn.lock index 5e363ec..f32792d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -71,7 +71,7 @@ ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" -ansi-regex@^2.0.0: +ansi-regex@^2.0.0, ansi-regex@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -200,7 +200,7 @@ 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" -async@^1.4.0, async@^1.4.2: +async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -210,6 +210,10 @@ async@^2.0.1, async@^2.1.4: dependencies: lodash "^4.14.0" +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -314,6 +318,16 @@ babel-helper-function-name@^6.22.0, babel-helper-function-name@^6.23.0: babel-traverse "^6.23.0" babel-types "^6.23.0" +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babel-helper-get-function-arity@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" @@ -321,6 +335,13 @@ babel-helper-get-function-arity@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.22.0" +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + babel-helper-hoist-variables@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" @@ -343,6 +364,16 @@ babel-helper-regex@^6.22.0: babel-types "^6.22.0" lodash "^4.2.0" +babel-helper-remap-async-to-generator@^6.16.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babel-helper-replace-supers@^6.22.0, babel-helper-replace-supers@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.23.0.tgz#eeaf8ad9b58ec4337ca94223bacdca1f8d9b4bfd" @@ -369,13 +400,13 @@ babel-jest@18.0.0: babel-plugin-istanbul "^3.0.0" babel-preset-jest "^18.0.0" -babel-jest@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f" +babel-jest@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.1.tgz#9cbe9a15bbe3f1ca1b727dc8e45a4161771d3655" dependencies: babel-core "^6.0.0" babel-plugin-istanbul "^4.0.0" - babel-preset-jest "^19.0.0" + babel-preset-jest "^20.0.1" babel-messages@^6.23.0: version "6.23.0" @@ -416,9 +447,9 @@ babel-plugin-jest-hoist@^18.0.0: version "18.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-18.0.0.tgz#4150e70ecab560e6e7344adc849498072d34e12a" -babel-plugin-jest-hoist@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea" +babel-plugin-jest-hoist@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.1.tgz#1b9cc322cff704d3812d1bca8dccd12205eedfd5" babel-plugin-react-transform@2.0.2: version "2.0.2" @@ -426,7 +457,7 @@ babel-plugin-react-transform@2.0.2: dependencies: lodash "^4.6.1" -babel-plugin-syntax-async-functions@^6.5.0: +babel-plugin-syntax-async-functions@^6.5.0, babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -450,6 +481,14 @@ babel-plugin-syntax-trailing-function-commas@^6.20.0, babel-plugin-syntax-traili version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" +babel-plugin-transform-async-to-generator@6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" + dependencies: + babel-helper-remap-async-to-generator "^6.16.0" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.0.0" + babel-plugin-transform-class-properties@^6.5.0, babel-plugin-transform-class-properties@^6.6.0, babel-plugin-transform-class-properties@^6.8.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.23.0.tgz#187b747ee404399013563c993db038f34754ac3b" @@ -746,11 +785,11 @@ babel-preset-jest@^18.0.0: dependencies: babel-plugin-jest-hoist "^18.0.0" -babel-preset-jest@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396" +babel-preset-jest@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.1.tgz#8a9e23ce8a0f0c49835de53ed73ecf75dd6daa2e" dependencies: - babel-plugin-jest-hoist "^19.0.0" + babel-plugin-jest-hoist "^20.0.1" babel-preset-react-native@1.9.1, babel-preset-react-native@^1.9.1: version "1.9.1" @@ -798,7 +837,7 @@ babel-register@^6.18.0, babel-register@^6.24.0: mkdirp "^0.5.1" source-map-support "^0.4.2" -babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0: +babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" dependencies: @@ -815,6 +854,16 @@ babel-template@^6.16.0, babel-template@^6.22.0, babel-template@^6.23.0: babylon "^6.11.0" lodash "^4.2.0" +babel-template@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + lodash "^4.2.0" + babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.21.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: version "6.23.1" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48" @@ -829,6 +878,20 @@ babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.21.0, babel-tr invariant "^2.2.0" lodash "^4.2.0" +babel-traverse@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.22.0, babel-types@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" @@ -838,7 +901,16 @@ babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21 lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.14.1, babylon@^6.15.0: +babel-types@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.16.1: version "6.16.1" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" @@ -850,6 +922,10 @@ base64-js@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" +base64-js@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" + base64-js@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" @@ -880,6 +956,10 @@ beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" +big-integer@^1.6.7: + version "1.6.22" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.22.tgz#487c95fce886022ea48ff5f19e388932df46dd2e" + body-parser@~1.13.3: version "1.13.3" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.13.3.tgz#c08cf330c3358e151016a05746f13f029c97fa97" @@ -901,15 +981,17 @@ boom@2.x.x: dependencies: hoek "2.x.x" -bplist-creator@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.4.tgz#4ac0496782e127a85c1d2026a4f5eb22a7aff991" +bplist-creator@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" dependencies: - stream-buffers "~0.2.3" + stream-buffers "~2.2.0" -bplist-parser@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.0.6.tgz#38da3471817df9d44ab3892e27707bbbd75a11b9" +bplist-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" + dependencies: + big-integer "^1.6.7" brace-expansion@^1.0.0: version "1.1.6" @@ -932,18 +1014,12 @@ browser-resolve@^1.11.2: dependencies: resolve "1.1.7" -bser@1.0.2: +bser@1.0.2, bser@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" dependencies: node-int64 "^0.4.0" -bser@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.3.tgz#d63da19ee17330a0e260d2a34422b21a89520317" - dependencies: - node-int64 "^0.4.0" - bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" @@ -1106,7 +1182,7 @@ 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.4.6: +concat-stream@^1.4.6, concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -1171,7 +1247,7 @@ content-type@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" -convert-source-map@^1.1.0: +convert-source-map@^1.1.0, convert-source-map@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3" @@ -1278,7 +1354,7 @@ debug@2.3.3: dependencies: ms "0.7.2" -debug@^2.1.1, debug@^2.2.0: +debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" dependencies: @@ -1347,7 +1423,7 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -diff@^3.0.0: +diff@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" @@ -1732,7 +1808,7 @@ fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" -fb-watchman@^1.8.0, fb-watchman@^1.9.0: +fb-watchman@^1.8.0: version "1.9.2" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" dependencies: @@ -1757,7 +1833,7 @@ fbjs-scripts@^0.7.0: semver "^5.1.0" through2 "^2.0.0" -fbjs@^0.8.4, fbjs@^0.8.5, fbjs@^0.8.9: +fbjs@^0.8.5, fbjs@^0.8.9, fbjs@~0.8.9: version "0.8.9" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.9.tgz#180247fbd347dcc9004517b904f865400a0c8f14" dependencies: @@ -1835,9 +1911,9 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" -flow-bin@0.38: - version "0.38.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.38.0.tgz#3ae096d401c969cc8b5798253fb82381e2d0237a" +flow-bin@0.42.0: + version "0.42.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.42.0.tgz#05dd754b6b052de7b150f9210e2160746961e3cf" for-in@^1.0.1: version "1.0.2" @@ -1857,7 +1933,7 @@ forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@~2.1.1: +form-data@^2.1.1, form-data@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" dependencies: @@ -1869,15 +1945,13 @@ fresh@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" -fs-extra@^0.26.2: - version "0.26.7" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9" +fs-extra@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" dependencies: graceful-fs "^4.1.2" jsonfile "^2.1.0" klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" fs.realpath@^1.0.0: version "1.0.0" @@ -1930,17 +2004,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: @@ -2076,9 +2140,9 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" -history@4.6.0, history@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/history/-/history-4.6.0.tgz#2e09f7b173333040044c9fede373ad29bc2e2186" +history@4.6.1, history@^4.6.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.6.1.tgz#911cf8eb65728555a94f2b12780a0c531a14d2fd" dependencies: invariant "^2.2.1" loose-envify "^1.2.0" @@ -2215,7 +2279,7 @@ 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-ci@^1.0.9: +is-ci@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" dependencies: @@ -2369,33 +2433,37 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-api@^1.1.0-alpha.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.1.tgz#d36e2f1560d1a43ce304c4ff7338182de61c8f73" +istanbul-api@^1.1.1: + version "1.1.8" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e" dependencies: async "^2.1.4" fileset "^2.0.2" - istanbul-lib-coverage "^1.0.0" - istanbul-lib-hook "^1.0.0" - istanbul-lib-instrument "^1.3.0" - istanbul-lib-report "^1.0.0-alpha.3" - istanbul-lib-source-maps "^1.1.0" - istanbul-reports "^1.0.0" + istanbul-lib-coverage "^1.1.0" + istanbul-lib-hook "^1.0.6" + istanbul-lib-instrument "^1.7.1" + istanbul-lib-report "^1.1.0" + istanbul-lib-source-maps "^1.2.0" + istanbul-reports "^1.1.0" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0: +istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.1.tgz#f263efb519c051c5f1f3343034fc40e7b43ff212" -istanbul-lib-hook@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0.tgz#fc5367ee27f59268e8f060b0c7aaf051d9c425c5" +istanbul-lib-coverage@^1.0.0-alpha.0, istanbul-lib-coverage@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" + +istanbul-lib-hook@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.3.0, istanbul-lib-instrument@^1.4.2: +istanbul-lib-instrument@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.4.2.tgz#0e2fdfac93c1dabf2e31578637dc78a19089f43e" dependencies: @@ -2407,15 +2475,25 @@ istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.3.0, istanbul-lib-ins istanbul-lib-coverage "^1.0.0" semver "^5.3.0" -istanbul-lib-report@^1.0.0-alpha.3: - version "1.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz#32d5f6ec7f33ca3a602209e278b2e6ff143498af" +istanbul-lib-instrument@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.13.0" + istanbul-lib-coverage "^1.1.0" + semver "^5.3.0" + +istanbul-lib-report@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770" dependencies: - async "^1.4.2" - istanbul-lib-coverage "^1.0.0-alpha" + istanbul-lib-coverage "^1.1.0" mkdirp "^0.5.1" path-parse "^1.0.5" - rimraf "^2.4.3" supports-color "^3.1.2" istanbul-lib-source-maps@^1.1.0: @@ -2427,100 +2505,105 @@ istanbul-lib-source-maps@^1.1.0: rimraf "^2.4.4" source-map "^0.5.3" -istanbul-reports@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.1.tgz#9a17176bc4a6cbebdae52b2f15961d52fa623fbc" +istanbul-lib-source-maps@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e" + dependencies: + debug "^2.6.3" + istanbul-lib-coverage "^1.1.0" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66" dependencies: handlebars "^4.0.3" -jest-changed-files@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-19.0.2.tgz#16c54c84c3270be408e06d2e8af3f3e37a885824" +jest-changed-files@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.1.tgz#ba9bd42c3fddb1b7c4ae40065199b44a2335e152" -jest-cli@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-19.0.2.tgz#cc3620b62acac5f2d93a548cb6ef697d4ec85443" +jest-cli@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.1.tgz#86ca0bc2e47215ad8e7dc85455c0210f86648502" dependencies: ansi-escapes "^1.4.0" callsites "^2.0.0" - chalk "^1.1.1" - graceful-fs "^4.1.6" - is-ci "^1.0.9" - istanbul-api "^1.1.0-alpha.1" - istanbul-lib-coverage "^1.0.0" - istanbul-lib-instrument "^1.1.1" - jest-changed-files "^19.0.2" - jest-config "^19.0.2" - jest-environment-jsdom "^19.0.2" - jest-haste-map "^19.0.0" - jest-jasmine2 "^19.0.2" - jest-message-util "^19.0.0" - jest-regex-util "^19.0.0" - jest-resolve-dependencies "^19.0.0" - jest-runtime "^19.0.2" - jest-snapshot "^19.0.2" - jest-util "^19.0.2" + chalk "^1.1.3" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^20.0.1" + jest-config "^20.0.1" + jest-docblock "^20.0.1" + jest-environment-jsdom "^20.0.1" + jest-haste-map "^20.0.1" + jest-jasmine2 "^20.0.1" + jest-message-util "^20.0.1" + jest-regex-util "^20.0.1" + jest-resolve-dependencies "^20.0.1" + jest-runtime "^20.0.1" + jest-snapshot "^20.0.1" + jest-util "^20.0.1" micromatch "^2.3.11" - node-notifier "^5.0.1" + node-notifier "^5.0.2" + pify "^2.3.0" slash "^1.0.0" string-length "^1.0.1" throat "^3.0.0" - which "^1.1.1" + which "^1.2.12" worker-farm "^1.3.1" - yargs "^6.3.0" + yargs "^7.0.2" -jest-config@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-19.0.2.tgz#1b9bd2db0ddd16df61c2b10a54009e1768da6411" +jest-config@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.1.tgz#c6934f585c3e1775c96133efb302f986c3909ad8" dependencies: - chalk "^1.1.1" - jest-environment-jsdom "^19.0.2" - jest-environment-node "^19.0.2" - jest-jasmine2 "^19.0.2" - jest-regex-util "^19.0.0" - jest-resolve "^19.0.2" - jest-validate "^19.0.2" - pretty-format "^19.0.0" - -jest-diff@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-19.0.0.tgz#d1563cfc56c8b60232988fbc05d4d16ed90f063c" + chalk "^1.1.3" + glob "^7.1.1" + jest-environment-jsdom "^20.0.1" + jest-environment-node "^20.0.1" + jest-jasmine2 "^20.0.1" + jest-matcher-utils "^20.0.1" + jest-regex-util "^20.0.1" + jest-resolve "^20.0.1" + jest-validate "^20.0.1" + pretty-format "^20.0.1" + +jest-diff@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.1.tgz#2567c80c324243328321386f8871a28ec9d350ac" dependencies: chalk "^1.1.3" - diff "^3.0.0" - jest-matcher-utils "^19.0.0" - pretty-format "^19.0.0" + diff "^3.2.0" + jest-matcher-utils "^20.0.1" + pretty-format "^20.0.1" -jest-environment-jsdom@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-19.0.2.tgz#ceda859c4a4b94ab35e4de7dab54b926f293e4a3" - dependencies: - jest-mock "^19.0.0" - jest-util "^19.0.2" - jsdom "^9.11.0" +jest-docblock@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.1.tgz#055e0bbcb76798198479901f92d2733bf619f854" -jest-environment-node@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-19.0.2.tgz#6e84079db87ed21d0c05e1f9669f207b116fe99b" +jest-environment-jsdom@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.1.tgz#2d29f81368987d387c70ce4f500c6aa560f9b4f7" dependencies: - jest-mock "^19.0.0" - jest-util "^19.0.2" - -jest-file-exists@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-19.0.0.tgz#cca2e587a11ec92e24cfeab3f8a94d657f3fceb8" + jest-mock "^20.0.1" + jest-util "^20.0.1" + jsdom "^9.12.0" -jest-haste-map@18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-18.0.0.tgz#707d3b5ae3bcbda971c39e8b911d20ad8502c748" +jest-environment-node@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.1.tgz#75ab5358072ee1efebc54f43474357d7b3d674c7" dependencies: - fb-watchman "^1.9.0" - graceful-fs "^4.1.6" - multimatch "^2.1.0" - sane "~1.4.1" - worker-farm "^1.3.1" + jest-mock "^20.0.1" + jest-util "^20.0.1" -jest-haste-map@^19.0.0: +jest-haste-map@19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.0.tgz#adde00b62b1fe04432a104b3254fc5004514b55e" dependencies: @@ -2530,120 +2613,134 @@ jest-haste-map@^19.0.0: sane "~1.5.0" worker-farm "^1.3.1" -jest-jasmine2@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-19.0.2.tgz#167991ac825981fb1a800af126e83afcca832c73" +jest-haste-map@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.1.tgz#e6ba4db99ab512e7c081a5b0a0af731d0e193d56" dependencies: - graceful-fs "^4.1.6" - jest-matcher-utils "^19.0.0" - jest-matchers "^19.0.0" - jest-message-util "^19.0.0" - jest-snapshot "^19.0.2" + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^20.0.1" + micromatch "^2.3.11" + sane "~1.6.0" + worker-farm "^1.3.1" -jest-matcher-utils@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz#5ecd9b63565d2b001f61fbf7ec4c7f537964564d" +jest-jasmine2@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.1.tgz#675772b1fd32ad74e92e8ae8282f8ea71d1de168" dependencies: chalk "^1.1.3" - pretty-format "^19.0.0" + graceful-fs "^4.1.11" + jest-diff "^20.0.1" + jest-matcher-utils "^20.0.1" + jest-matchers "^20.0.1" + jest-message-util "^20.0.1" + jest-snapshot "^20.0.1" + once "^1.4.0" + p-map "^1.1.1" -jest-matchers@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-19.0.0.tgz#c74ecc6ebfec06f384767ba4d6fa4a42d6755754" +jest-matcher-utils@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.1.tgz#31aef67f59535af3c2271a3a3685db604dbd1622" dependencies: - jest-diff "^19.0.0" - jest-matcher-utils "^19.0.0" - jest-message-util "^19.0.0" - jest-regex-util "^19.0.0" + chalk "^1.1.3" + pretty-format "^20.0.1" -jest-message-util@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-19.0.0.tgz#721796b89c0e4d761606f9ba8cb828a3b6246416" +jest-matchers@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.1.tgz#053b7654ce60129268f39992886e987a5201bb90" dependencies: - chalk "^1.1.1" + jest-diff "^20.0.1" + jest-matcher-utils "^20.0.1" + jest-message-util "^20.0.1" + jest-regex-util "^20.0.1" + +jest-message-util@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.1.tgz#ac21cb055a6a5786b7f127ac7e705df5ffb1c335" + dependencies: + chalk "^1.1.3" micromatch "^2.3.11" + slash "^1.0.0" -jest-mock@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-19.0.0.tgz#67038641e9607ab2ce08ec4a8cb83aabbc899d01" +jest-mock@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.1.tgz#f4cca2e87e441b66fabe4ead6a6d61773ec0773a" -jest-regex-util@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-19.0.0.tgz#b7754587112aede1456510bb1f6afe74ef598691" +jest-regex-util@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.1.tgz#ecbcca8fbe4e217bca7f6f42a9b831d051224dc4" -jest-resolve-dependencies@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-19.0.0.tgz#a741ad1fa094140e64ecf2642a504f834ece22ee" +jest-resolve-dependencies@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.1.tgz#38fc012191775b0b277fabebb37aa8282e26846f" dependencies: - jest-file-exists "^19.0.0" + jest-regex-util "^20.0.1" -jest-resolve@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-19.0.2.tgz#5793575de4f07aec32f7d7ff0c6c181963eefb3c" +jest-resolve@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.1.tgz#cace553663f25c703dc977a4ce176e29eda92772" dependencies: browser-resolve "^1.11.2" - jest-haste-map "^19.0.0" - resolve "^1.2.0" + is-builtin-module "^1.0.0" + resolve "^1.3.2" -jest-runtime@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-19.0.2.tgz#d9a43e72de416d27d196fd9c7940d98fe6685407" +jest-runtime@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.1.tgz#384f9298b8e8a177870c6d9ad0023db10ddcaedc" dependencies: babel-core "^6.0.0" - babel-jest "^19.0.0" + babel-jest "^20.0.1" babel-plugin-istanbul "^4.0.0" chalk "^1.1.3" - graceful-fs "^4.1.6" - jest-config "^19.0.2" - jest-file-exists "^19.0.0" - jest-haste-map "^19.0.0" - jest-regex-util "^19.0.0" - jest-resolve "^19.0.2" - jest-util "^19.0.2" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^20.0.1" + jest-haste-map "^20.0.1" + jest-regex-util "^20.0.1" + jest-resolve "^20.0.1" + jest-util "^20.0.1" json-stable-stringify "^1.0.1" micromatch "^2.3.11" strip-bom "3.0.0" - yargs "^6.3.0" + yargs "^7.0.2" -jest-snapshot@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-19.0.2.tgz#9c1b216214f7187c38bfd5c70b1efab16b0ff50b" +jest-snapshot@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.1.tgz#3704c599705042f20ec7c95ba76a4524c744dfac" dependencies: chalk "^1.1.3" - jest-diff "^19.0.0" - jest-file-exists "^19.0.0" - jest-matcher-utils "^19.0.0" - jest-util "^19.0.2" + jest-diff "^20.0.1" + jest-matcher-utils "^20.0.1" + jest-util "^20.0.1" natural-compare "^1.4.0" - pretty-format "^19.0.0" + pretty-format "^20.0.1" -jest-util@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-19.0.2.tgz#e0a0232a2ab9e6b2b53668bdb3534c2b5977ed41" +jest-util@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.1.tgz#a3e7afb67110b2c3ac77b82e9a51ca57f4ff72a1" dependencies: - chalk "^1.1.1" - graceful-fs "^4.1.6" - jest-file-exists "^19.0.0" - jest-message-util "^19.0.0" - jest-mock "^19.0.0" - jest-validate "^19.0.2" - leven "^2.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-message-util "^20.0.1" + jest-mock "^20.0.1" + jest-validate "^20.0.1" + leven "^2.1.0" mkdirp "^0.5.1" -jest-validate@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.2.tgz#dc534df5f1278d5b63df32b14241d4dbf7244c0c" +jest-validate@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.1.tgz#a236c29e3c29e9b92a1e5da211a732f0238da928" dependencies: - chalk "^1.1.1" - jest-matcher-utils "^19.0.0" - leven "^2.0.0" - pretty-format "^19.0.0" + chalk "^1.1.3" + jest-matcher-utils "^20.0.1" + leven "^2.1.0" + pretty-format "^20.0.1" -jest@19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-19.0.2.tgz#b794faaf8ff461e7388f28beef559a54f20b2c10" +jest@20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.1.tgz#4e268159ccc3b659966939de817c75bfe9e0157d" dependencies: - jest-cli "^19.0.2" + jest-cli "^20.0.1" jodid25519@^1.0.0: version "1.0.2" @@ -2675,7 +2772,7 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -jsdom@^9.11.0: +jsdom@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" dependencies: @@ -2784,7 +2881,7 @@ left-pad@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.1.3.tgz#612f61c033f3a9e08e939f1caebeea41b6f3199a" -leven@^2.0.0: +leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -2866,6 +2963,10 @@ lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -2993,13 +3094,13 @@ mime-db@~1.23.0: version "1.23.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" -mime-types@2.1.11, mime-types@~2.1.7, mime-types@~2.1.9: +mime-types@2.1.11: version "2.1.11" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" dependencies: mime-db "~1.23.0" -mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.6: +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: version "2.1.14" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" dependencies: @@ -3015,7 +3116,7 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: +minimatch@^3.0.2, minimatch@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: @@ -3057,15 +3158,6 @@ ms@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" -multimatch@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" - dependencies: - array-differ "^1.0.0" - array-union "^1.0.1" - arrify "^1.0.0" - minimatch "^3.0.0" - multiparty@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-3.3.2.tgz#35de6804dc19643e5249f3d3e3bdc6c8ce301d3f" @@ -3106,7 +3198,7 @@ node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" -node-notifier@^5.0.1: +node-notifier@^5.0.2: version "5.1.2" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" dependencies: @@ -3115,10 +3207,6 @@ node-notifier@^5.0.1: shellwords "^0.1.0" which "^1.2.12" -node-uuid@1.4.7: - version "1.4.7" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" - normalize-package-data@^2.3.2: version "2.3.6" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" @@ -3251,6 +3339,10 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -3314,15 +3406,15 @@ pause@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74" -pegjs@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.9.0.tgz#f6aefa2e3ce56169208e52179dfe41f89141a369" +pegjs@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" -pify@^2.0.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -3348,7 +3440,15 @@ pkg-up@^1.0.0: dependencies: find-up "^1.0.0" -plist@1.2.0, plist@^1.2.0: +plist@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" + dependencies: + base64-js "1.1.2" + xmlbuilder "8.2.2" + xmldom "0.1.x" + +plist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/plist/-/plist-1.2.0.tgz#084b5093ddc92506e259f874b8d9b1afb8c79593" dependencies: @@ -3369,12 +3469,17 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -pretty-format@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84" +pretty-format@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.1.tgz#ba95329771907c189643dd251e244061ff642350" dependencies: + ansi-regex "^2.1.1" ansi-styles "^3.0.0" +pretty-format@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d" + private@^0.1.6: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" @@ -3397,7 +3502,7 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.5.8: +prop-types@^15.5.4, prop-types@^15.5.8: version "15.5.8" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394" dependencies: @@ -3454,6 +3559,13 @@ react-deep-force-update@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.0.1.tgz#f911b5be1d2a6fe387507dd6e9a767aa2924b4c7" +react-devtools-core@^2.0.8: + version "2.1.9" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-2.1.9.tgz#825e0582b7f8587cbf56bb5ef1ea94d8b158543e" + dependencies: + shell-quote "^1.6.1" + ws "^2.0.3" + react-native-dismiss-keyboard@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/react-native-dismiss-keyboard/-/react-native-dismiss-keyboard-1.0.0.tgz#32886242b3f2317e121f3aeb9b0a585e2b879b49" @@ -3470,9 +3582,11 @@ react-native-drawer-layout@1.2.0: dependencies: react-native-dismiss-keyboard "1.0.0" -react-native-tab-view@0.0.57: - version "0.0.57" - resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-0.0.57.tgz#715e2ea4100fa50168e134df3947dd76ebd55743" +react-native-tab-view@0.0.65: + version "0.0.65" + resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-0.0.65.tgz#b685ea3081ff7c96486cd997361026c407302c59" + dependencies: + prop-types "^15.5.8" react-native-tab-view@^0.0.61: version "0.0.61" @@ -3480,9 +3594,9 @@ react-native-tab-view@^0.0.61: dependencies: prop-types "^15.5.8" -react-native@^0.42.3: - version "0.42.3" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.42.3.tgz#450c8a03a5e3e991a08a426f22776dd8feb80b26" +react-native@0.44.0: + version "0.44.0" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.44.0.tgz#06427a30053f2d555c60fe0b9afcc6c778db09de" dependencies: absolute-path "^0.0.0" art "^0.10.0" @@ -3491,6 +3605,7 @@ react-native@^0.42.3: babel-generator "^6.21.0" babel-plugin-external-helpers "^6.18.0" babel-plugin-syntax-trailing-function-commas "^6.20.0" + babel-plugin-transform-async-to-generator "6.16.0" babel-plugin-transform-flow-strip-types "^6.21.0" babel-plugin-transform-object-rest-spread "^6.20.2" babel-polyfill "^6.20.0" @@ -3501,26 +3616,28 @@ react-native@^0.42.3: babel-runtime "^6.20.0" babel-traverse "^6.21.0" babel-types "^6.21.0" - babylon "^6.14.1" + babylon "^6.16.1" base64-js "^1.1.2" bser "^1.0.2" chalk "^1.1.1" commander "^2.9.0" + concat-stream "^1.6.0" connect "^2.8.3" core-js "^2.2.2" debug "^2.2.0" denodeify "^1.2.1" event-target-shim "^1.0.5" - fbjs "^0.8.5" + fbjs "~0.8.9" fbjs-scripts "^0.7.0" - fs-extra "^0.26.2" - glob "^5.0.15" + form-data "^2.1.1" + fs-extra "^1.0.0" + glob "^7.1.1" graceful-fs "^4.1.3" image-size "^0.3.5" immutable "~3.7.6" imurmurhash "^0.1.4" inquirer "^0.12.0" - jest-haste-map "18.0.0" + jest-haste-map "19.0.0" joi "^6.6.1" json-stable-stringify "^1.0.1" json5 "^0.4.0" @@ -3535,8 +3652,10 @@ react-native@^0.42.3: opn "^3.0.2" optimist "^0.6.1" plist "^1.2.0" + pretty-format "^4.2.1" promise "^7.1.1" react-clone-referenced-element "^1.0.1" + react-devtools-core "^2.0.8" react-timer-mixin "^0.13.2" react-transform-hmr "^1.0.4" rebound "^0.0.13" @@ -3550,17 +3669,18 @@ react-native@^0.42.3: stacktrace-parser "^0.1.3" temp "0.8.3" throat "^3.0.0" - uglify-js "^2.6.2" + uglify-js "2.7.5" whatwg-fetch "^1.0.0" wordwrap "^1.0.0" worker-farm "^1.3.1" write-file-atomic "^1.2.0" ws "^1.1.0" - xcode "^0.8.9" + xcode "^0.9.1" xmldoc "^0.4.0" + xpipe "^1.0.5" yargs "^6.4.0" -react-navigation@v1.0.0-beta.9: +react-navigation@1.0.0-beta.9: version "1.0.0-beta.9" resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-1.0.0-beta.9.tgz#9fb1f8e4d15cee70cc8b5d58719a986ca443664d" dependencies: @@ -3579,27 +3699,30 @@ react-proxy@^1.1.7: lodash "^4.6.1" react-deep-force-update "^1.0.0" -react-router-native@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/react-router-native/-/react-router-native-4.0.0.tgz#c93df4fc7dbca8cadf245b12d820fe1c51b8a7cb" +react-router-native@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/react-router-native/-/react-router-native-4.1.1.tgz#9f8385cd81cb4c1897b751e35563440c9054a07b" dependencies: - react-router "^4.0.0" + prop-types "^15.5.4" + react-router "^4.1.1" -react-router@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.0.0.tgz#6532075231f0bb5077c2005c1d417ad6165b3997" +react-router@4.1.1, react-router@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.1.1.tgz#d448f3b7c1b429a6fbb03395099949c606b1fe95" dependencies: history "^4.6.0" + hoist-non-react-statics "^1.2.0" invariant "^2.2.2" loose-envify "^1.3.1" path-to-regexp "^1.5.3" + prop-types "^15.5.4" warning "^3.0.0" -react-test-renderer@^15.4.2: - version "15.4.2" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-15.4.2.tgz#27e1dff5d26d0e830f99614c487622bc831416f3" +react-test-renderer@16.0.0-alpha.6: + version "16.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.0.0-alpha.6.tgz#c032def0dc8319cee39caa4e4373a60019cb3786" dependencies: - fbjs "^0.8.4" + fbjs "^0.8.9" object-assign "^4.1.0" react-timer-mixin@^0.13.2: @@ -3613,11 +3736,11 @@ react-transform-hmr@^1.0.4: global "^4.3.0" react-proxy "^1.1.7" -react@^15.4.2: - version "15.4.2" - resolved "https://registry.yarnpkg.com/react/-/react-15.4.2.tgz#41f7991b26185392ba9bae96c8889e7e018397ef" +react@16.0.0-alpha.6: + version "16.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/react/-/react-16.0.0-alpha.6.tgz#2ccb1afb4425ccc12f78a123a666f2e4c141adb9" dependencies: - fbjs "^0.8.4" + fbjs "^0.8.9" loose-envify "^1.1.0" object-assign "^4.1.0" @@ -3792,7 +3915,7 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.2.0: +resolve@^1.1.6, resolve@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" dependencies: @@ -3818,7 +3941,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.4: +rimraf@^2.2.8, rimraf@^2.4.4, rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: @@ -3842,7 +3965,7 @@ rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" -safe-buffer@^5.0.1: +safe-buffer@^5.0.1, safe-buffer@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" @@ -3869,6 +3992,18 @@ sane@~1.5.0: walker "~1.0.5" watch "~0.10.0" +sane@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + sax@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" @@ -3935,7 +4070,7 @@ setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" -shell-quote@1.6.1: +shell-quote@1.6.1, shell-quote@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" dependencies: @@ -3956,13 +4091,13 @@ shellwords@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" -simple-plist@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.1.4.tgz#10eb51b47e33c556eb8ec46d5ee64d64e717db5d" +simple-plist@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" dependencies: - bplist-creator "0.0.4" - bplist-parser "0.0.6" - plist "1.2.0" + bplist-creator "0.0.7" + bplist-parser "0.1.1" + plist "2.0.1" slash@^1.0.0: version "1.0.0" @@ -4053,9 +4188,9 @@ statuses@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz#dded45cc18256d51ed40aec142489d5c61026d28" -stream-buffers@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-0.2.6.tgz#181c08d5bb3690045f69401b9ae6a7a0cf3313fc" +stream-buffers@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" stream-counter@~0.2.0: version "0.2.0" @@ -4254,10 +4389,11 @@ ua-parser-js@^0.7.9: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -uglify-js@^2.6, uglify-js@^2.6.2: - version "2.8.14" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.14.tgz#25b15d1af39b21752ee33703adbf432e8bc8f77d" +uglify-js@2.7.5, uglify-js@^2.6: + version "2.7.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" dependencies: + async "~0.2.6" source-map "~0.5.1" uglify-to-browserify "~1.0.0" yargs "~3.10.0" @@ -4282,6 +4418,10 @@ ultron@1.0.x: version "1.0.2" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" +ultron@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -4300,7 +4440,7 @@ utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" -uuid@^3.0.0: +uuid@3.0.1, uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" @@ -4386,7 +4526,7 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@^1.1.1, which@^1.2.12, which@^1.2.9: +which@^1.2.12, which@^1.2.9: version "1.2.12" resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" dependencies: @@ -4447,13 +4587,20 @@ ws@^1.1.0: options ">=0.0.5" ultron "1.0.x" -xcode@^0.8.9: - version "0.8.9" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-0.8.9.tgz#ec6765f70e9dccccc9f6e9a5b9b4e7e814b4cf35" +ws@^2.0.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" + dependencies: + safe-buffer "~5.0.1" + ultron "~1.1.0" + +xcode@^0.9.1: + version "0.9.3" + resolved "https://registry.yarnpkg.com/xcode/-/xcode-0.9.3.tgz#910a89c16aee6cc0b42ca805a6d0b4cf87211cf3" dependencies: - node-uuid "1.4.7" - pegjs "0.9.0" - simple-plist "0.1.4" + pegjs "^0.10.0" + simple-plist "^0.2.1" + uuid "3.0.1" xml-name-validator@^2.0.1: version "2.0.1" @@ -4465,6 +4612,10 @@ xmlbuilder@4.0.0: dependencies: lodash "^3.5.0" +xmlbuilder@8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" + xmldoc@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888" @@ -4475,6 +4626,10 @@ xmldom@0.1.x: version "0.1.27" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" +xpipe@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" + "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -4493,7 +4648,13 @@ yargs-parser@^4.2.0: dependencies: camelcase "^3.0.0" -yargs@^6.3.0, yargs@^6.4.0: +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + +yargs@^6.4.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" dependencies: @@ -4511,6 +4672,24 @@ yargs@^6.3.0, yargs@^6.4.0: y18n "^3.2.1" yargs-parser "^4.2.0" +yargs@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" From acb33ce3c1ff82119759b2b4321345cd8e342174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 17 May 2017 11:18:12 +0200 Subject: [PATCH 04/50] chore(all): update peer dependencies --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9c67d99..88989bc 100644 --- a/package.json +++ b/package.json @@ -28,8 +28,8 @@ "peerDependencies": { "react": "*", "react-native": "*", - "react-router": "4.0.x", - "react-router-native": "4.0.x" + "react-router": "4.1.x", + "react-router-native": "4.1.x" }, "dependencies": { "lodash.isequal": "^4.5.0", From 4bf70dcfe00a4789c76d67a35447d54533cdc762 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 17 May 2017 11:25:36 +0200 Subject: [PATCH 05/50] chore(examples): update Huge app --- examples/Basic/android/keystores/BUCK | 12 +- examples/Huge/.babelrc | 4 +- examples/Huge/.flowconfig | 47 + examples/Huge/.gitignore | 2 +- examples/Huge/android/app/BUCK | 53 +- examples/Huge/android/app/build.gradle | 2 +- examples/Huge/android/app/proguard-rules.pro | 4 + .../android/app/src/main/AndroidManifest.xml | 3 +- .../main/java/com/huge/MainApplication.java | 2 - examples/Huge/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- examples/Huge/android/keystores/BUCK | 12 +- .../Huge/ios/Huge.xcodeproj/project.pbxproj | 12 +- examples/Huge/ios/Huge/Info.plist | 2 + examples/Huge/ios/HugeTests/HugeTests.m | 2 +- examples/Huge/package.json | 39 +- .../Huge/src/app/components/Modal/index.js | 65 - .../Huge/src/app/components/Modal/styles.js | 49 - .../modules/Feed/components/Article/index.js | 9 +- examples/Huge/yarn.lock | 3939 +++++++++++++++++ 20 files changed, 4075 insertions(+), 187 deletions(-) create mode 100644 examples/Huge/.flowconfig delete mode 100644 examples/Huge/src/app/components/Modal/index.js delete mode 100644 examples/Huge/src/app/components/Modal/styles.js create mode 100644 examples/Huge/yarn.lock diff --git a/examples/Basic/android/keystores/BUCK b/examples/Basic/android/keystores/BUCK index 15da20e..88e4c31 100644 --- a/examples/Basic/android/keystores/BUCK +++ b/examples/Basic/android/keystores/BUCK @@ -1,8 +1,8 @@ keystore( - name = 'debug', - store = 'debug.keystore', - properties = 'debug.keystore.properties', - visibility = [ - 'PUBLIC', - ], + name = "debug", + properties = "debug.keystore.properties", + store = "debug.keystore", + visibility = [ + "PUBLIC", + ], ) diff --git a/examples/Huge/.babelrc b/examples/Huge/.babelrc index 8df53fe..a9ce136 100644 --- a/examples/Huge/.babelrc +++ b/examples/Huge/.babelrc @@ -1,3 +1,3 @@ { -"presets": ["react-native"] -} \ No newline at end of file + "presets": ["react-native"] +} diff --git a/examples/Huge/.flowconfig b/examples/Huge/.flowconfig new file mode 100644 index 0000000..a76425e --- /dev/null +++ b/examples/Huge/.flowconfig @@ -0,0 +1,47 @@ +[ignore] +; We fork some components by platform +.*/*[.]android.js + +; Ignore "BUCK" generated dirs +/\.buckd/ + +; Ignore unexpected extra "@providesModule" +.*/node_modules/.*/node_modules/fbjs/.* + +; Ignore duplicate module providers +; For RN Apps installed via npm, "Libraries" folder is inside +; "node_modules/react-native" but in the source repo it is in the root +.*/Libraries/react-native/React.js +.*/Libraries/react-native/ReactNative.js + +[include] + +[libs] +node_modules/react-native/Libraries/react-native/react-native-interface.js +node_modules/react-native/flow +flow/ + +[options] +emoji=true + +module.system=haste + +experimental.strict_type_args=true + +munge_underscores=true + +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\|pdf\)$' -> 'RelativeImageStub' + +suppress_type=$FlowIssue +suppress_type=$FlowFixMe +suppress_type=$FixMe + +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(4[0-2]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(4[0-2]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy +suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError + +unsafe.enable_getters_and_setters=true + +[version] +^0.42.0 diff --git a/examples/Huge/.gitignore b/examples/Huge/.gitignore index fc13f16..10be197 100644 --- a/examples/Huge/.gitignore +++ b/examples/Huge/.gitignore @@ -34,11 +34,11 @@ local.properties # node_modules/ npm-debug.log +yarn-error.log # BUCK buck-out/ \.buckd/ -android/app/libs *.keystore # fastlane diff --git a/examples/Huge/android/app/BUCK b/examples/Huge/android/app/BUCK index 96c39a1..dba4a6b 100644 --- a/examples/Huge/android/app/BUCK +++ b/examples/Huge/android/app/BUCK @@ -1,5 +1,3 @@ -import re - # To learn about Buck see [Docs](https://buckbuild.com/). # To run your application with Buck: # - install Buck @@ -11,8 +9,9 @@ import re # lib_deps = [] + for jarfile in glob(['libs/*.jar']): - name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile) + name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')] lib_deps.append(':' + name) prebuilt_jar( name = name, @@ -20,7 +19,7 @@ for jarfile in glob(['libs/*.jar']): ) for aarfile in glob(['libs/*.aar']): - name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile) + name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')] lib_deps.append(':' + name) android_prebuilt_aar( name = name, @@ -28,39 +27,39 @@ for aarfile in glob(['libs/*.aar']): ) android_library( - name = 'all-libs', - exported_deps = lib_deps + name = "all-libs", + exported_deps = lib_deps, ) android_library( - name = 'app-code', - srcs = glob([ - 'src/main/java/**/*.java', - ]), - deps = [ - ':all-libs', - ':build_config', - ':res', - ], + name = "app-code", + srcs = glob([ + "src/main/java/**/*.java", + ]), + deps = [ + ":all-libs", + ":build_config", + ":res", + ], ) android_build_config( - name = 'build_config', - package = 'com.huge', + name = "build_config", + package = "com.huge", ) android_resource( - name = 'res', - res = 'src/main/res', - package = 'com.huge', + name = "res", + package = "com.huge", + res = "src/main/res", ) android_binary( - name = 'app', - package_type = 'debug', - manifest = 'src/main/AndroidManifest.xml', - keystore = '//android/keystores:debug', - deps = [ - ':app-code', - ], + name = "app", + keystore = "//android/keystores:debug", + manifest = "src/main/AndroidManifest.xml", + package_type = "debug", + deps = [ + ":app-code", + ], ) diff --git a/examples/Huge/android/app/build.gradle b/examples/Huge/android/app/build.gradle index 5e2bc7e..d0204c0 100644 --- a/examples/Huge/android/app/build.gradle +++ b/examples/Huge/android/app/build.gradle @@ -58,7 +58,7 @@ import com.android.build.OutputFile * inputExcludes: ["android/**", "ios/**"], * * // override which node gets called and with what additional arguments - * nodeExecutableAndArgs: ["node"] + * nodeExecutableAndArgs: ["node"], * * // supply additional arguments to the packager * extraPackagerArgs: [] diff --git a/examples/Huge/android/app/proguard-rules.pro b/examples/Huge/android/app/proguard-rules.pro index 48361a9..6e8516c 100644 --- a/examples/Huge/android/app/proguard-rules.pro +++ b/examples/Huge/android/app/proguard-rules.pro @@ -50,6 +50,10 @@ -dontwarn com.facebook.react.** +# TextLayoutBuilder uses a non-public Android constructor within StaticLayout. +# See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details. +-dontwarn android.text.StaticLayout + # okhttp -keepattributes Signature diff --git a/examples/Huge/android/app/src/main/AndroidManifest.xml b/examples/Huge/android/app/src/main/AndroidManifest.xml index 241181b..313669e 100644 --- a/examples/Huge/android/app/src/main/AndroidManifest.xml +++ b/examples/Huge/android/app/src/main/AndroidManifest.xml @@ -19,7 +19,8 @@ + android:configChanges="keyboard|keyboardHidden|orientation|screenSize" + android:windowSoftInputMode="adjustResize"> diff --git a/examples/Huge/android/app/src/main/java/com/huge/MainApplication.java b/examples/Huge/android/app/src/main/java/com/huge/MainApplication.java index 86d4e42..0394f3d 100644 --- a/examples/Huge/android/app/src/main/java/com/huge/MainApplication.java +++ b/examples/Huge/android/app/src/main/java/com/huge/MainApplication.java @@ -1,10 +1,8 @@ package com.huge; import android.app.Application; -import android.util.Log; import com.facebook.react.ReactApplication; -import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.react.shell.MainReactPackage; diff --git a/examples/Huge/android/build.gradle b/examples/Huge/android/build.gradle index fcba4c5..eed9972 100644 --- a/examples/Huge/android/build.gradle +++ b/examples/Huge/android/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.1' + classpath 'com.android.tools.build:gradle:2.2.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/examples/Huge/android/gradle/wrapper/gradle-wrapper.properties b/examples/Huge/android/gradle/wrapper/gradle-wrapper.properties index b9fbfab..dbdc05d 100644 --- a/examples/Huge/android/gradle/wrapper/gradle-wrapper.properties +++ b/examples/Huge/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/examples/Huge/android/keystores/BUCK b/examples/Huge/android/keystores/BUCK index 15da20e..88e4c31 100644 --- a/examples/Huge/android/keystores/BUCK +++ b/examples/Huge/android/keystores/BUCK @@ -1,8 +1,8 @@ keystore( - name = 'debug', - store = 'debug.keystore', - properties = 'debug.keystore.properties', - visibility = [ - 'PUBLIC', - ], + name = "debug", + properties = "debug.keystore.properties", + store = "debug.keystore", + visibility = [ + "PUBLIC", + ], ) diff --git a/examples/Huge/ios/Huge.xcodeproj/project.pbxproj b/examples/Huge/ios/Huge.xcodeproj/project.pbxproj index fff6087..c1ab55a 100644 --- a/examples/Huge/ios/Huge.xcodeproj/project.pbxproj +++ b/examples/Huge/ios/Huge.xcodeproj/project.pbxproj @@ -25,7 +25,7 @@ 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */; }; + 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; }; 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */; }; 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */; }; @@ -289,7 +289,7 @@ buildActionMask = 2147483647; files = ( 2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */, - 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation-tvOS.a in Frameworks */, + 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */, 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */, 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */, 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */, @@ -419,7 +419,7 @@ isa = PBXGroup; children = ( 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, - 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */, + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */, ); name = Products; sourceTree = ""; @@ -564,7 +564,7 @@ 83CBB9F71A601CBA00E9B192 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0820; + LastUpgradeCheck = 0830; ORGANIZATIONNAME = Facebook; TargetAttributes = { 00E356ED1AD99517003FC87E = { @@ -804,10 +804,10 @@ remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */ = { + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; - path = "libRCTAnimation-tvOS.a"; + path = libRCTAnimation.a; remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; diff --git a/examples/Huge/ios/Huge/Info.plist b/examples/Huge/ios/Huge/Info.plist index ecbd496..8aa3857 100644 --- a/examples/Huge/ios/Huge/Info.plist +++ b/examples/Huge/ios/Huge/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion en + CFBundleDisplayName + Huge CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier diff --git a/examples/Huge/ios/HugeTests/HugeTests.m b/examples/Huge/ios/HugeTests/HugeTests.m index 79224a1..ad49063 100644 --- a/examples/Huge/ios/HugeTests/HugeTests.m +++ b/examples/Huge/ios/HugeTests/HugeTests.m @@ -37,7 +37,7 @@ - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test - (void)testRendersWelcomeScreen { - UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; + UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; BOOL foundElement = NO; diff --git a/examples/Huge/package.json b/examples/Huge/package.json index e4c2d30..8eb3c04 100644 --- a/examples/Huge/package.json +++ b/examples/Huge/package.json @@ -1,16 +1,27 @@ { - "name": "Huge", - "version": "0.0.0", - "scripts": { - "start": "node node_modules/react-native/local-cli/cli.js start" - }, - "dependencies": { - "react": "^15.4.1", - "react-native": "^0.41.1", - "react-redux": "^5.0.2", - "react-router": "4.0.0", - "react-router-native": "4.0.0", - "react-router-navigation": "file:./../../", - "redux": "^3.6.0" - } + "name": "Huge", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node node_modules/react-native/local-cli/cli.js start", + "test": "jest" + }, + "dependencies": { + "react": "16.0.0-alpha.6", + "react-native": "0.44.0", + "react-redux": "^5.0.2", + "react-router": "4.1.1", + "react-router-native": "4.1.1", + "react-router-navigation": "file:./../../", + "redux": "^3.6.0" + }, + "devDependencies": { + "babel-jest": "20.0.1", + "babel-preset-react-native": "1.9.2", + "jest": "20.0.1", + "react-test-renderer": "16.0.0-alpha.6" + }, + "jest": { + "preset": "react-native" + } } diff --git a/examples/Huge/src/app/components/Modal/index.js b/examples/Huge/src/app/components/Modal/index.js deleted file mode 100644 index b109dda..0000000 --- a/examples/Huge/src/app/components/Modal/index.js +++ /dev/null @@ -1,65 +0,0 @@ -import React, { Component, createElement } from 'react' -import { Animated, Dimensions, TouchableOpacity, View, Text } from 'react-native' -import { withRouter } from 'react-router' -import styles from './styles' - -class Modal extends Component { - - constructor(props) { - super(props) - const { location: { state } } = props - const isOpen = state && state.modal && state.modal.isOpen - this.pan = new Animated.Value(isOpen ? 1 : 0) - } - - componentWillReceiveProps(nextProps) { - const { location: { state } } = nextProps - const isOpen = state && state.modal && state.modal.isOpen - Animated.timing(this.pan, { - toValue: isOpen ? 1 : 0, - duration: 375, - delay: isOpen ? 20 : 0, - }) - } - - render() { - const { renderContent, location: { pathname }, history } = this.props - const top = this.pan.interpolate({ - inputRange: [0, 1], - outputRange: [Dimensions.get('window').height, 0], - }) - return ( - - - - - {createElement(renderContent)} - history.replace( - pathname, - { modal: { isOpen: false } }, - )} - > - - Close - - - - - - ) - } -} - -export default withRouter(Modal) diff --git a/examples/Huge/src/app/components/Modal/styles.js b/examples/Huge/src/app/components/Modal/styles.js deleted file mode 100644 index 7a6b004..0000000 --- a/examples/Huge/src/app/components/Modal/styles.js +++ /dev/null @@ -1,49 +0,0 @@ -/* @flow */ -/* eslint max-len: 0 */ - -import { Dimensions, StyleSheet } from 'react-native' - -const styles = StyleSheet.create({ - container: { - position: 'absolute', - top: 0, - left: 0, - zIndex: 99999999, - }, - overlay: { - position: 'absolute', - top: 0, - left: 0, - width: Dimensions.get('window').width, - height: Dimensions.get('window').height, - backgroundColor: '#00000075', - }, - wrapper: { - position: 'absolute', - top: 0, - left: 0, - width: Dimensions.get('window').width, - height: Dimensions.get('window').height, - justifyContent: 'center', - alignItems: 'center', - }, - modal: { - padding: 20, - width: Dimensions.get('window').width - 50, - zIndex: 99999999, - borderRadius: 4, - backgroundColor: 'white', - shadowColor: 'black', - shadowOffset: { width: 0, height: 2 }, - shadowOpacity: .1, - shadowRadius: 2, - elevation: 3, - }, - close: { - marginBottom: 5, - fontSize: 13, - textAlign: 'center', - }, -}) - -export default styles diff --git a/examples/Huge/src/app/modules/Feed/components/Article/index.js b/examples/Huge/src/app/modules/Feed/components/Article/index.js index 9ed8027..e5ed6e7 100644 --- a/examples/Huge/src/app/modules/Feed/components/Article/index.js +++ b/examples/Huge/src/app/modules/Feed/components/Article/index.js @@ -11,7 +11,7 @@ class Article extends Component { componentDidMount() { this.timer = setInterval(() => { - if (this.props.match && this.props.match.url === this.props.staticMatch.url) { + if (this.props.match && this.props.match.url === this.props.location.pathname) { this.setState((state) => ({ time: state.time + 250, })) @@ -28,7 +28,8 @@ class Article extends Component { } render() { - const { staticMatch: { params } } = this.props + const { match } = this.props + if (!match) return null return ( @@ -42,10 +43,10 @@ class Article extends Component { - See item {parseInt(params.id) + 1} + See item {parseInt(match.params.id) + 1} diff --git a/examples/Huge/yarn.lock b/examples/Huge/yarn.lock new file mode 100644 index 0000000..59e31f7 --- /dev/null +++ b/examples/Huge/yarn.lock @@ -0,0 +1,3939 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abab@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + +absolute-path@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" + +accepts@~1.2.12, accepts@~1.2.13: + version "1.2.13" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea" + dependencies: + mime-types "~2.1.6" + negotiator "0.5.3" + +accepts@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn@^4.0.4: + version "4.0.11" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^2.0.0, ansi-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +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.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" + dependencies: + color-convert "^1.0.0" + +ansi@^0.3.0, ansi@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +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" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + +array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +art@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/art/-/art-0.10.1.tgz#38541883e399225c5e193ff246e8f157cf7b2146" + +asap@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.0.1, async@^2.1.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" + dependencies: + lodash "^4.14.0" + +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-core@^6.0.0, babel-core@^6.21.0, babel-core@^6.24.1, babel-core@^6.7.2: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.24.1" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-generator@^6.18.0, babel-generator@^6.21.0, babel-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +babel-helper-builder-react-jsx@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.24.1.tgz#0ad7917e33c8d751e646daca4e77cc19377d2cbc" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + esutils "^2.0.0" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + lodash "^4.2.0" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + lodash "^4.2.0" + +babel-helper-remap-async-to-generator@^6.16.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@20.0.1, babel-jest@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.1.tgz#9cbe9a15bbe3f1ca1b727dc8e45a4161771d3655" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.5.0, babel-plugin-check-es2015-constants@^6.7.2, babel-plugin-check-es2015-constants@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-external-helpers@^6.18.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.0.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.3.tgz#6ee6280410dcf59c7747518c3dfd98680958f102" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.1" + test-exclude "^4.1.0" + +babel-plugin-jest-hoist@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.1.tgz#1b9cc322cff704d3812d1bca8dccd12205eedfd5" + +babel-plugin-react-transform@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-2.0.2.tgz#515bbfa996893981142d90b1f9b1635de2995109" + dependencies: + lodash "^4.6.1" + +babel-plugin-syntax-async-functions@^6.5.0, babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-class-properties@^6.5.0, babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.5.0, babel-plugin-syntax-flow@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-jsx@^6.5.0, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + +babel-plugin-syntax-object-rest-spread@^6.5.0, babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.20.0, babel-plugin-syntax-trailing-function-commas@^6.5.0, babel-plugin-syntax-trailing-function-commas@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-to-generator@6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" + dependencies: + babel-helper-remap-async-to-generator "^6.16.0" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-class-properties@^6.5.0, babel-plugin-transform-class-properties@^6.6.0, babel-plugin-transform-class-properties@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-arrow-functions@^6.5.0, babel-plugin-transform-es2015-arrow-functions@^6.5.2, babel-plugin-transform-es2015-arrow-functions@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.6.5, babel-plugin-transform-es2015-block-scoped-functions@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.5.0, babel-plugin-transform-es2015-block-scoping@^6.7.1, babel-plugin-transform-es2015-block-scoping@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + lodash "^4.2.0" + +babel-plugin-transform-es2015-classes@^6.5.0, babel-plugin-transform-es2015-classes@^6.6.5, babel-plugin-transform-es2015-classes@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.5.0, babel-plugin-transform-es2015-computed-properties@^6.6.5, babel-plugin-transform-es2015-computed-properties@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@6.x, babel-plugin-transform-es2015-destructuring@^6.5.0, babel-plugin-transform-es2015-destructuring@^6.6.5, babel-plugin-transform-es2015-destructuring@^6.8.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-for-of@^6.5.0, babel-plugin-transform-es2015-for-of@^6.6.0, babel-plugin-transform-es2015-for-of@^6.8.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@6.x, babel-plugin-transform-es2015-function-name@^6.5.0, babel-plugin-transform-es2015-function-name@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.5.0, babel-plugin-transform-es2015-literals@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-commonjs@6.x, babel-plugin-transform-es2015-modules-commonjs@^6.5.0, babel-plugin-transform-es2015-modules-commonjs@^6.7.0, babel-plugin-transform-es2015-modules-commonjs@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.6.5, babel-plugin-transform-es2015-object-super@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@6.x, babel-plugin-transform-es2015-parameters@^6.5.0, babel-plugin-transform-es2015-parameters@^6.7.0, babel-plugin-transform-es2015-parameters@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@6.x, babel-plugin-transform-es2015-shorthand-properties@^6.5.0, babel-plugin-transform-es2015-shorthand-properties@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@6.x, babel-plugin-transform-es2015-spread@^6.5.0, babel-plugin-transform-es2015-spread@^6.6.5, babel-plugin-transform-es2015-spread@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@6.x: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.5.0, babel-plugin-transform-es2015-template-literals@^6.6.5, babel-plugin-transform-es2015-template-literals@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@6.x: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-es3-member-expression-literals@^6.5.0, babel-plugin-transform-es3-member-expression-literals@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es3-property-literals@^6.5.0, babel-plugin-transform-es3-property-literals@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.21.0, babel-plugin-transform-flow-strip-types@^6.5.0, babel-plugin-transform-flow-strip-types@^6.7.0, babel-plugin-transform-flow-strip-types@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-assign@^6.5.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.20.2, babel-plugin-transform-object-rest-spread@^6.5.0, babel-plugin-transform-object-rest-spread@^6.6.5, babel-plugin-transform-object-rest-spread@^6.8.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-display-name@^6.5.0, babel-plugin-transform-react-display-name@^6.8.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.23.0.tgz#4398910c358441dc4cef18787264d0412ed36b37" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-source@^6.5.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx@^6.5.0, babel-plugin-transform-react-jsx@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + dependencies: + babel-helper-builder-react-jsx "^6.24.1" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.5.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" + dependencies: + regenerator-transform "0.9.11" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-polyfill@^6.20.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" + dependencies: + babel-runtime "^6.22.0" + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-preset-es2015-node@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015-node/-/babel-preset-es2015-node-6.1.1.tgz#60b23157024b0cfebf3a63554cb05ee035b4e55f" + dependencies: + babel-plugin-transform-es2015-destructuring "6.x" + babel-plugin-transform-es2015-function-name "6.x" + babel-plugin-transform-es2015-modules-commonjs "6.x" + babel-plugin-transform-es2015-parameters "6.x" + babel-plugin-transform-es2015-shorthand-properties "6.x" + babel-plugin-transform-es2015-spread "6.x" + babel-plugin-transform-es2015-sticky-regex "6.x" + babel-plugin-transform-es2015-unicode-regex "6.x" + semver "5.x" + +babel-preset-fbjs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-1.0.0.tgz#c972e5c9b301d4ec9e7971f4aec3e14ac017a8b0" + dependencies: + babel-plugin-check-es2015-constants "^6.7.2" + babel-plugin-syntax-flow "^6.5.0" + babel-plugin-syntax-object-rest-spread "^6.5.0" + babel-plugin-syntax-trailing-function-commas "^6.5.0" + babel-plugin-transform-class-properties "^6.6.0" + babel-plugin-transform-es2015-arrow-functions "^6.5.2" + babel-plugin-transform-es2015-block-scoped-functions "^6.6.5" + babel-plugin-transform-es2015-block-scoping "^6.7.1" + babel-plugin-transform-es2015-classes "^6.6.5" + babel-plugin-transform-es2015-computed-properties "^6.6.5" + babel-plugin-transform-es2015-destructuring "^6.6.5" + babel-plugin-transform-es2015-for-of "^6.6.0" + babel-plugin-transform-es2015-literals "^6.5.0" + babel-plugin-transform-es2015-modules-commonjs "^6.7.0" + babel-plugin-transform-es2015-object-super "^6.6.5" + babel-plugin-transform-es2015-parameters "^6.7.0" + babel-plugin-transform-es2015-shorthand-properties "^6.5.0" + babel-plugin-transform-es2015-spread "^6.6.5" + babel-plugin-transform-es2015-template-literals "^6.6.5" + babel-plugin-transform-es3-member-expression-literals "^6.5.0" + babel-plugin-transform-es3-property-literals "^6.5.0" + babel-plugin-transform-flow-strip-types "^6.7.0" + babel-plugin-transform-object-rest-spread "^6.6.5" + object-assign "^4.0.1" + +babel-preset-fbjs@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.2.tgz#f52b2df56b1da883ffb7798b3b3be42c4c647a77" + dependencies: + babel-plugin-check-es2015-constants "^6.8.0" + babel-plugin-syntax-class-properties "^6.8.0" + babel-plugin-syntax-flow "^6.8.0" + babel-plugin-syntax-jsx "^6.8.0" + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-plugin-syntax-trailing-function-commas "^6.8.0" + babel-plugin-transform-class-properties "^6.8.0" + babel-plugin-transform-es2015-arrow-functions "^6.8.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.8.0" + babel-plugin-transform-es2015-block-scoping "^6.8.0" + babel-plugin-transform-es2015-classes "^6.8.0" + babel-plugin-transform-es2015-computed-properties "^6.8.0" + babel-plugin-transform-es2015-destructuring "^6.8.0" + babel-plugin-transform-es2015-for-of "^6.8.0" + babel-plugin-transform-es2015-function-name "^6.8.0" + babel-plugin-transform-es2015-literals "^6.8.0" + babel-plugin-transform-es2015-modules-commonjs "^6.8.0" + babel-plugin-transform-es2015-object-super "^6.8.0" + babel-plugin-transform-es2015-parameters "^6.8.0" + babel-plugin-transform-es2015-shorthand-properties "^6.8.0" + babel-plugin-transform-es2015-spread "^6.8.0" + babel-plugin-transform-es2015-template-literals "^6.8.0" + babel-plugin-transform-es3-member-expression-literals "^6.8.0" + babel-plugin-transform-es3-property-literals "^6.8.0" + babel-plugin-transform-flow-strip-types "^6.8.0" + babel-plugin-transform-object-rest-spread "^6.8.0" + babel-plugin-transform-react-display-name "^6.8.0" + babel-plugin-transform-react-jsx "^6.8.0" + +babel-preset-jest@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.1.tgz#8a9e23ce8a0f0c49835de53ed73ecf75dd6daa2e" + dependencies: + babel-plugin-jest-hoist "^20.0.1" + +babel-preset-react-native@1.9.2, babel-preset-react-native@^1.9.1: + version "1.9.2" + resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-1.9.2.tgz#b22addd2e355ff3b39671b79be807e52dfa145f2" + dependencies: + babel-plugin-check-es2015-constants "^6.5.0" + babel-plugin-react-transform "2.0.2" + babel-plugin-syntax-async-functions "^6.5.0" + babel-plugin-syntax-class-properties "^6.5.0" + babel-plugin-syntax-flow "^6.5.0" + babel-plugin-syntax-jsx "^6.5.0" + babel-plugin-syntax-trailing-function-commas "^6.5.0" + babel-plugin-transform-class-properties "^6.5.0" + babel-plugin-transform-es2015-arrow-functions "^6.5.0" + babel-plugin-transform-es2015-block-scoping "^6.5.0" + babel-plugin-transform-es2015-classes "^6.5.0" + babel-plugin-transform-es2015-computed-properties "^6.5.0" + babel-plugin-transform-es2015-destructuring "^6.5.0" + babel-plugin-transform-es2015-for-of "^6.5.0" + babel-plugin-transform-es2015-function-name "^6.5.0" + babel-plugin-transform-es2015-literals "^6.5.0" + babel-plugin-transform-es2015-modules-commonjs "^6.5.0" + babel-plugin-transform-es2015-parameters "^6.5.0" + babel-plugin-transform-es2015-shorthand-properties "^6.5.0" + babel-plugin-transform-es2015-spread "^6.5.0" + babel-plugin-transform-es2015-template-literals "^6.5.0" + babel-plugin-transform-flow-strip-types "^6.5.0" + babel-plugin-transform-object-assign "^6.5.0" + babel-plugin-transform-object-rest-spread "^6.5.0" + babel-plugin-transform-react-display-name "^6.5.0" + babel-plugin-transform-react-jsx "^6.5.0" + babel-plugin-transform-react-jsx-source "^6.5.0" + babel-plugin-transform-regenerator "^6.5.0" + react-transform-hmr "^1.0.4" + +babel-register@^6.18.0, babel-register@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" + dependencies: + babel-core "^6.24.1" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-template@^6.16.0, babel-template@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.18.0, babel-traverse@^6.21.0, babel-traverse@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.16.1: + version "6.17.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" + +balanced-match@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + +base64-js@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" + +base64-js@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + +base64-url@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.2.1.tgz#199fd661702a0e7b7dcae6e0698bb089c52f6d78" + +basic-auth-connect@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" + +basic-auth@~1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.4.tgz#030935b01de7c9b94a824b29f3fccb750d3a5290" + +batch@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +beeper@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + +big-integer@^1.6.7: + version "1.6.22" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.22.tgz#487c95fce886022ea48ff5f19e388932df46dd2e" + +body-parser@~1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.13.3.tgz#c08cf330c3358e151016a05746f13f029c97fa97" + dependencies: + bytes "2.1.0" + content-type "~1.0.1" + debug "~2.2.0" + depd "~1.0.1" + http-errors "~1.3.1" + iconv-lite "0.4.11" + on-finished "~2.3.0" + qs "4.0.0" + raw-body "~2.1.2" + type-is "~1.6.6" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +bplist-creator@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" + dependencies: + stream-buffers "~2.2.0" + +bplist-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" + dependencies: + big-integer "^1.6.7" + +brace-expansion@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +bser@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" + dependencies: + node-int64 "^0.4.0" + +bser@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.3.tgz#d63da19ee17330a0e260d2a34422b21a89520317" + dependencies: + node-int64 "^0.4.0" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + +buffer-shims@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +bytes@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.1.0.tgz#ac93c410e2ffc9cc7cf4b464b38289067f5e47b4" + +bytes@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, 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" + +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + +cli-cursor@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +cli-width@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^1.0.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.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +commander@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +compressible@~2.0.5: + version "2.0.10" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.10.tgz#feda1c7f7617912732b29bf8cf26252a20b9eecd" + dependencies: + mime-db ">= 1.27.0 < 2" + +compression@~1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.5.2.tgz#b03b8d86e6f8ad29683cba8df91ddc6ffc77b395" + dependencies: + accepts "~1.2.12" + bytes "2.1.0" + compressible "~2.0.5" + debug "~2.2.0" + on-headers "~1.0.0" + vary "~1.0.1" + +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" + +connect-timeout@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/connect-timeout/-/connect-timeout-1.6.2.tgz#de9a5ec61e33a12b6edaab7b5f062e98c599b88e" + dependencies: + debug "~2.2.0" + http-errors "~1.3.1" + ms "0.7.1" + on-headers "~1.0.0" + +connect@^2.8.3: + version "2.30.2" + resolved "https://registry.yarnpkg.com/connect/-/connect-2.30.2.tgz#8da9bcbe8a054d3d318d74dfec903b5c39a1b609" + dependencies: + basic-auth-connect "1.0.0" + body-parser "~1.13.3" + bytes "2.1.0" + compression "~1.5.2" + connect-timeout "~1.6.2" + content-type "~1.0.1" + cookie "0.1.3" + cookie-parser "~1.3.5" + cookie-signature "1.0.6" + csurf "~1.8.3" + debug "~2.2.0" + depd "~1.0.1" + errorhandler "~1.4.2" + express-session "~1.11.3" + finalhandler "0.4.0" + fresh "0.3.0" + http-errors "~1.3.1" + method-override "~2.3.5" + morgan "~1.6.1" + multiparty "3.3.2" + on-headers "~1.0.0" + parseurl "~1.3.0" + pause "0.1.0" + qs "4.0.0" + response-time "~2.3.1" + serve-favicon "~2.3.0" + serve-index "~1.7.2" + serve-static "~1.10.0" + type-is "~1.6.6" + utils-merge "1.0.0" + vhost "~3.0.1" + +content-type-parser@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" + +content-type@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + +convert-source-map@^1.1.0, convert-source-map@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + +cookie-parser@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.3.5.tgz#9d755570fb5d17890771227a02314d9be7cf8356" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.3.tgz#e734a5c1417fce472d5aef82c381cabb64d1a435" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +core-js@^2.2.2, core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +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" + +crc@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.3.0.tgz#fa622e1bc388bf257309082d6b65200ce67090ba" + +cross-spawn@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +csrf@~3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/csrf/-/csrf-3.0.6.tgz#b61120ddceeafc91e76ed5313bb5c0b2667b710a" + dependencies: + rndm "1.2.0" + tsscmp "1.0.5" + uid-safe "2.1.4" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + +csurf@~1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/csurf/-/csurf-1.8.3.tgz#23f2a13bf1d8fce1d0c996588394442cba86a56a" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + csrf "~3.0.0" + http-errors "~1.3.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +dateformat@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" + +debug@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" + dependencies: + ms "0.7.2" + +debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: + version "2.6.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" + dependencies: + ms "2.0.0" + +debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +decamelize@^1.0.0, decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +denodeify@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" + +depd@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa" + +depd@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +diff@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +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" + +"errno@>=0.1.1 <0.2.0-0": + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +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" + +errorhandler@~1.4.2: + version "1.4.3" + resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.4.3.tgz#b7b70ed8f359e9db88092f2d20c0f831420ad83f" + dependencies: + accepts "~1.3.0" + escape-html "~1.0.3" + +escape-html@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +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" + +escodegen@^1.6.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" + +event-target-shim@^1.0.5: + version "1.1.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-1.1.1.tgz#a86e5ee6bdaa16054475da797ccddf0c55698491" + +exec-sh@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + dependencies: + merge "^1.1.3" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +express-session@~1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.11.3.tgz#5cc98f3f5ff84ed835f91cbf0aabd0c7107400af" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + crc "3.3.0" + debug "~2.2.0" + depd "~1.0.1" + on-headers "~1.0.0" + parseurl "~1.3.0" + uid-safe "~2.0.0" + utils-merge "1.0.0" + +extend@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fancy-log@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" + dependencies: + chalk "^1.1.1" + time-stamp "^1.0.0" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fb-watchman@^1.8.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" + dependencies: + bser "1.0.2" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + +fbjs-scripts@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-0.7.1.tgz#4f115e218e243e3addbf0eddaac1e3c62f703fac" + dependencies: + babel-core "^6.7.2" + babel-preset-fbjs "^1.0.0" + core-js "^1.0.0" + cross-spawn "^3.0.1" + gulp-util "^3.0.4" + object-assign "^4.0.1" + semver "^5.1.0" + through2 "^2.0.0" + +fbjs@^0.8.9, fbjs@~0.8.9: + version "0.8.12" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +finalhandler@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.0.tgz#965a52d9e8d05d2b857548541fb89b53a2497d9b" + dependencies: + debug "~2.2.0" + escape-html "1.0.2" + on-finished "~2.3.0" + unpipe "~1.0.0" + +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.1.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" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@^2.1.1, form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +fresh@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" + +fs-extra@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +gauge@~1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" + dependencies: + ansi "^0.3.0" + has-unicode "^2.0.0" + lodash.pad "^4.1.0" + lodash.padend "^4.1.0" + lodash.padstart "^4.1.0" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + dependencies: + min-document "^2.19.0" + process "~0.5.1" + +globals@^9.0.0: + version "9.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" + +glogg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" + dependencies: + sparkles "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +gulp-util@^3.0.4: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + dependencies: + glogg "^1.0.0" + +handlebars@^4.0.3: + version "4.0.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.8.tgz#22b875cd3f0e6cbea30314f144e82bc7a72ff420" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + dependencies: + sparkles "^1.0.0" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.4.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" + +html-encoding-sniffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + dependencies: + whatwg-encoding "^1.0.1" + +http-errors@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz#197e22cdebd4198585e8694ef6786197b91ed942" + dependencies: + inherits "~2.0.1" + statuses "1" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.11: + version "0.4.11" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.11.tgz#2ecb42fd294744922209a2e7c404dac8793d8ade" + +iconv-lite@0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + +iconv-lite@~0.4.13: + version "0.4.17" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d" + +image-size@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.3.5.tgz#83240eab2fb5b00b04aab8c74b0471e9cba7ad8c" + +immutable@~3.7.6: + version "3.7.6" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" + +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.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inquirer@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^2.0.0" + figures "^1.3.5" + lodash "^4.3.0" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.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" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +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-ci@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isemail@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.1.1: + version "1.1.8" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.0" + istanbul-lib-hook "^1.0.6" + istanbul-lib-instrument "^1.7.1" + istanbul-lib-report "^1.1.0" + istanbul-lib-source-maps "^1.2.0" + istanbul-reports "^1.1.0" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" + +istanbul-lib-hook@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.13.0" + istanbul-lib-coverage "^1.1.0" + semver "^5.3.0" + +istanbul-lib-report@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770" + dependencies: + istanbul-lib-coverage "^1.1.0" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e" + dependencies: + debug "^2.6.3" + istanbul-lib-coverage "^1.1.0" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66" + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.1.tgz#ba9bd42c3fddb1b7c4ae40065199b44a2335e152" + +jest-cli@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.1.tgz#86ca0bc2e47215ad8e7dc85455c0210f86648502" + dependencies: + ansi-escapes "^1.4.0" + callsites "^2.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^20.0.1" + jest-config "^20.0.1" + jest-docblock "^20.0.1" + jest-environment-jsdom "^20.0.1" + jest-haste-map "^20.0.1" + jest-jasmine2 "^20.0.1" + jest-message-util "^20.0.1" + jest-regex-util "^20.0.1" + jest-resolve-dependencies "^20.0.1" + jest-runtime "^20.0.1" + jest-snapshot "^20.0.1" + jest-util "^20.0.1" + micromatch "^2.3.11" + node-notifier "^5.0.2" + pify "^2.3.0" + slash "^1.0.0" + string-length "^1.0.1" + throat "^3.0.0" + which "^1.2.12" + worker-farm "^1.3.1" + yargs "^7.0.2" + +jest-config@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.1.tgz#c6934f585c3e1775c96133efb302f986c3909ad8" + dependencies: + chalk "^1.1.3" + glob "^7.1.1" + jest-environment-jsdom "^20.0.1" + jest-environment-node "^20.0.1" + jest-jasmine2 "^20.0.1" + jest-matcher-utils "^20.0.1" + jest-regex-util "^20.0.1" + jest-resolve "^20.0.1" + jest-validate "^20.0.1" + pretty-format "^20.0.1" + +jest-diff@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.1.tgz#2567c80c324243328321386f8871a28ec9d350ac" + dependencies: + chalk "^1.1.3" + diff "^3.2.0" + jest-matcher-utils "^20.0.1" + pretty-format "^20.0.1" + +jest-docblock@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.1.tgz#055e0bbcb76798198479901f92d2733bf619f854" + +jest-environment-jsdom@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.1.tgz#2d29f81368987d387c70ce4f500c6aa560f9b4f7" + dependencies: + jest-mock "^20.0.1" + jest-util "^20.0.1" + jsdom "^9.12.0" + +jest-environment-node@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.1.tgz#75ab5358072ee1efebc54f43474357d7b3d674c7" + dependencies: + jest-mock "^20.0.1" + jest-util "^20.0.1" + +jest-haste-map@19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.0.tgz#adde00b62b1fe04432a104b3254fc5004514b55e" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.6" + micromatch "^2.3.11" + sane "~1.5.0" + worker-farm "^1.3.1" + +jest-haste-map@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.1.tgz#e6ba4db99ab512e7c081a5b0a0af731d0e193d56" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^20.0.1" + micromatch "^2.3.11" + sane "~1.6.0" + worker-farm "^1.3.1" + +jest-jasmine2@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.1.tgz#675772b1fd32ad74e92e8ae8282f8ea71d1de168" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-diff "^20.0.1" + jest-matcher-utils "^20.0.1" + jest-matchers "^20.0.1" + jest-message-util "^20.0.1" + jest-snapshot "^20.0.1" + once "^1.4.0" + p-map "^1.1.1" + +jest-matcher-utils@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.1.tgz#31aef67f59535af3c2271a3a3685db604dbd1622" + dependencies: + chalk "^1.1.3" + pretty-format "^20.0.1" + +jest-matchers@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.1.tgz#053b7654ce60129268f39992886e987a5201bb90" + dependencies: + jest-diff "^20.0.1" + jest-matcher-utils "^20.0.1" + jest-message-util "^20.0.1" + jest-regex-util "^20.0.1" + +jest-message-util@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.1.tgz#ac21cb055a6a5786b7f127ac7e705df5ffb1c335" + dependencies: + chalk "^1.1.3" + micromatch "^2.3.11" + slash "^1.0.0" + +jest-mock@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.1.tgz#f4cca2e87e441b66fabe4ead6a6d61773ec0773a" + +jest-regex-util@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.1.tgz#ecbcca8fbe4e217bca7f6f42a9b831d051224dc4" + +jest-resolve-dependencies@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.1.tgz#38fc012191775b0b277fabebb37aa8282e26846f" + dependencies: + jest-regex-util "^20.0.1" + +jest-resolve@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.1.tgz#cace553663f25c703dc977a4ce176e29eda92772" + dependencies: + browser-resolve "^1.11.2" + is-builtin-module "^1.0.0" + resolve "^1.3.2" + +jest-runtime@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.1.tgz#384f9298b8e8a177870c6d9ad0023db10ddcaedc" + dependencies: + babel-core "^6.0.0" + babel-jest "^20.0.1" + babel-plugin-istanbul "^4.0.0" + chalk "^1.1.3" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^20.0.1" + jest-haste-map "^20.0.1" + jest-regex-util "^20.0.1" + jest-resolve "^20.0.1" + jest-util "^20.0.1" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + strip-bom "3.0.0" + yargs "^7.0.2" + +jest-snapshot@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.1.tgz#3704c599705042f20ec7c95ba76a4524c744dfac" + dependencies: + chalk "^1.1.3" + jest-diff "^20.0.1" + jest-matcher-utils "^20.0.1" + jest-util "^20.0.1" + natural-compare "^1.4.0" + pretty-format "^20.0.1" + +jest-util@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.1.tgz#a3e7afb67110b2c3ac77b82e9a51ca57f4ff72a1" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-message-util "^20.0.1" + jest-mock "^20.0.1" + jest-validate "^20.0.1" + leven "^2.1.0" + mkdirp "^0.5.1" + +jest-validate@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.1.tgz#a236c29e3c29e9b92a1e5da211a732f0238da928" + dependencies: + chalk "^1.1.3" + jest-matcher-utils "^20.0.1" + leven "^2.1.0" + pretty-format "^20.0.1" + +jest@20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.1.tgz#4e268159ccc3b659966939de817c75bfe9e0157d" + dependencies: + jest-cli "^20.0.1" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +joi@^6.6.1: + version "6.10.1" + resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06" + dependencies: + hoek "2.x.x" + isemail "1.x.x" + moment "2.x.x" + topo "1.x.x" + +js-tokens@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + +js-yaml@^3.7.0: + version "3.8.4" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" + dependencies: + argparse "^1.0.7" + esprima "^3.1.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +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" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + dependencies: + assert-plus "1.0.0" + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + optionalDependencies: + graceful-fs "^4.1.9" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +left-pad@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.1.3.tgz#612f61c033f3a9e08e939f1caebeea41b6f3199a" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +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@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.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._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + dependencies: + lodash._root "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.pad@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" + +lodash.padend@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + +lodash.padstart@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.template@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.templatesettings@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + +lodash@^3.5.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + +lodash@^4.14.0, lodash@^4.16.6, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.6.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0, loose-envify@^1.1.0: + 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.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +method-override@~2.3.5: + version "2.3.8" + resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.8.tgz#178234bf4bab869f89df9444b06fc6147b44828c" + dependencies: + debug "2.6.3" + methods "~1.1.2" + parseurl "~1.3.1" + vary "~1.1.0" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +"mime-db@>= 1.27.0 < 2", mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + +mime-db@~1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" + +mime-types@2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" + dependencies: + mime-db "~1.23.0" + +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + dependencies: + mime-db "~1.27.0" + +mime@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +mime@^1.3.4: + version "1.3.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + dependencies: + dom-walk "^0.1.0" + +minimatch@^3.0.2, minimatch@^3.0.3: + 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, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +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" + +moment@2.x.x: + version "2.18.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" + +morgan@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.6.1.tgz#5fd818398c6819cba28a7cd6664f292fe1c0bbf2" + dependencies: + basic-auth "~1.0.3" + debug "~2.2.0" + depd "~1.0.1" + on-finished "~2.3.0" + on-headers "~1.0.0" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +multiparty@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-3.3.2.tgz#35de6804dc19643e5249f3d3e3bdc6c8ce301d3f" + dependencies: + readable-stream "~1.1.9" + stream-counter "~0.2.0" + +multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + dependencies: + duplexer2 "0.0.2" + +mute-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +negotiator@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +node-fetch@^1.0.1, node-fetch@^1.3.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + +node-notifier@^5.0.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + dependencies: + growly "^1.3.0" + semver "^5.3.0" + shellwords "^0.1.0" + which "^1.2.12" + +normalize-package-data@^2.3.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" + 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" + +normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npmlog@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" + dependencies: + ansi "~0.3.1" + are-we-there-yet "~1.1.2" + gauge "~1.2.5" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +"nwmatcher@>= 1.3.9 < 2.0.0": + version "1.3.9" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.0, on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +opn@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a" + dependencies: + object-assign "^4.0.1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + 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" + +options@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: + 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" + +p-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.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" + +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +parseurl@~1.3.0, parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + +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-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pause@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74" + +pegjs@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pify@^2.0.0, pify@^2.3.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" + +plist@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" + dependencies: + base64-js "1.1.2" + xmlbuilder "8.2.2" + xmldom "0.1.x" + +plist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/plist/-/plist-1.2.0.tgz#084b5093ddc92506e259f874b8d9b1afb8c79593" + dependencies: + base64-js "0.0.8" + util-deprecate "1.0.2" + xmlbuilder "4.0.0" + xmldom "0.1.x" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-format@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.1.tgz#ba95329771907c189643dd251e244061ff642350" + dependencies: + ansi-regex "^2.1.1" + ansi-styles "^3.0.0" + +pretty-format@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d" + +private@^0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" + +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" + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + +promise@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" + dependencies: + asap "~2.0.3" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +qs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +random-bytes@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + +randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + +range-parser@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175" + +raw-body@~2.1.2: + version "2.1.7" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.13" + unpipe "1.0.0" + +react-clone-referenced-element@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-clone-referenced-element/-/react-clone-referenced-element-1.0.1.tgz#2bba8c69404c5e4a944398600bcc4c941f860682" + +react-deep-force-update@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.0.1.tgz#f911b5be1d2a6fe387507dd6e9a767aa2924b4c7" + +react-devtools-core@^2.0.8: + version "2.1.9" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-2.1.9.tgz#825e0582b7f8587cbf56bb5ef1ea94d8b158543e" + dependencies: + shell-quote "^1.6.1" + ws "^2.0.3" + +react-native@0.44.0: + version "0.44.0" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.44.0.tgz#06427a30053f2d555c60fe0b9afcc6c778db09de" + dependencies: + absolute-path "^0.0.0" + art "^0.10.0" + async "^2.0.1" + babel-core "^6.21.0" + babel-generator "^6.21.0" + babel-plugin-external-helpers "^6.18.0" + babel-plugin-syntax-trailing-function-commas "^6.20.0" + babel-plugin-transform-async-to-generator "6.16.0" + babel-plugin-transform-flow-strip-types "^6.21.0" + babel-plugin-transform-object-rest-spread "^6.20.2" + babel-polyfill "^6.20.0" + babel-preset-es2015-node "^6.1.1" + babel-preset-fbjs "^2.1.0" + babel-preset-react-native "^1.9.1" + babel-register "^6.18.0" + babel-runtime "^6.20.0" + babel-traverse "^6.21.0" + babel-types "^6.21.0" + babylon "^6.16.1" + base64-js "^1.1.2" + bser "^1.0.2" + chalk "^1.1.1" + commander "^2.9.0" + concat-stream "^1.6.0" + connect "^2.8.3" + core-js "^2.2.2" + debug "^2.2.0" + denodeify "^1.2.1" + event-target-shim "^1.0.5" + fbjs "~0.8.9" + fbjs-scripts "^0.7.0" + form-data "^2.1.1" + fs-extra "^1.0.0" + glob "^7.1.1" + graceful-fs "^4.1.3" + image-size "^0.3.5" + immutable "~3.7.6" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + jest-haste-map "19.0.0" + joi "^6.6.1" + json-stable-stringify "^1.0.1" + json5 "^0.4.0" + left-pad "^1.1.3" + lodash "^4.16.6" + mime "^1.3.4" + mime-types "2.1.11" + minimist "^1.2.0" + mkdirp "^0.5.1" + node-fetch "^1.3.3" + npmlog "^2.0.4" + opn "^3.0.2" + optimist "^0.6.1" + plist "^1.2.0" + pretty-format "^4.2.1" + promise "^7.1.1" + react-clone-referenced-element "^1.0.1" + react-devtools-core "^2.0.8" + react-timer-mixin "^0.13.2" + react-transform-hmr "^1.0.4" + rebound "^0.0.13" + regenerator-runtime "^0.9.5" + request "^2.79.0" + rimraf "^2.5.4" + sane "~1.4.1" + semver "^5.0.3" + shell-quote "1.6.1" + source-map "^0.5.6" + stacktrace-parser "^0.1.3" + temp "0.8.3" + throat "^3.0.0" + uglify-js "2.7.5" + whatwg-fetch "^1.0.0" + wordwrap "^1.0.0" + worker-farm "^1.3.1" + write-file-atomic "^1.2.0" + ws "^1.1.0" + xcode "^0.9.1" + xmldoc "^0.4.0" + xpipe "^1.0.5" + yargs "^6.4.0" + +react-proxy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" + dependencies: + lodash "^4.6.1" + react-deep-force-update "^1.0.0" + +react-test-renderer@16.0.0-alpha.6: + version "16.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.0.0-alpha.6.tgz#c032def0dc8319cee39caa4e4373a60019cb3786" + dependencies: + fbjs "^0.8.9" + object-assign "^4.1.0" + +react-timer-mixin@^0.13.2: + version "0.13.3" + resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz#0da8b9f807ec07dc3e854d082c737c65605b3d22" + +react-transform-hmr@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" + dependencies: + global "^4.3.0" + react-proxy "^1.1.7" + +react@16.0.0-alpha.6: + version "16.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/react/-/react-16.0.0-alpha.6.tgz#2ccb1afb4425ccc12f78a123a666f2e4c141adb9" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2: + version "2.2.9" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" + dependencies: + buffer-shims "~1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~1.0.0" + util-deprecate "~1.0.1" + +readable-stream@~1.1.8, readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readline2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + +rebound@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/rebound/-/rebound-0.0.13.tgz#4a225254caf7da756797b19c5817bf7a7941fac1" + +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.10.0: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regenerator-runtime@^0.9.5: + version "0.9.6" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029" + +regenerator-transform@0.9.11: + version "0.9.11" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + +request@^2.79.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" + dependencies: + path-parse "^1.0.5" + +response-time@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/response-time/-/response-time-2.3.2.tgz#ffa71bab952d62f7c1d49b7434355fbc68dffc5a" + dependencies: + depd "~1.1.0" + on-headers "~1.0.1" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@^2.5.4, rimraf@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + dependencies: + glob "^7.0.5" + +rimraf@~2.2.6: + version "2.2.8" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + +rndm@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/rndm/-/rndm-1.2.0.tgz#f33fe9cfb52bbfd520aa18323bc65db110a1b76c" + +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + dependencies: + once "^1.3.0" + +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + +safe-buffer@^5.0.1, safe-buffer@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" + +sane@~1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.4.1.tgz#88f763d74040f5f0c256b6163db399bf110ac715" + dependencies: + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + +sane@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.5.0.tgz#a4adeae764d048621ecb27d5f9ecf513101939f3" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + +sane@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + +sax@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + +sax@~1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" + +"semver@2 || 3 || 4 || 5", semver@5.x, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +send@0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.13.2.tgz#765e7607c8055452bba6f0b052595350986036de" + dependencies: + debug "~2.2.0" + depd "~1.1.0" + destroy "~1.0.4" + escape-html "~1.0.3" + etag "~1.7.0" + fresh "0.3.0" + http-errors "~1.3.1" + mime "1.3.4" + ms "0.7.1" + on-finished "~2.3.0" + range-parser "~1.0.3" + statuses "~1.2.1" + +serve-favicon@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.3.2.tgz#dd419e268de012ab72b319d337f2105013f9381f" + dependencies: + etag "~1.7.0" + fresh "0.3.0" + ms "0.7.2" + parseurl "~1.3.1" + +serve-index@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.7.3.tgz#7a057fc6ee28dc63f64566e5fa57b111a86aecd2" + dependencies: + accepts "~1.2.13" + batch "0.5.3" + debug "~2.2.0" + escape-html "~1.0.3" + http-errors "~1.3.1" + mime-types "~2.1.9" + parseurl "~1.3.1" + +serve-static@~1.10.0: + version "1.10.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.10.3.tgz#ce5a6ecd3101fed5ec09827dac22a9c29bfb0535" + dependencies: + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.13.2" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +shell-quote@1.6.1, shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +shellwords@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" + +simple-plist@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" + dependencies: + bplist-creator "0.0.7" + bplist-parser "0.1.1" + plist "2.0.1" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +source-map-support@^0.4.2: + version "0.4.15" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" + dependencies: + source-map "^0.5.6" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + dependencies: + amdefine ">=0.0.4" + +sparkles@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" + +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" + +sshpk@^1.7.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stacktrace-parser@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz#01397922e5f62ecf30845522c95c4fe1d25e7d4e" + +statuses@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +statuses@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz#dded45cc18256d51ed40aec142489d5c61026d28" + +stream-buffers@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" + +stream-counter@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" + dependencies: + readable-stream "~1.1.8" + +string-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" + dependencies: + buffer-shims "~1.0.0" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + 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-bom@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +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@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +temp@0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + dependencies: + os-tmpdir "^1.0.0" + rimraf "~2.2.6" + +test-exclude@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.0.tgz#04ca70b7390dd38c98d4a003a173806ca7991c91" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +throat@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" + +through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + +to-fast-properties@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +topo@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5" + dependencies: + hoek "2.x.x" + +tough-cookie@^2.3.2, tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tsscmp@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +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" + +type-is@~1.6.6: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +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.12" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" + +uglify-js@2.7.5, uglify-js@^2.6: + version "2.7.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" + dependencies: + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-safe@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.4.tgz#3ad6f38368c6d4c8c75ec17623fb79aa1d071d81" + dependencies: + random-bytes "~1.0.0" + +uid-safe@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.0.0.tgz#a7f3c6ca64a1f6a5d04ec0ef3e4c3d5367317137" + dependencies: + base64-url "1.2.1" + +ultron@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + +ultron@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +util-deprecate@1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +uuid@3.0.1, uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +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" + +vary@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" + +vary@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +vhost@~3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/vhost/-/vhost-3.0.2.tgz#2fb1decd4c466aa88b0f9341af33dc1aff2478d5" + +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +watch@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" + +whatwg-encoding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + dependencies: + iconv-lite "0.4.13" + +whatwg-fetch@>=0.10.0, whatwg-fetch@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz#ac3c9d39f320c6dce5339969d054ef43dd333319" + +whatwg-url@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which@^1.2.12, which@^1.2.9: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + dependencies: + isexe "^2.0.0" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +worker-farm@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" + dependencies: + errno ">=0.1.1 <0.2.0-0" + xtend ">=4.0.0 <4.1.0-0" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^1.2.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +ws@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +ws@^2.0.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" + dependencies: + safe-buffer "~5.0.1" + ultron "~1.1.0" + +xcode@^0.9.1: + version "0.9.3" + resolved "https://registry.yarnpkg.com/xcode/-/xcode-0.9.3.tgz#910a89c16aee6cc0b42ca805a6d0b4cf87211cf3" + dependencies: + pegjs "^0.10.0" + simple-plist "^0.2.1" + uuid "3.0.1" + +xml-name-validator@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + +xmlbuilder@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.0.0.tgz#98b8f651ca30aa624036f127d11cc66dc7b907a3" + dependencies: + lodash "^3.5.0" + +xmlbuilder@8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" + +xmldoc@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888" + dependencies: + sax "~1.1.1" + +xmldom@0.1.x: + version "0.1.27" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" + +xpipe@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" + +"xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs-parser@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" + dependencies: + camelcase "^3.0.0" + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + +yargs@^6.4.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^4.2.0" + +yargs@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" From 5a84eedb3d05e211d3f32c4b9d469e40d0174b8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 17 May 2017 14:35:11 +0200 Subject: [PATCH 06/50] chore(navigation): some fixes --- modules/CardStack.js | 14 -------------- modules/DefaultRenderer.js | 4 ++-- modules/Navigation.js | 4 ++-- modules/SceneView.js | 5 +++-- package.json | 1 - yarn.lock | 4 ---- 6 files changed, 7 insertions(+), 25 deletions(-) diff --git a/modules/CardStack.js b/modules/CardStack.js index 9178874..cce1399 100755 --- a/modules/CardStack.js +++ b/modules/CardStack.js @@ -7,7 +7,6 @@ import { BackHandler } from 'react-native' import { matchPath } from 'react-router' import { StateUtils } from 'react-navigation' import type { ContextRouter, Location, HistoryAction } from 'react-router' -import isEqual from 'lodash.isequal' import type { CardsRendererProps, NavigationState, Card, CardProps } from './TypeDefinitions' import * as StackUtils from './StackUtils' @@ -157,19 +156,6 @@ class CardStack extends Component { } } - shouldComponentUpdate(nextProps: Props, nextState: State): boolean { - return !isEqual( - this.state.navigationState.routes - .map(({ match }) => { - return match.url - }), - nextState.navigationState.routes - .map(({ match }) => { - return match.url - }), - ) - } - // Pop to previous scene (n-1) onNavigateBack = (): boolean => { if (this.state.navigationState.index > 0) { diff --git a/modules/DefaultRenderer.js b/modules/DefaultRenderer.js index 8319ab7..f01cd1e 100644 --- a/modules/DefaultRenderer.js +++ b/modules/DefaultRenderer.js @@ -20,7 +20,7 @@ type Props = & CardsRendererProps & NavigationProps & { - renderScene: (props: SceneRendererProps) => ?React$Element, + renderSceneComponent: (props: SceneRendererProps) => ?React$Element, renderHeader: (props: SceneRendererProps) => ?React$Element, } @@ -57,7 +57,7 @@ class DefaultRenderer extends React.Component { return route.routeName === routeName }) // Return scene component $FlowFixMe - return this.props.renderScene({ + return this.props.renderSceneComponent({ ...this.props, ...sceneProps, scene, diff --git a/modules/Navigation.js b/modules/Navigation.js index d6a24ab..a5d50b5 100644 --- a/modules/Navigation.js +++ b/modules/Navigation.js @@ -30,7 +30,7 @@ class Navigation extends Component { return } - renderScene = (sceneProps: CardSubViewProps): ?ReactClass => { + renderSceneComponent = (sceneProps: CardSubViewProps): ?ReactClass => { const { render, children, component } = sceneProps if (render) return render else if (children && typeof children === 'function') return children @@ -53,7 +53,7 @@ class Navigation extends Component { )} diff --git a/modules/SceneView.js b/modules/SceneView.js index ee8b816..513a3e2 100644 --- a/modules/SceneView.js +++ b/modules/SceneView.js @@ -24,7 +24,7 @@ class SceneView extends React.Component { } } - componentDidMount(): void { + componentWillMount(): void { const { history } = this.props this.unlisten = history.listen(this.onChangeHistory) } @@ -38,7 +38,8 @@ class SceneView extends React.Component { } render(): ?React$Element { - const { render, children, component } = this.props + const { render, children, component, match } = this.props + if (!match) return null const ownProps = { ...this.props, ...this.state } if (render) return render(ownProps) else if (children && typeof children === 'function') return children(ownProps) diff --git a/package.json b/package.json index 88989bc..47ac96c 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,6 @@ "react-router-native": "4.1.x" }, "dependencies": { - "lodash.isequal": "^4.5.0", "react-native-tab-view": "0.0.65", "react-navigation": "1.0.0-beta.9" }, diff --git a/yarn.lock b/yarn.lock index f32792d..8d0ca91 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2963,10 +2963,6 @@ lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" From 43c46be361f00c9eed3a50bb0906a9488799b9ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 17 May 2017 14:35:40 +0200 Subject: [PATCH 07/50] chore(examples): update Basic app --- examples/Basic/.babelrc | 4 +- examples/Basic/.flowconfig | 47 ++++++++++++++++ examples/Basic/.gitignore | 2 +- examples/Basic/.watchmanconfig | 2 +- examples/Basic/android/app/BUCK | 53 +++++++++---------- examples/Basic/android/app/build.gradle | 2 +- examples/Basic/android/app/proguard-rules.pro | 4 ++ .../android/app/src/main/AndroidManifest.xml | 13 ++--- .../main/java/com/basic/MainApplication.java | 2 - examples/Basic/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- examples/Basic/app.json | 4 ++ .../Basic/ios/Basic.xcodeproj/project.pbxproj | 22 +++----- .../xcschemes/Basic-tvOS.xcscheme | 2 +- .../xcshareddata/xcschemes/Basic.xcscheme | 2 +- examples/Basic/ios/Basic/AppDelegate.m | 7 --- .../AppIcon.appiconset/Contents.json | 10 ---- examples/Basic/ios/Basic/Info.plist | 13 +---- examples/Basic/ios/BasicTests/BasicTests.m | 2 +- examples/Basic/package.json | 34 +++++++----- examples/Basic/src/index.js | 21 ++++---- 21 files changed, 137 insertions(+), 113 deletions(-) create mode 100644 examples/Basic/.flowconfig create mode 100644 examples/Basic/app.json diff --git a/examples/Basic/.babelrc b/examples/Basic/.babelrc index 8df53fe..a9ce136 100644 --- a/examples/Basic/.babelrc +++ b/examples/Basic/.babelrc @@ -1,3 +1,3 @@ { -"presets": ["react-native"] -} \ No newline at end of file + "presets": ["react-native"] +} diff --git a/examples/Basic/.flowconfig b/examples/Basic/.flowconfig new file mode 100644 index 0000000..a76425e --- /dev/null +++ b/examples/Basic/.flowconfig @@ -0,0 +1,47 @@ +[ignore] +; We fork some components by platform +.*/*[.]android.js + +; Ignore "BUCK" generated dirs +/\.buckd/ + +; Ignore unexpected extra "@providesModule" +.*/node_modules/.*/node_modules/fbjs/.* + +; Ignore duplicate module providers +; For RN Apps installed via npm, "Libraries" folder is inside +; "node_modules/react-native" but in the source repo it is in the root +.*/Libraries/react-native/React.js +.*/Libraries/react-native/ReactNative.js + +[include] + +[libs] +node_modules/react-native/Libraries/react-native/react-native-interface.js +node_modules/react-native/flow +flow/ + +[options] +emoji=true + +module.system=haste + +experimental.strict_type_args=true + +munge_underscores=true + +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\|pdf\)$' -> 'RelativeImageStub' + +suppress_type=$FlowIssue +suppress_type=$FlowFixMe +suppress_type=$FixMe + +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(4[0-2]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(4[0-2]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy +suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError + +unsafe.enable_getters_and_setters=true + +[version] +^0.42.0 diff --git a/examples/Basic/.gitignore b/examples/Basic/.gitignore index fc13f16..10be197 100644 --- a/examples/Basic/.gitignore +++ b/examples/Basic/.gitignore @@ -34,11 +34,11 @@ local.properties # node_modules/ npm-debug.log +yarn-error.log # BUCK buck-out/ \.buckd/ -android/app/libs *.keystore # fastlane diff --git a/examples/Basic/.watchmanconfig b/examples/Basic/.watchmanconfig index 0967ef4..9e26dfe 100644 --- a/examples/Basic/.watchmanconfig +++ b/examples/Basic/.watchmanconfig @@ -1 +1 @@ -{} +{} \ No newline at end of file diff --git a/examples/Basic/android/app/BUCK b/examples/Basic/android/app/BUCK index 0b8394c..d02d07e 100644 --- a/examples/Basic/android/app/BUCK +++ b/examples/Basic/android/app/BUCK @@ -1,5 +1,3 @@ -import re - # To learn about Buck see [Docs](https://buckbuild.com/). # To run your application with Buck: # - install Buck @@ -11,8 +9,9 @@ import re # lib_deps = [] + for jarfile in glob(['libs/*.jar']): - name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile) + name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')] lib_deps.append(':' + name) prebuilt_jar( name = name, @@ -20,7 +19,7 @@ for jarfile in glob(['libs/*.jar']): ) for aarfile in glob(['libs/*.aar']): - name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile) + name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')] lib_deps.append(':' + name) android_prebuilt_aar( name = name, @@ -28,39 +27,39 @@ for aarfile in glob(['libs/*.aar']): ) android_library( - name = 'all-libs', - exported_deps = lib_deps + name = "all-libs", + exported_deps = lib_deps, ) android_library( - name = 'app-code', - srcs = glob([ - 'src/main/java/**/*.java', - ]), - deps = [ - ':all-libs', - ':build_config', - ':res', - ], + name = "app-code", + srcs = glob([ + "src/main/java/**/*.java", + ]), + deps = [ + ":all-libs", + ":build_config", + ":res", + ], ) android_build_config( - name = 'build_config', - package = 'com.basic', + name = "build_config", + package = "com.basic", ) android_resource( - name = 'res', - res = 'src/main/res', - package = 'com.basic', + name = "res", + package = "com.basic", + res = "src/main/res", ) android_binary( - name = 'app', - package_type = 'debug', - manifest = 'src/main/AndroidManifest.xml', - keystore = '//android/keystores:debug', - deps = [ - ':app-code', - ], + name = "app", + keystore = "//android/keystores:debug", + manifest = "src/main/AndroidManifest.xml", + package_type = "debug", + deps = [ + ":app-code", + ], ) diff --git a/examples/Basic/android/app/build.gradle b/examples/Basic/android/app/build.gradle index d07614b..8990c93 100644 --- a/examples/Basic/android/app/build.gradle +++ b/examples/Basic/android/app/build.gradle @@ -58,7 +58,7 @@ import com.android.build.OutputFile * inputExcludes: ["android/**", "ios/**"], * * // override which node gets called and with what additional arguments - * nodeExecutableAndArgs: ["node"] + * nodeExecutableAndArgs: ["node"], * * // supply additional arguments to the packager * extraPackagerArgs: [] diff --git a/examples/Basic/android/app/proguard-rules.pro b/examples/Basic/android/app/proguard-rules.pro index 48361a9..6e8516c 100644 --- a/examples/Basic/android/app/proguard-rules.pro +++ b/examples/Basic/android/app/proguard-rules.pro @@ -50,6 +50,10 @@ -dontwarn com.facebook.react.** +# TextLayoutBuilder uses a non-public Android constructor within StaticLayout. +# See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details. +-dontwarn android.text.StaticLayout + # okhttp -keepattributes Signature diff --git a/examples/Basic/android/app/src/main/AndroidManifest.xml b/examples/Basic/android/app/src/main/AndroidManifest.xml index 7a1ac01..3ecba85 100644 --- a/examples/Basic/android/app/src/main/AndroidManifest.xml +++ b/examples/Basic/android/app/src/main/AndroidManifest.xml @@ -19,16 +19,11 @@ + android:configChanges="keyboard|keyboardHidden|orientation|screenSize" + android:windowSoftInputMode="adjustResize"> - - - - - - - - + + diff --git a/examples/Basic/android/app/src/main/java/com/basic/MainApplication.java b/examples/Basic/android/app/src/main/java/com/basic/MainApplication.java index 867946e..cd360c6 100644 --- a/examples/Basic/android/app/src/main/java/com/basic/MainApplication.java +++ b/examples/Basic/android/app/src/main/java/com/basic/MainApplication.java @@ -1,10 +1,8 @@ package com.basic; import android.app.Application; -import android.util.Log; import com.facebook.react.ReactApplication; -import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.react.shell.MainReactPackage; diff --git a/examples/Basic/android/build.gradle b/examples/Basic/android/build.gradle index fcba4c5..eed9972 100644 --- a/examples/Basic/android/build.gradle +++ b/examples/Basic/android/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.1' + classpath 'com.android.tools.build:gradle:2.2.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/examples/Basic/android/gradle/wrapper/gradle-wrapper.properties b/examples/Basic/android/gradle/wrapper/gradle-wrapper.properties index b9fbfab..dbdc05d 100644 --- a/examples/Basic/android/gradle/wrapper/gradle-wrapper.properties +++ b/examples/Basic/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/examples/Basic/app.json b/examples/Basic/app.json new file mode 100644 index 0000000..05d2514 --- /dev/null +++ b/examples/Basic/app.json @@ -0,0 +1,4 @@ +{ + "name": "Basic", + "displayName": "Basic" +} \ No newline at end of file diff --git a/examples/Basic/ios/Basic.xcodeproj/project.pbxproj b/examples/Basic/ios/Basic.xcodeproj/project.pbxproj index 9141601..355ccfb 100644 --- a/examples/Basic/ios/Basic.xcodeproj/project.pbxproj +++ b/examples/Basic/ios/Basic.xcodeproj/project.pbxproj @@ -25,7 +25,7 @@ 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */; }; + 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; }; 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */; }; 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */; }; @@ -289,7 +289,7 @@ buildActionMask = 2147483647; files = ( 2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */, - 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation-tvOS.a in Frameworks */, + 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */, 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */, 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */, 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */, @@ -419,7 +419,7 @@ isa = PBXGroup; children = ( 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, - 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */, + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */, ); name = Products; sourceTree = ""; @@ -564,17 +564,13 @@ 83CBB9F71A601CBA00E9B192 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0820; + LastUpgradeCheck = 0830; ORGANIZATIONNAME = Facebook; TargetAttributes = { 00E356ED1AD99517003FC87E = { CreatedOnToolsVersion = 6.2; - DevelopmentTeam = 99D895TFL2; TestTargetID = 13B07F861A680F5B00A75B9A; }; - 13B07F861A680F5B00A75B9A = { - DevelopmentTeam = 99D895TFL2; - }; 2D02E47A1E0B4A5D006451C7 = { CreatedOnToolsVersion = 8.2.1; ProvisioningStyle = Automatic; @@ -808,10 +804,10 @@ remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */ = { + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; - path = "libRCTAnimation-tvOS.a"; + path = libRCTAnimation.a; remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -963,7 +959,6 @@ isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - DEVELOPMENT_TEAM = 99D895TFL2; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", @@ -986,7 +981,6 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = 99D895TFL2; INFOPLIST_FILE = BasicTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -1006,8 +1000,6 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = NO; - DEVELOPMENT_TEAM = 99D895TFL2; - HEADER_SEARCH_PATHS = "$(SRCROOT)/../node_modules/react-native/Libraries/**"; INFOPLIST_FILE = Basic/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( @@ -1026,8 +1018,6 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 99D895TFL2; - HEADER_SEARCH_PATHS = "$(SRCROOT)/../node_modules/react-native/Libraries/**"; INFOPLIST_FILE = Basic/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( diff --git a/examples/Basic/ios/Basic.xcodeproj/xcshareddata/xcschemes/Basic-tvOS.xcscheme b/examples/Basic/ios/Basic.xcodeproj/xcshareddata/xcschemes/Basic-tvOS.xcscheme index c3bc087..345e519 100644 --- a/examples/Basic/ios/Basic.xcodeproj/xcshareddata/xcschemes/Basic-tvOS.xcscheme +++ b/examples/Basic/ios/Basic.xcodeproj/xcshareddata/xcschemes/Basic-tvOS.xcscheme @@ -1,6 +1,6 @@ #import -#import "RCTLinkingManager.h" @implementation AppDelegate -- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication annotation:(id)annotation -{ - return [RCTLinkingManager application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; -} - - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSURL *jsCodeLocation; diff --git a/examples/Basic/ios/Basic/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/Basic/ios/Basic/Images.xcassets/AppIcon.appiconset/Contents.json index b8236c6..118c98f 100644 --- a/examples/Basic/ios/Basic/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/examples/Basic/ios/Basic/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,15 +1,5 @@ { "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, { "idiom" : "iphone", "size" : "29x29", diff --git a/examples/Basic/ios/Basic/Info.plist b/examples/Basic/ios/Basic/Info.plist index 41bb48f..af5d429 100644 --- a/examples/Basic/ios/Basic/Info.plist +++ b/examples/Basic/ios/Basic/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion en + CFBundleDisplayName + Basic CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -49,16 +51,5 @@ UIViewControllerBasedStatusBarAppearance - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLSchemes - - deeplink - - - diff --git a/examples/Basic/ios/BasicTests/BasicTests.m b/examples/Basic/ios/BasicTests/BasicTests.m index 0912336..7a53df0 100644 --- a/examples/Basic/ios/BasicTests/BasicTests.m +++ b/examples/Basic/ios/BasicTests/BasicTests.m @@ -37,7 +37,7 @@ - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test - (void)testRendersWelcomeScreen { - UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; + UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; BOOL foundElement = NO; diff --git a/examples/Basic/package.json b/examples/Basic/package.json index 05f33e6..c69359f 100644 --- a/examples/Basic/package.json +++ b/examples/Basic/package.json @@ -1,15 +1,25 @@ { - "name": "Basic", - "version": "0.0.1", - "private": true, - "scripts": { - "start": "node node_modules/react-native/local-cli/cli.js start" - }, - "dependencies": { - "react": "^15.4.1", - "react-native": "^0.41.1", - "react-router": "4.0.0", - "react-router-native": "4.0.0", + "name": "Basic", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node node_modules/react-native/local-cli/cli.js start", + "test": "jest" + }, + "dependencies": { + "react": "16.0.0-alpha.6", + "react-native": "0.44.0", + "react-router": "4.1.1", + "react-router-native": "4.1.1", "react-router-navigation": "file:./../../" - } + }, + "devDependencies": { + "babel-jest": "20.0.1", + "babel-preset-react-native": "1.9.2", + "jest": "20.0.1", + "react-test-renderer": "16.0.0-alpha.6" + }, + "jest": { + "preset": "react-native" + } } diff --git a/examples/Basic/src/index.js b/examples/Basic/src/index.js index 2ff4a02..b1d8d3d 100644 --- a/examples/Basic/src/index.js +++ b/examples/Basic/src/index.js @@ -67,9 +67,12 @@ class App extends Component { /> ( + render={() => ( - + Push tabs @@ -79,12 +82,12 @@ class App extends Component { ( - + render={({ match, location }) => ( + } + path={match.url} + render={() => } /> ( @@ -94,7 +97,7 @@ class App extends Component { tabBarIndicatorStyle={styles.indicator} > ( @@ -103,7 +106,7 @@ class App extends Component { )} /> ( @@ -112,7 +115,7 @@ class App extends Component { )} /> ( From c0130e705ec84818ffb2a1ea63b3d95ce0cbf497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 17 May 2017 14:37:11 +0200 Subject: [PATCH 08/50] chore(examples): fix Huge app --- examples/Huge/app.json | 4 + .../modules/Feed/components/Article/index.js | 1 - examples/Huge/yarn.lock | 3939 ----------------- 3 files changed, 4 insertions(+), 3940 deletions(-) create mode 100644 examples/Huge/app.json delete mode 100644 examples/Huge/yarn.lock diff --git a/examples/Huge/app.json b/examples/Huge/app.json new file mode 100644 index 0000000..1e319da --- /dev/null +++ b/examples/Huge/app.json @@ -0,0 +1,4 @@ +{ + "name": "Huge", + "displayName": "Huge" +} \ No newline at end of file diff --git a/examples/Huge/src/app/modules/Feed/components/Article/index.js b/examples/Huge/src/app/modules/Feed/components/Article/index.js index e5ed6e7..9d4b741 100644 --- a/examples/Huge/src/app/modules/Feed/components/Article/index.js +++ b/examples/Huge/src/app/modules/Feed/components/Article/index.js @@ -29,7 +29,6 @@ class Article extends Component { render() { const { match } = this.props - if (!match) return null return ( diff --git a/examples/Huge/yarn.lock b/examples/Huge/yarn.lock deleted file mode 100644 index 59e31f7..0000000 --- a/examples/Huge/yarn.lock +++ /dev/null @@ -1,3939 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -abab@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" - -absolute-path@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" - -accepts@~1.2.12, accepts@~1.2.13: - version "1.2.13" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea" - dependencies: - mime-types "~2.1.6" - negotiator "0.5.3" - -accepts@~1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" - dependencies: - mime-types "~2.1.11" - negotiator "0.6.1" - -acorn-globals@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" - dependencies: - acorn "^4.0.4" - -acorn@^4.0.4: - version "4.0.11" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" - -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - -ansi-regex@^2.0.0, ansi-regex@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -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.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" - dependencies: - color-convert "^1.0.0" - -ansi@^0.3.0, ansi@~0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" - -anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" - dependencies: - arrify "^1.0.0" - micromatch "^2.1.5" - -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - dependencies: - default-require-extensions "^1.0.0" - -are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -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" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-flatten@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" - -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - -array-uniq@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -arrify@^1.0.0, arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -art@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/art/-/art-0.10.1.tgz#38541883e399225c5e193ff246e8f157cf7b2146" - -asap@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.0.1, async@^2.1.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" - dependencies: - lodash "^4.14.0" - -async@~0.2.6: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - -babel-code-frame@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" - dependencies: - chalk "^1.1.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -babel-core@^6.0.0, babel-core@^6.21.0, babel-core@^6.24.1, babel-core@^6.7.2: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" - dependencies: - babel-code-frame "^6.22.0" - babel-generator "^6.24.1" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babylon "^6.11.0" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" - slash "^1.0.0" - source-map "^0.5.0" - -babel-generator@^6.18.0, babel-generator@^6.21.0, babel-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" - trim-right "^1.0.1" - -babel-helper-builder-react-jsx@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.24.1.tgz#0ad7917e33c8d751e646daca4e77cc19377d2cbc" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - esutils "^2.0.0" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - lodash "^4.2.0" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - lodash "^4.2.0" - -babel-helper-remap-async-to-generator@^6.16.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-jest@20.0.1, babel-jest@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.1.tgz#9cbe9a15bbe3f1ca1b727dc8e45a4161771d3655" - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.0.0" - babel-preset-jest "^20.0.1" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-check-es2015-constants@^6.5.0, babel-plugin-check-es2015-constants@^6.7.2, babel-plugin-check-es2015-constants@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-external-helpers@^6.18.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-istanbul@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.3.tgz#6ee6280410dcf59c7747518c3dfd98680958f102" - dependencies: - find-up "^2.1.0" - istanbul-lib-instrument "^1.7.1" - test-exclude "^4.1.0" - -babel-plugin-jest-hoist@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.1.tgz#1b9cc322cff704d3812d1bca8dccd12205eedfd5" - -babel-plugin-react-transform@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-2.0.2.tgz#515bbfa996893981142d90b1f9b1635de2995109" - dependencies: - lodash "^4.6.1" - -babel-plugin-syntax-async-functions@^6.5.0, babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-class-properties@^6.5.0, babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - -babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.5.0, babel-plugin-syntax-flow@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" - -babel-plugin-syntax-jsx@^6.5.0, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - -babel-plugin-syntax-object-rest-spread@^6.5.0, babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - -babel-plugin-syntax-trailing-function-commas@^6.20.0, babel-plugin-syntax-trailing-function-commas@^6.5.0, babel-plugin-syntax-trailing-function-commas@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - -babel-plugin-transform-async-to-generator@6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" - dependencies: - babel-helper-remap-async-to-generator "^6.16.0" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.0.0" - -babel-plugin-transform-class-properties@^6.5.0, babel-plugin-transform-class-properties@^6.6.0, babel-plugin-transform-class-properties@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" - dependencies: - babel-helper-function-name "^6.24.1" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-arrow-functions@^6.5.0, babel-plugin-transform-es2015-arrow-functions@^6.5.2, babel-plugin-transform-es2015-arrow-functions@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.6.5, babel-plugin-transform-es2015-block-scoped-functions@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.5.0, babel-plugin-transform-es2015-block-scoping@^6.7.1, babel-plugin-transform-es2015-block-scoping@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - lodash "^4.2.0" - -babel-plugin-transform-es2015-classes@^6.5.0, babel-plugin-transform-es2015-classes@^6.6.5, babel-plugin-transform-es2015-classes@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.5.0, babel-plugin-transform-es2015-computed-properties@^6.6.5, babel-plugin-transform-es2015-computed-properties@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@6.x, babel-plugin-transform-es2015-destructuring@^6.5.0, babel-plugin-transform-es2015-destructuring@^6.6.5, babel-plugin-transform-es2015-destructuring@^6.8.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-for-of@^6.5.0, babel-plugin-transform-es2015-for-of@^6.6.0, babel-plugin-transform-es2015-for-of@^6.8.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@6.x, babel-plugin-transform-es2015-function-name@^6.5.0, babel-plugin-transform-es2015-function-name@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.5.0, babel-plugin-transform-es2015-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-commonjs@6.x, babel-plugin-transform-es2015-modules-commonjs@^6.5.0, babel-plugin-transform-es2015-modules-commonjs@^6.7.0, babel-plugin-transform-es2015-modules-commonjs@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.6.5, babel-plugin-transform-es2015-object-super@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@6.x, babel-plugin-transform-es2015-parameters@^6.5.0, babel-plugin-transform-es2015-parameters@^6.7.0, babel-plugin-transform-es2015-parameters@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@6.x, babel-plugin-transform-es2015-shorthand-properties@^6.5.0, babel-plugin-transform-es2015-shorthand-properties@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@6.x, babel-plugin-transform-es2015-spread@^6.5.0, babel-plugin-transform-es2015-spread@^6.6.5, babel-plugin-transform-es2015-spread@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@6.x: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.5.0, babel-plugin-transform-es2015-template-literals@^6.6.5, babel-plugin-transform-es2015-template-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@6.x: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-es3-member-expression-literals@^6.5.0, babel-plugin-transform-es3-member-expression-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es3-property-literals@^6.5.0, babel-plugin-transform-es3-property-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-flow-strip-types@^6.21.0, babel-plugin-transform-flow-strip-types@^6.5.0, babel-plugin-transform-flow-strip-types@^6.7.0, babel-plugin-transform-flow-strip-types@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-object-assign@^6.5.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@^6.20.2, babel-plugin-transform-object-rest-spread@^6.5.0, babel-plugin-transform-object-rest-spread@^6.6.5, babel-plugin-transform-object-rest-spread@^6.8.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-display-name@^6.5.0, babel-plugin-transform-react-display-name@^6.8.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.23.0.tgz#4398910c358441dc4cef18787264d0412ed36b37" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-source@^6.5.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx@^6.5.0, babel-plugin-transform-react-jsx@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@^6.5.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" - dependencies: - regenerator-transform "0.9.11" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-polyfill@^6.20.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" - dependencies: - babel-runtime "^6.22.0" - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-preset-es2015-node@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2015-node/-/babel-preset-es2015-node-6.1.1.tgz#60b23157024b0cfebf3a63554cb05ee035b4e55f" - dependencies: - babel-plugin-transform-es2015-destructuring "6.x" - babel-plugin-transform-es2015-function-name "6.x" - babel-plugin-transform-es2015-modules-commonjs "6.x" - babel-plugin-transform-es2015-parameters "6.x" - babel-plugin-transform-es2015-shorthand-properties "6.x" - babel-plugin-transform-es2015-spread "6.x" - babel-plugin-transform-es2015-sticky-regex "6.x" - babel-plugin-transform-es2015-unicode-regex "6.x" - semver "5.x" - -babel-preset-fbjs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-1.0.0.tgz#c972e5c9b301d4ec9e7971f4aec3e14ac017a8b0" - dependencies: - babel-plugin-check-es2015-constants "^6.7.2" - babel-plugin-syntax-flow "^6.5.0" - babel-plugin-syntax-object-rest-spread "^6.5.0" - babel-plugin-syntax-trailing-function-commas "^6.5.0" - babel-plugin-transform-class-properties "^6.6.0" - babel-plugin-transform-es2015-arrow-functions "^6.5.2" - babel-plugin-transform-es2015-block-scoped-functions "^6.6.5" - babel-plugin-transform-es2015-block-scoping "^6.7.1" - babel-plugin-transform-es2015-classes "^6.6.5" - babel-plugin-transform-es2015-computed-properties "^6.6.5" - babel-plugin-transform-es2015-destructuring "^6.6.5" - babel-plugin-transform-es2015-for-of "^6.6.0" - babel-plugin-transform-es2015-literals "^6.5.0" - babel-plugin-transform-es2015-modules-commonjs "^6.7.0" - babel-plugin-transform-es2015-object-super "^6.6.5" - babel-plugin-transform-es2015-parameters "^6.7.0" - babel-plugin-transform-es2015-shorthand-properties "^6.5.0" - babel-plugin-transform-es2015-spread "^6.6.5" - babel-plugin-transform-es2015-template-literals "^6.6.5" - babel-plugin-transform-es3-member-expression-literals "^6.5.0" - babel-plugin-transform-es3-property-literals "^6.5.0" - babel-plugin-transform-flow-strip-types "^6.7.0" - babel-plugin-transform-object-rest-spread "^6.6.5" - object-assign "^4.0.1" - -babel-preset-fbjs@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.2.tgz#f52b2df56b1da883ffb7798b3b3be42c4c647a77" - dependencies: - babel-plugin-check-es2015-constants "^6.8.0" - babel-plugin-syntax-class-properties "^6.8.0" - babel-plugin-syntax-flow "^6.8.0" - babel-plugin-syntax-jsx "^6.8.0" - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-plugin-syntax-trailing-function-commas "^6.8.0" - babel-plugin-transform-class-properties "^6.8.0" - babel-plugin-transform-es2015-arrow-functions "^6.8.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.8.0" - babel-plugin-transform-es2015-block-scoping "^6.8.0" - babel-plugin-transform-es2015-classes "^6.8.0" - babel-plugin-transform-es2015-computed-properties "^6.8.0" - babel-plugin-transform-es2015-destructuring "^6.8.0" - babel-plugin-transform-es2015-for-of "^6.8.0" - babel-plugin-transform-es2015-function-name "^6.8.0" - babel-plugin-transform-es2015-literals "^6.8.0" - babel-plugin-transform-es2015-modules-commonjs "^6.8.0" - babel-plugin-transform-es2015-object-super "^6.8.0" - babel-plugin-transform-es2015-parameters "^6.8.0" - babel-plugin-transform-es2015-shorthand-properties "^6.8.0" - babel-plugin-transform-es2015-spread "^6.8.0" - babel-plugin-transform-es2015-template-literals "^6.8.0" - babel-plugin-transform-es3-member-expression-literals "^6.8.0" - babel-plugin-transform-es3-property-literals "^6.8.0" - babel-plugin-transform-flow-strip-types "^6.8.0" - babel-plugin-transform-object-rest-spread "^6.8.0" - babel-plugin-transform-react-display-name "^6.8.0" - babel-plugin-transform-react-jsx "^6.8.0" - -babel-preset-jest@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.1.tgz#8a9e23ce8a0f0c49835de53ed73ecf75dd6daa2e" - dependencies: - babel-plugin-jest-hoist "^20.0.1" - -babel-preset-react-native@1.9.2, babel-preset-react-native@^1.9.1: - version "1.9.2" - resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-1.9.2.tgz#b22addd2e355ff3b39671b79be807e52dfa145f2" - dependencies: - babel-plugin-check-es2015-constants "^6.5.0" - babel-plugin-react-transform "2.0.2" - babel-plugin-syntax-async-functions "^6.5.0" - babel-plugin-syntax-class-properties "^6.5.0" - babel-plugin-syntax-flow "^6.5.0" - babel-plugin-syntax-jsx "^6.5.0" - babel-plugin-syntax-trailing-function-commas "^6.5.0" - babel-plugin-transform-class-properties "^6.5.0" - babel-plugin-transform-es2015-arrow-functions "^6.5.0" - babel-plugin-transform-es2015-block-scoping "^6.5.0" - babel-plugin-transform-es2015-classes "^6.5.0" - babel-plugin-transform-es2015-computed-properties "^6.5.0" - babel-plugin-transform-es2015-destructuring "^6.5.0" - babel-plugin-transform-es2015-for-of "^6.5.0" - babel-plugin-transform-es2015-function-name "^6.5.0" - babel-plugin-transform-es2015-literals "^6.5.0" - babel-plugin-transform-es2015-modules-commonjs "^6.5.0" - babel-plugin-transform-es2015-parameters "^6.5.0" - babel-plugin-transform-es2015-shorthand-properties "^6.5.0" - babel-plugin-transform-es2015-spread "^6.5.0" - babel-plugin-transform-es2015-template-literals "^6.5.0" - babel-plugin-transform-flow-strip-types "^6.5.0" - babel-plugin-transform-object-assign "^6.5.0" - babel-plugin-transform-object-rest-spread "^6.5.0" - babel-plugin-transform-react-display-name "^6.5.0" - babel-plugin-transform-react-jsx "^6.5.0" - babel-plugin-transform-react-jsx-source "^6.5.0" - babel-plugin-transform-regenerator "^6.5.0" - react-transform-hmr "^1.0.4" - -babel-register@^6.18.0, babel-register@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" - dependencies: - babel-core "^6.24.1" - babel-runtime "^6.22.0" - core-js "^2.4.0" - home-or-tmp "^2.0.0" - lodash "^4.2.0" - mkdirp "^0.5.1" - source-map-support "^0.4.2" - -babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-template@^6.16.0, babel-template@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babylon "^6.11.0" - lodash "^4.2.0" - -babel-traverse@^6.18.0, babel-traverse@^6.21.0, babel-traverse@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" - dependencies: - babel-code-frame "^6.22.0" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - babylon "^6.15.0" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" - -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" - dependencies: - babel-runtime "^6.22.0" - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" - -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.16.1: - version "6.17.1" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" - -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -base64-js@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" - -base64-js@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" - -base64-js@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" - -base64-url@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.2.1.tgz#199fd661702a0e7b7dcae6e0698bb089c52f6d78" - -basic-auth-connect@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" - -basic-auth@~1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.4.tgz#030935b01de7c9b94a824b29f3fccb750d3a5290" - -batch@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" - -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - dependencies: - tweetnacl "^0.14.3" - -beeper@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" - -big-integer@^1.6.7: - version "1.6.22" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.22.tgz#487c95fce886022ea48ff5f19e388932df46dd2e" - -body-parser@~1.13.3: - version "1.13.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.13.3.tgz#c08cf330c3358e151016a05746f13f029c97fa97" - dependencies: - bytes "2.1.0" - content-type "~1.0.1" - debug "~2.2.0" - depd "~1.0.1" - http-errors "~1.3.1" - iconv-lite "0.4.11" - on-finished "~2.3.0" - qs "4.0.0" - raw-body "~2.1.2" - type-is "~1.6.6" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -bplist-creator@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" - dependencies: - stream-buffers "~2.2.0" - -bplist-parser@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" - dependencies: - big-integer "^1.6.7" - -brace-expansion@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" - dependencies: - balanced-match "^0.4.1" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -browser-resolve@^1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" - dependencies: - resolve "1.1.7" - -bser@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" - dependencies: - node-int64 "^0.4.0" - -bser@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.3.tgz#d63da19ee17330a0e260d2a34422b21a89520317" - dependencies: - node-int64 "^0.4.0" - -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" - dependencies: - node-int64 "^0.4.0" - -buffer-shims@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -bytes@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.1.0.tgz#ac93c410e2ffc9cc7cf4b464b38289067f5e47b4" - -bytes@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, 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" - -ci-info@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" - -cli-cursor@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - dependencies: - restore-cursor "^1.0.1" - -cli-width@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -clone-stats@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" - -clone@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -color-convert@^1.0.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.2" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" - -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" - dependencies: - delayed-stream "~1.0.0" - -commander@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - -compressible@~2.0.5: - version "2.0.10" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.10.tgz#feda1c7f7617912732b29bf8cf26252a20b9eecd" - dependencies: - mime-db ">= 1.27.0 < 2" - -compression@~1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.5.2.tgz#b03b8d86e6f8ad29683cba8df91ddc6ffc77b395" - dependencies: - accepts "~1.2.12" - bytes "2.1.0" - compressible "~2.0.5" - debug "~2.2.0" - on-headers "~1.0.0" - vary "~1.0.1" - -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" - -connect-timeout@~1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/connect-timeout/-/connect-timeout-1.6.2.tgz#de9a5ec61e33a12b6edaab7b5f062e98c599b88e" - dependencies: - debug "~2.2.0" - http-errors "~1.3.1" - ms "0.7.1" - on-headers "~1.0.0" - -connect@^2.8.3: - version "2.30.2" - resolved "https://registry.yarnpkg.com/connect/-/connect-2.30.2.tgz#8da9bcbe8a054d3d318d74dfec903b5c39a1b609" - dependencies: - basic-auth-connect "1.0.0" - body-parser "~1.13.3" - bytes "2.1.0" - compression "~1.5.2" - connect-timeout "~1.6.2" - content-type "~1.0.1" - cookie "0.1.3" - cookie-parser "~1.3.5" - cookie-signature "1.0.6" - csurf "~1.8.3" - debug "~2.2.0" - depd "~1.0.1" - errorhandler "~1.4.2" - express-session "~1.11.3" - finalhandler "0.4.0" - fresh "0.3.0" - http-errors "~1.3.1" - method-override "~2.3.5" - morgan "~1.6.1" - multiparty "3.3.2" - on-headers "~1.0.0" - parseurl "~1.3.0" - pause "0.1.0" - qs "4.0.0" - response-time "~2.3.1" - serve-favicon "~2.3.0" - serve-index "~1.7.2" - serve-static "~1.10.0" - type-is "~1.6.6" - utils-merge "1.0.0" - vhost "~3.0.1" - -content-type-parser@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" - -content-type@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" - -convert-source-map@^1.1.0, convert-source-map@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" - -cookie-parser@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.3.5.tgz#9d755570fb5d17890771227a02314d9be7cf8356" - dependencies: - cookie "0.1.3" - cookie-signature "1.0.6" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.3.tgz#e734a5c1417fce472d5aef82c381cabb64d1a435" - -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - -core-js@^2.2.2, core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" - -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" - -crc@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.3.0.tgz#fa622e1bc388bf257309082d6b65200ce67090ba" - -cross-spawn@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -csrf@~3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/csrf/-/csrf-3.0.6.tgz#b61120ddceeafc91e76ed5313bb5c0b2667b710a" - dependencies: - rndm "1.2.0" - tsscmp "1.0.5" - uid-safe "2.1.4" - -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" - -"cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" - dependencies: - cssom "0.3.x" - -csurf@~1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/csurf/-/csurf-1.8.3.tgz#23f2a13bf1d8fce1d0c996588394442cba86a56a" - dependencies: - cookie "0.1.3" - cookie-signature "1.0.6" - csrf "~3.0.0" - http-errors "~1.3.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -dateformat@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" - -debug@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" - dependencies: - ms "0.7.2" - -debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: - version "2.6.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" - dependencies: - ms "2.0.0" - -debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - dependencies: - ms "0.7.1" - -decamelize@^1.0.0, decamelize@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" - dependencies: - strip-bom "^2.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -denodeify@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" - -depd@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa" - -depd@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -diff@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" - -dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" - -duplexer2@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" - dependencies: - readable-stream "~1.1.9" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -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" - -"errno@>=0.1.1 <0.2.0-0": - version "0.1.4" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" - dependencies: - prr "~0.0.0" - -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" - -errorhandler@~1.4.2: - version "1.4.3" - resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.4.3.tgz#b7b70ed8f359e9db88092f2d20c0f831420ad83f" - dependencies: - accepts "~1.3.0" - escape-html "~1.0.3" - -escape-html@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -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" - -escodegen@^1.6.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" - -event-target-shim@^1.0.5: - version "1.1.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-1.1.1.tgz#a86e5ee6bdaa16054475da797ccddf0c55698491" - -exec-sh@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" - dependencies: - merge "^1.1.3" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -express-session@~1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.11.3.tgz#5cc98f3f5ff84ed835f91cbf0aabd0c7107400af" - dependencies: - cookie "0.1.3" - cookie-signature "1.0.6" - crc "3.3.0" - debug "~2.2.0" - depd "~1.0.1" - on-headers "~1.0.0" - parseurl "~1.3.0" - uid-safe "~2.0.0" - utils-merge "1.0.0" - -extend@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" - -fancy-log@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" - dependencies: - chalk "^1.1.1" - time-stamp "^1.0.0" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fb-watchman@^1.8.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" - dependencies: - bser "1.0.2" - -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - dependencies: - bser "^2.0.0" - -fbjs-scripts@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-0.7.1.tgz#4f115e218e243e3addbf0eddaac1e3c62f703fac" - dependencies: - babel-core "^6.7.2" - babel-preset-fbjs "^1.0.0" - core-js "^1.0.0" - cross-spawn "^3.0.1" - gulp-util "^3.0.4" - object-assign "^4.0.1" - semver "^5.1.0" - through2 "^2.0.0" - -fbjs@^0.8.9, fbjs@~0.8.9: - version "0.8.12" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.9" - -figures@^1.3.5: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -finalhandler@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.0.tgz#965a52d9e8d05d2b857548541fb89b53a2497d9b" - dependencies: - debug "~2.2.0" - escape-html "1.0.2" - on-finished "~2.3.0" - unpipe "~1.0.0" - -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.1.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" - -for-in@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@^2.1.1, form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -fresh@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" - -fs-extra@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -gauge@~1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" - dependencies: - ansi "^0.3.0" - has-unicode "^2.0.0" - lodash.pad "^4.1.0" - lodash.padend "^4.1.0" - lodash.padstart "^4.1.0" - -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" - dependencies: - min-document "^2.19.0" - process "~0.5.1" - -globals@^9.0.0: - version "9.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" - -glogg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" - dependencies: - sparkles "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -gulp-util@^3.0.4: - version "3.0.8" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" - dependencies: - array-differ "^1.0.0" - array-uniq "^1.0.2" - beeper "^1.0.0" - chalk "^1.0.0" - dateformat "^2.0.0" - fancy-log "^1.1.0" - gulplog "^1.0.0" - has-gulplog "^0.1.0" - lodash._reescape "^3.0.0" - lodash._reevaluate "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.template "^3.0.0" - minimist "^1.1.0" - multipipe "^0.1.2" - object-assign "^3.0.0" - replace-ext "0.0.1" - through2 "^2.0.0" - vinyl "^0.5.0" - -gulplog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" - dependencies: - glogg "^1.0.0" - -handlebars@^4.0.3: - version "4.0.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.8.tgz#22b875cd3f0e6cbea30314f144e82bc7a72ff420" - dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -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@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-gulplog@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" - dependencies: - sparkles "^1.0.0" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -hosted-git-info@^2.1.4: - version "2.4.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" - -html-encoding-sniffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" - dependencies: - whatwg-encoding "^1.0.1" - -http-errors@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz#197e22cdebd4198585e8694ef6786197b91ed942" - dependencies: - inherits "~2.0.1" - statuses "1" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -iconv-lite@0.4.11: - version "0.4.11" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.11.tgz#2ecb42fd294744922209a2e7c404dac8793d8ade" - -iconv-lite@0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" - -iconv-lite@~0.4.13: - version "0.4.17" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d" - -image-size@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.3.5.tgz#83240eab2fb5b00b04aab8c74b0471e9cba7ad8c" - -immutable@~3.7.6: - version "3.7.6" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" - -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.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -inquirer@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" - dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^2.0.0" - figures "^1.3.5" - lodash "^4.3.0" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" - strip-ansi "^3.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" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-buffer@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" - -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-ci@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" - dependencies: - ci-info "^1.0.0" - -is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-number@^2.0.2, is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-stream@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isemail@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istanbul-api@^1.1.1: - version "1.1.8" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e" - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.1.0" - istanbul-lib-hook "^1.0.6" - istanbul-lib-instrument "^1.7.1" - istanbul-lib-report "^1.1.0" - istanbul-lib-source-maps "^1.2.0" - istanbul-reports "^1.1.0" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" - -istanbul-lib-hook@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f" - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.13.0" - istanbul-lib-coverage "^1.1.0" - semver "^5.3.0" - -istanbul-lib-report@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770" - dependencies: - istanbul-lib-coverage "^1.1.0" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e" - dependencies: - debug "^2.6.3" - istanbul-lib-coverage "^1.1.0" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66" - dependencies: - handlebars "^4.0.3" - -jest-changed-files@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.1.tgz#ba9bd42c3fddb1b7c4ae40065199b44a2335e152" - -jest-cli@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.1.tgz#86ca0bc2e47215ad8e7dc85455c0210f86648502" - dependencies: - ansi-escapes "^1.4.0" - callsites "^2.0.0" - chalk "^1.1.3" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - istanbul-api "^1.1.1" - istanbul-lib-coverage "^1.0.1" - istanbul-lib-instrument "^1.4.2" - istanbul-lib-source-maps "^1.1.0" - jest-changed-files "^20.0.1" - jest-config "^20.0.1" - jest-docblock "^20.0.1" - jest-environment-jsdom "^20.0.1" - jest-haste-map "^20.0.1" - jest-jasmine2 "^20.0.1" - jest-message-util "^20.0.1" - jest-regex-util "^20.0.1" - jest-resolve-dependencies "^20.0.1" - jest-runtime "^20.0.1" - jest-snapshot "^20.0.1" - jest-util "^20.0.1" - micromatch "^2.3.11" - node-notifier "^5.0.2" - pify "^2.3.0" - slash "^1.0.0" - string-length "^1.0.1" - throat "^3.0.0" - which "^1.2.12" - worker-farm "^1.3.1" - yargs "^7.0.2" - -jest-config@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.1.tgz#c6934f585c3e1775c96133efb302f986c3909ad8" - dependencies: - chalk "^1.1.3" - glob "^7.1.1" - jest-environment-jsdom "^20.0.1" - jest-environment-node "^20.0.1" - jest-jasmine2 "^20.0.1" - jest-matcher-utils "^20.0.1" - jest-regex-util "^20.0.1" - jest-resolve "^20.0.1" - jest-validate "^20.0.1" - pretty-format "^20.0.1" - -jest-diff@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.1.tgz#2567c80c324243328321386f8871a28ec9d350ac" - dependencies: - chalk "^1.1.3" - diff "^3.2.0" - jest-matcher-utils "^20.0.1" - pretty-format "^20.0.1" - -jest-docblock@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.1.tgz#055e0bbcb76798198479901f92d2733bf619f854" - -jest-environment-jsdom@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.1.tgz#2d29f81368987d387c70ce4f500c6aa560f9b4f7" - dependencies: - jest-mock "^20.0.1" - jest-util "^20.0.1" - jsdom "^9.12.0" - -jest-environment-node@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.1.tgz#75ab5358072ee1efebc54f43474357d7b3d674c7" - dependencies: - jest-mock "^20.0.1" - jest-util "^20.0.1" - -jest-haste-map@19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.0.tgz#adde00b62b1fe04432a104b3254fc5004514b55e" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.6" - micromatch "^2.3.11" - sane "~1.5.0" - worker-farm "^1.3.1" - -jest-haste-map@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.1.tgz#e6ba4db99ab512e7c081a5b0a0af731d0e193d56" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^20.0.1" - micromatch "^2.3.11" - sane "~1.6.0" - worker-farm "^1.3.1" - -jest-jasmine2@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.1.tgz#675772b1fd32ad74e92e8ae8282f8ea71d1de168" - dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-diff "^20.0.1" - jest-matcher-utils "^20.0.1" - jest-matchers "^20.0.1" - jest-message-util "^20.0.1" - jest-snapshot "^20.0.1" - once "^1.4.0" - p-map "^1.1.1" - -jest-matcher-utils@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.1.tgz#31aef67f59535af3c2271a3a3685db604dbd1622" - dependencies: - chalk "^1.1.3" - pretty-format "^20.0.1" - -jest-matchers@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.1.tgz#053b7654ce60129268f39992886e987a5201bb90" - dependencies: - jest-diff "^20.0.1" - jest-matcher-utils "^20.0.1" - jest-message-util "^20.0.1" - jest-regex-util "^20.0.1" - -jest-message-util@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.1.tgz#ac21cb055a6a5786b7f127ac7e705df5ffb1c335" - dependencies: - chalk "^1.1.3" - micromatch "^2.3.11" - slash "^1.0.0" - -jest-mock@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.1.tgz#f4cca2e87e441b66fabe4ead6a6d61773ec0773a" - -jest-regex-util@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.1.tgz#ecbcca8fbe4e217bca7f6f42a9b831d051224dc4" - -jest-resolve-dependencies@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.1.tgz#38fc012191775b0b277fabebb37aa8282e26846f" - dependencies: - jest-regex-util "^20.0.1" - -jest-resolve@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.1.tgz#cace553663f25c703dc977a4ce176e29eda92772" - dependencies: - browser-resolve "^1.11.2" - is-builtin-module "^1.0.0" - resolve "^1.3.2" - -jest-runtime@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.1.tgz#384f9298b8e8a177870c6d9ad0023db10ddcaedc" - dependencies: - babel-core "^6.0.0" - babel-jest "^20.0.1" - babel-plugin-istanbul "^4.0.0" - chalk "^1.1.3" - convert-source-map "^1.4.0" - graceful-fs "^4.1.11" - jest-config "^20.0.1" - jest-haste-map "^20.0.1" - jest-regex-util "^20.0.1" - jest-resolve "^20.0.1" - jest-util "^20.0.1" - json-stable-stringify "^1.0.1" - micromatch "^2.3.11" - strip-bom "3.0.0" - yargs "^7.0.2" - -jest-snapshot@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.1.tgz#3704c599705042f20ec7c95ba76a4524c744dfac" - dependencies: - chalk "^1.1.3" - jest-diff "^20.0.1" - jest-matcher-utils "^20.0.1" - jest-util "^20.0.1" - natural-compare "^1.4.0" - pretty-format "^20.0.1" - -jest-util@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.1.tgz#a3e7afb67110b2c3ac77b82e9a51ca57f4ff72a1" - dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-message-util "^20.0.1" - jest-mock "^20.0.1" - jest-validate "^20.0.1" - leven "^2.1.0" - mkdirp "^0.5.1" - -jest-validate@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.1.tgz#a236c29e3c29e9b92a1e5da211a732f0238da928" - dependencies: - chalk "^1.1.3" - jest-matcher-utils "^20.0.1" - leven "^2.1.0" - pretty-format "^20.0.1" - -jest@20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.1.tgz#4e268159ccc3b659966939de817c75bfe9e0157d" - dependencies: - jest-cli "^20.0.1" - -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" - -joi@^6.6.1: - version "6.10.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06" - dependencies: - hoek "2.x.x" - isemail "1.x.x" - moment "2.x.x" - topo "1.x.x" - -js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" - -js-yaml@^3.7.0: - version "3.8.4" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" - dependencies: - argparse "^1.0.7" - esprima "^3.1.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsdom@^9.12.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" - dependencies: - abab "^1.0.3" - acorn "^4.0.4" - acorn-globals "^3.1.0" - array-equal "^1.0.0" - content-type-parser "^1.0.1" - cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - escodegen "^1.6.1" - html-encoding-sniffer "^1.0.1" - nwmatcher ">= 1.3.9 < 2.0.0" - parse5 "^1.5.1" - request "^2.79.0" - sax "^1.2.1" - symbol-tree "^3.2.1" - tough-cookie "^2.3.2" - webidl-conversions "^4.0.0" - whatwg-encoding "^1.0.1" - whatwg-url "^4.3.0" - xml-name-validator "^2.0.1" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -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" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json5@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsprim@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" - dependencies: - assert-plus "1.0.0" - extsprintf "1.0.2" - json-schema "0.2.3" - verror "1.3.6" - -kind-of@^3.0.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: - graceful-fs "^4.1.9" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -left-pad@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.1.3.tgz#612f61c033f3a9e08e939f1caebeea41b6f3199a" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - -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@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.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._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basetostring@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" - -lodash._basevalues@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash._reescape@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" - -lodash._reevaluate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - -lodash._root@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - -lodash.escape@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" - dependencies: - lodash._root "^3.0.0" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.pad@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" - -lodash.padend@^4.1.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" - -lodash.padstart@^4.1.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" - -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - -lodash.template@^3.0.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" - dependencies: - lodash._basecopy "^3.0.0" - lodash._basetostring "^3.0.0" - lodash._basevalues "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - lodash.keys "^3.0.0" - lodash.restparam "^3.0.0" - lodash.templatesettings "^3.0.0" - -lodash.templatesettings@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - -lodash@^3.5.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - -lodash@^4.14.0, lodash@^4.16.6, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.6.1: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loose-envify@^1.0.0, loose-envify@^1.1.0: - 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.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" - dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - dependencies: - tmpl "1.0.x" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -merge@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - -method-override@~2.3.5: - version "2.3.8" - resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.8.tgz#178234bf4bab869f89df9444b06fc6147b44828c" - dependencies: - debug "2.6.3" - methods "~1.1.2" - parseurl "~1.3.1" - vary "~1.1.0" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -micromatch@^2.1.5, micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -"mime-db@>= 1.27.0 < 2", mime-db@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" - -mime-db@~1.23.0: - version "1.23.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" - -mime-types@2.1.11: - version "2.1.11" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" - dependencies: - mime-db "~1.23.0" - -mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: - version "2.1.15" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" - dependencies: - mime-db "~1.27.0" - -mime@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" - -mime@^1.3.4: - version "1.3.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - dependencies: - dom-walk "^0.1.0" - -minimatch@^3.0.2, minimatch@^3.0.3: - 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, minimist@~0.0.1: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -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" - -moment@2.x.x: - version "2.18.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" - -morgan@~1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.6.1.tgz#5fd818398c6819cba28a7cd6664f292fe1c0bbf2" - dependencies: - basic-auth "~1.0.3" - debug "~2.2.0" - depd "~1.0.1" - on-finished "~2.3.0" - on-headers "~1.0.0" - -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - -ms@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -multiparty@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-3.3.2.tgz#35de6804dc19643e5249f3d3e3bdc6c8ce301d3f" - dependencies: - readable-stream "~1.1.9" - stream-counter "~0.2.0" - -multipipe@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" - dependencies: - duplexer2 "0.0.2" - -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -negotiator@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -node-fetch@^1.0.1, node-fetch@^1.3.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - -node-notifier@^5.0.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" - dependencies: - growly "^1.3.0" - semver "^5.3.0" - shellwords "^0.1.0" - which "^1.2.12" - -normalize-package-data@^2.3.2: - version "2.3.8" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" - 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" - -normalize-path@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -npmlog@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" - dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -"nwmatcher@>= 1.3.9 < 2.0.0": - version "1.3.9" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.0, on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - -opn@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a" - dependencies: - object-assign "^4.0.1" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1: - 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" - -options@>=0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: - 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" - -p-map@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.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" - -parse5@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" - -parseurl@~1.3.0, parseurl@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" - -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-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -pause@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74" - -pegjs@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" - -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - -pify@^2.0.0, pify@^2.3.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" - -plist@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" - dependencies: - base64-js "1.1.2" - xmlbuilder "8.2.2" - xmldom "0.1.x" - -plist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/plist/-/plist-1.2.0.tgz#084b5093ddc92506e259f874b8d9b1afb8c79593" - dependencies: - base64-js "0.0.8" - util-deprecate "1.0.2" - xmlbuilder "4.0.0" - xmldom "0.1.x" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -pretty-format@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.1.tgz#ba95329771907c189643dd251e244061ff642350" - dependencies: - ansi-regex "^2.1.1" - ansi-styles "^3.0.0" - -pretty-format@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d" - -private@^0.1.6: - version "0.1.7" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" - -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" - -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - -promise@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" - dependencies: - asap "~2.0.3" - -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" - -pseudomap@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -qs@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - -random-bytes@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" - -randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" - dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" - -range-parser@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175" - -raw-body@~2.1.2: - version "2.1.7" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" - dependencies: - bytes "2.4.0" - iconv-lite "0.4.13" - unpipe "1.0.0" - -react-clone-referenced-element@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/react-clone-referenced-element/-/react-clone-referenced-element-1.0.1.tgz#2bba8c69404c5e4a944398600bcc4c941f860682" - -react-deep-force-update@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.0.1.tgz#f911b5be1d2a6fe387507dd6e9a767aa2924b4c7" - -react-devtools-core@^2.0.8: - version "2.1.9" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-2.1.9.tgz#825e0582b7f8587cbf56bb5ef1ea94d8b158543e" - dependencies: - shell-quote "^1.6.1" - ws "^2.0.3" - -react-native@0.44.0: - version "0.44.0" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.44.0.tgz#06427a30053f2d555c60fe0b9afcc6c778db09de" - dependencies: - absolute-path "^0.0.0" - art "^0.10.0" - async "^2.0.1" - babel-core "^6.21.0" - babel-generator "^6.21.0" - babel-plugin-external-helpers "^6.18.0" - babel-plugin-syntax-trailing-function-commas "^6.20.0" - babel-plugin-transform-async-to-generator "6.16.0" - babel-plugin-transform-flow-strip-types "^6.21.0" - babel-plugin-transform-object-rest-spread "^6.20.2" - babel-polyfill "^6.20.0" - babel-preset-es2015-node "^6.1.1" - babel-preset-fbjs "^2.1.0" - babel-preset-react-native "^1.9.1" - babel-register "^6.18.0" - babel-runtime "^6.20.0" - babel-traverse "^6.21.0" - babel-types "^6.21.0" - babylon "^6.16.1" - base64-js "^1.1.2" - bser "^1.0.2" - chalk "^1.1.1" - commander "^2.9.0" - concat-stream "^1.6.0" - connect "^2.8.3" - core-js "^2.2.2" - debug "^2.2.0" - denodeify "^1.2.1" - event-target-shim "^1.0.5" - fbjs "~0.8.9" - fbjs-scripts "^0.7.0" - form-data "^2.1.1" - fs-extra "^1.0.0" - glob "^7.1.1" - graceful-fs "^4.1.3" - image-size "^0.3.5" - immutable "~3.7.6" - imurmurhash "^0.1.4" - inquirer "^0.12.0" - jest-haste-map "19.0.0" - joi "^6.6.1" - json-stable-stringify "^1.0.1" - json5 "^0.4.0" - left-pad "^1.1.3" - lodash "^4.16.6" - mime "^1.3.4" - mime-types "2.1.11" - minimist "^1.2.0" - mkdirp "^0.5.1" - node-fetch "^1.3.3" - npmlog "^2.0.4" - opn "^3.0.2" - optimist "^0.6.1" - plist "^1.2.0" - pretty-format "^4.2.1" - promise "^7.1.1" - react-clone-referenced-element "^1.0.1" - react-devtools-core "^2.0.8" - react-timer-mixin "^0.13.2" - react-transform-hmr "^1.0.4" - rebound "^0.0.13" - regenerator-runtime "^0.9.5" - request "^2.79.0" - rimraf "^2.5.4" - sane "~1.4.1" - semver "^5.0.3" - shell-quote "1.6.1" - source-map "^0.5.6" - stacktrace-parser "^0.1.3" - temp "0.8.3" - throat "^3.0.0" - uglify-js "2.7.5" - whatwg-fetch "^1.0.0" - wordwrap "^1.0.0" - worker-farm "^1.3.1" - write-file-atomic "^1.2.0" - ws "^1.1.0" - xcode "^0.9.1" - xmldoc "^0.4.0" - xpipe "^1.0.5" - yargs "^6.4.0" - -react-proxy@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" - dependencies: - lodash "^4.6.1" - react-deep-force-update "^1.0.0" - -react-test-renderer@16.0.0-alpha.6: - version "16.0.0-alpha.6" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.0.0-alpha.6.tgz#c032def0dc8319cee39caa4e4373a60019cb3786" - dependencies: - fbjs "^0.8.9" - object-assign "^4.1.0" - -react-timer-mixin@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz#0da8b9f807ec07dc3e854d082c737c65605b3d22" - -react-transform-hmr@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" - dependencies: - global "^4.3.0" - react-proxy "^1.1.7" - -react@16.0.0-alpha.6: - version "16.0.0-alpha.6" - resolved "https://registry.yarnpkg.com/react/-/react-16.0.0-alpha.6.tgz#2ccb1afb4425ccc12f78a123a666f2e4c141adb9" - dependencies: - fbjs "^0.8.9" - loose-envify "^1.1.0" - object-assign "^4.1.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2: - version "2.2.9" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" - dependencies: - buffer-shims "~1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~1.0.0" - util-deprecate "~1.0.1" - -readable-stream@~1.1.8, readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readline2@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" - -rebound@^0.0.13: - version "0.0.13" - resolved "https://registry.yarnpkg.com/rebound/-/rebound-0.0.13.tgz#4a225254caf7da756797b19c5817bf7a7941fac1" - -regenerate@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" - -regenerator-runtime@^0.10.0: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" - -regenerator-runtime@^0.9.5: - version "0.9.6" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029" - -regenerator-transform@0.9.11: - version "0.9.11" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" - dependencies: - is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -replace-ext@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" - -request@^2.79.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" - dependencies: - path-parse "^1.0.5" - -response-time@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/response-time/-/response-time-2.3.2.tgz#ffa71bab952d62f7c1d49b7434355fbc68dffc5a" - dependencies: - depd "~1.1.0" - on-headers "~1.0.1" - -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@^2.5.4, rimraf@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" - dependencies: - glob "^7.0.5" - -rimraf@~2.2.6: - version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" - -rndm@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/rndm/-/rndm-1.2.0.tgz#f33fe9cfb52bbfd520aa18323bc65db110a1b76c" - -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" - dependencies: - once "^1.3.0" - -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" - -safe-buffer@^5.0.1, safe-buffer@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" - -sane@~1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.4.1.tgz#88f763d74040f5f0c256b6163db399bf110ac715" - dependencies: - exec-sh "^0.2.0" - fb-watchman "^1.8.0" - minimatch "^3.0.2" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.10.0" - -sane@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.5.0.tgz#a4adeae764d048621ecb27d5f9ecf513101939f3" - dependencies: - anymatch "^1.3.0" - exec-sh "^0.2.0" - fb-watchman "^1.8.0" - minimatch "^3.0.2" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.10.0" - -sane@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" - dependencies: - anymatch "^1.3.0" - exec-sh "^0.2.0" - fb-watchman "^1.8.0" - minimatch "^3.0.2" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.10.0" - -sax@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" - -sax@~1.1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" - -"semver@2 || 3 || 4 || 5", semver@5.x, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - -send@0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.13.2.tgz#765e7607c8055452bba6f0b052595350986036de" - dependencies: - debug "~2.2.0" - depd "~1.1.0" - destroy "~1.0.4" - escape-html "~1.0.3" - etag "~1.7.0" - fresh "0.3.0" - http-errors "~1.3.1" - mime "1.3.4" - ms "0.7.1" - on-finished "~2.3.0" - range-parser "~1.0.3" - statuses "~1.2.1" - -serve-favicon@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.3.2.tgz#dd419e268de012ab72b319d337f2105013f9381f" - dependencies: - etag "~1.7.0" - fresh "0.3.0" - ms "0.7.2" - parseurl "~1.3.1" - -serve-index@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.7.3.tgz#7a057fc6ee28dc63f64566e5fa57b111a86aecd2" - dependencies: - accepts "~1.2.13" - batch "0.5.3" - debug "~2.2.0" - escape-html "~1.0.3" - http-errors "~1.3.1" - mime-types "~2.1.9" - parseurl "~1.3.1" - -serve-static@~1.10.0: - version "1.10.3" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.10.3.tgz#ce5a6ecd3101fed5ec09827dac22a9c29bfb0535" - dependencies: - escape-html "~1.0.3" - parseurl "~1.3.1" - send "0.13.2" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - -shell-quote@1.6.1, shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -shellwords@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" - -simple-plist@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" - dependencies: - bplist-creator "0.0.7" - bplist-parser "0.1.1" - plist "2.0.1" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slide@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -source-map-support@^0.4.2: - version "0.4.15" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" - dependencies: - source-map "^0.5.6" - -source-map@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - dependencies: - amdefine ">=0.0.4" - -sparkles@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" - -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" - -sshpk@^1.7.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -stacktrace-parser@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz#01397922e5f62ecf30845522c95c4fe1d25e7d4e" - -statuses@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -statuses@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz#dded45cc18256d51ed40aec142489d5c61026d28" - -stream-buffers@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" - -stream-counter@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" - dependencies: - readable-stream "~1.1.8" - -string-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" - dependencies: - strip-ansi "^3.0.0" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -string_decoder@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" - dependencies: - buffer-shims "~1.0.0" - -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - 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-bom@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -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@^3.1.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -symbol-tree@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - -temp@0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" - dependencies: - os-tmpdir "^1.0.0" - rimraf "~2.2.6" - -test-exclude@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.0.tgz#04ca70b7390dd38c98d4a003a173806ca7991c91" - dependencies: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - -throat@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" - -through2@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - -to-fast-properties@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - -topo@1.x.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5" - dependencies: - hoek "2.x.x" - -tough-cookie@^2.3.2, tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" - dependencies: - punycode "^1.4.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -tsscmp@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -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" - -type-is@~1.6.6: - version "1.6.15" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.15" - -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.12" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" - -uglify-js@2.7.5, uglify-js@^2.6: - version "2.7.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" - dependencies: - async "~0.2.6" - source-map "~0.5.1" - uglify-to-browserify "~1.0.0" - yargs "~3.10.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -uid-safe@2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.4.tgz#3ad6f38368c6d4c8c75ec17623fb79aa1d071d81" - dependencies: - random-bytes "~1.0.0" - -uid-safe@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.0.0.tgz#a7f3c6ca64a1f6a5d04ec0ef3e4c3d5367317137" - dependencies: - base64-url "1.2.1" - -ultron@1.0.x: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" - -ultron@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -util-deprecate@1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -utils-merge@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" - -uuid@3.0.1, uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - -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" - -vary@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" - -vary@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" - -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" - dependencies: - extsprintf "1.0.2" - -vhost@~3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/vhost/-/vhost-3.0.2.tgz#2fb1decd4c466aa88b0f9341af33dc1aff2478d5" - -vinyl@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" - dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" - -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - dependencies: - makeerror "1.0.x" - -watch@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - -webidl-conversions@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" - -whatwg-encoding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" - dependencies: - iconv-lite "0.4.13" - -whatwg-fetch@>=0.10.0, whatwg-fetch@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz#ac3c9d39f320c6dce5339969d054ef43dd333319" - -whatwg-url@^4.3.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - -which@^1.2.12, which@^1.2.9: - version "1.2.14" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" - dependencies: - isexe "^2.0.0" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -wordwrap@^1.0.0, wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - -worker-farm@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" - dependencies: - errno ">=0.1.1 <0.2.0-0" - xtend ">=4.0.0 <4.1.0-0" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write-file-atomic@^1.2.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - slide "^1.1.5" - -ws@^1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61" - dependencies: - options ">=0.0.5" - ultron "1.0.x" - -ws@^2.0.3: - version "2.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" - dependencies: - safe-buffer "~5.0.1" - ultron "~1.1.0" - -xcode@^0.9.1: - version "0.9.3" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-0.9.3.tgz#910a89c16aee6cc0b42ca805a6d0b4cf87211cf3" - dependencies: - pegjs "^0.10.0" - simple-plist "^0.2.1" - uuid "3.0.1" - -xml-name-validator@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" - -xmlbuilder@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.0.0.tgz#98b8f651ca30aa624036f127d11cc66dc7b907a3" - dependencies: - lodash "^3.5.0" - -xmlbuilder@8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" - -xmldoc@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888" - dependencies: - sax "~1.1.1" - -xmldom@0.1.x: - version "0.1.27" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" - -xpipe@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" - -"xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -yallist@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - dependencies: - camelcase "^3.0.0" - -yargs@^6.4.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^4.2.0" - -yargs@^7.0.2: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" From 9ac857e9aebee9b0fea59e2a6f92b3d3d2f1dec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 17 May 2017 15:05:45 +0200 Subject: [PATCH 09/50] test(jest): update --- modules/__tests__/CardStack-spec.js | 131 ++++++++++++------ modules/__tests__/Navigation-spec.js | 41 ------ modules/__tests__/__mocks__/index.js | 3 +- .../__tests__/__snapshots__/Card-spec.js.snap | 12 -- .../__snapshots__/Navigation-spec.js.snap | 62 +-------- .../__snapshots__/StackUtils-spec.js.snap | 2 +- 6 files changed, 90 insertions(+), 161 deletions(-) diff --git a/modules/__tests__/CardStack-spec.js b/modules/__tests__/CardStack-spec.js index f811323..0c4fbd5 100644 --- a/modules/__tests__/CardStack-spec.js +++ b/modules/__tests__/CardStack-spec.js @@ -13,10 +13,14 @@ it(' renders correctly', () => { const history = createHistory() const component = renderer.create( - - - - + ( + + + + + )} + /> , ) const tree = component.toJSON() @@ -30,11 +34,15 @@ it(' renders correctly with initialIndex and initialEntries prop ', }) const component = renderer.create( - - - - - + ( + + + + + + )} + /> , ) const tree = component.toJSON() @@ -45,10 +53,14 @@ it(' re-renders correctly when "push" action is called', () => { const history = createHistory() const component = renderer.create( - - - - + ( + + + + + )} + /> , ) let tree = component.toJSON() @@ -64,9 +76,13 @@ it(' re-renders correctly when "push" action is called with same pa }) const component = renderer.create( - - - + ( + + + + )} + /> , ) let tree = component.toJSON() @@ -83,10 +99,14 @@ it(' re-renders correctly when "goBack" action is called', () => { }) const component = renderer.create( - - - - + ( + + + + + )} + /> , ) let tree = component.toJSON() @@ -103,9 +123,13 @@ it(' re-renders correctly when "goBack" action is called with same }) const component = renderer.create( - - - + ( + + + + )} + /> , ) let tree = component.toJSON() @@ -122,11 +146,15 @@ it(' re-renders correctly when "go" action is called', () => { }) const component = renderer.create( - - - - - + ( + + + + + + )} + /> , ) let tree = component.toJSON() @@ -143,9 +171,13 @@ it(' re-renders correctly when "go" action is called with same path }) const component = renderer.create( - - - + ( + + + + )} + /> , ) let tree = component.toJSON() @@ -162,11 +194,15 @@ it(' re-renders correctly when "replace" action is called', () => { }) const component = renderer.create( - - - - - + ( + + + + + + )} + /> , ) let tree = component.toJSON() @@ -183,16 +219,21 @@ it(' re-renders correctly when onNavigateBack() method is called', }) const component = renderer.create( - ( - - {CardView({ navigationState, onNavigateBack, cards })} - + ( + ( + + {CardView({ navigationState, onNavigateBack, cards })} + + )} + > + + + )} - > - - - + /> , ) let tree = component.toJSON() diff --git a/modules/__tests__/Navigation-spec.js b/modules/__tests__/Navigation-spec.js index 0998c5b..9dcc0e7 100644 --- a/modules/__tests__/Navigation-spec.js +++ b/modules/__tests__/Navigation-spec.js @@ -55,47 +55,6 @@ it(' re-renders correctly when "push" action is called', () => { expect(tree).toMatchSnapshot() }) -it(' re-renders correctly when "goBack" action is called', () => { - const history = createHistory({ - initialIndex: 1, - initialEntries: ['/', '/hello'], - }) - const component = renderer.create( - - - - - - , - ) - let tree = component.toJSON() - expect(tree).toMatchSnapshot() - history.goBack() - tree = component.toJSON() - expect(tree).toMatchSnapshot() -}) - -it(' re-renders correctly when "go" action is called', () => { - const history = createHistory({ - initialIndex: 2, - initialEntries: ['/', '/hello', '/goodbye'], - }) - const component = renderer.create( - - - - - - - , - ) - let tree = component.toJSON() - expect(tree).toMatchSnapshot() - history.go(-2) - tree = component.toJSON() - expect(tree).toMatchSnapshot() -}) - it(' re-renders correctly when "replace" action is called', () => { const history = createHistory({ initialIndex: 1, diff --git a/modules/__tests__/__mocks__/index.js b/modules/__tests__/__mocks__/index.js index c62a9ed..99130b5 100644 --- a/modules/__tests__/__mocks__/index.js +++ b/modules/__tests__/__mocks__/index.js @@ -41,10 +41,9 @@ jest.mock('TouchableOpacity', () => { jest.mock('react-navigation/src/views/Card', () => (props) => { const React = require('react') - return React.createElement( 'Card', {}, - props.renderScene(props), + props.children, ) }) diff --git a/modules/__tests__/__snapshots__/Card-spec.js.snap b/modules/__tests__/__snapshots__/Card-spec.js.snap index 093828f..0f81478 100644 --- a/modules/__tests__/__snapshots__/Card-spec.js.snap +++ b/modules/__tests__/__snapshots__/Card-spec.js.snap @@ -5,15 +5,3 @@ exports[` renders correctly 1`] = ` 1 `; - -exports[` renders correctly with staticMatch prop when route doesn't match 1`] = ` - - 1 - -`; - -exports[` renders correctly with staticMatch prop when route doesn't match 2`] = ` - - 1 - -`; diff --git a/modules/__tests__/__snapshots__/Navigation-spec.js.snap b/modules/__tests__/__snapshots__/Navigation-spec.js.snap index d7f27b9..23c93c1 100644 --- a/modules/__tests__/__snapshots__/Navigation-spec.js.snap +++ b/modules/__tests__/__snapshots__/Navigation-spec.js.snap @@ -1,53 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[` re-renders correctly when "go" action is called 1`] = ` - - - - - - - - Goodbye - - - - - -`; - -exports[` re-renders correctly when "go" action is called 2`] = ` - - - - - - Index - - - - - - - -`; - -exports[` re-renders correctly when "goBack" action is called 1`] = ` - - - - - - - Hello - - - - - -`; - -exports[` re-renders correctly when "goBack" action is called 2`] = ` +exports[` re-renders correctly when "push" action is called 1`] = ` @@ -56,13 +9,12 @@ exports[` re-renders correctly when "goBack" action is called 2`] Index - `; -exports[` re-renders correctly when "push" action is called 1`] = ` +exports[` re-renders correctly when "push" action is called 2`] = ` @@ -71,16 +23,6 @@ exports[` re-renders correctly when "push" action is called 1`] = Index - - - -`; - -exports[` re-renders correctly when "push" action is called 2`] = ` - - - - Hello diff --git a/modules/__tests__/__snapshots__/StackUtils-spec.js.snap b/modules/__tests__/__snapshots__/StackUtils-spec.js.snap index 5b5e586..ee9a4cd 100644 --- a/modules/__tests__/__snapshots__/StackUtils-spec.js.snap +++ b/modules/__tests__/__snapshots__/StackUtils-spec.js.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`StackUtils build() creates correctly render method 1`] = ` +exports[`build util creates correctly render method 1`] = ` Date: Wed, 17 May 2017 15:07:21 +0200 Subject: [PATCH 10/50] fix(examples): remove modal import --- examples/Huge/src/app/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/Huge/src/app/index.js b/examples/Huge/src/app/index.js index 05f2613..3acad84 100644 --- a/examples/Huge/src/app/index.js +++ b/examples/Huge/src/app/index.js @@ -7,7 +7,6 @@ import { BottomNavigation, Tab } from 'react-router-navigation' import { BRAND_COLOR_50, BRAND_COLOR_60 } from '@ressources/theme' import Feed from './modules/Feed' import Profile from './modules/Profile' -import Modal from './components/Modal' import styles from './styles' const App = (props) => ( From 46cdf675ab58316c9fc358805d2c8b701517a3fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 17 May 2017 23:35:40 +0200 Subject: [PATCH 11/50] refactor(tabs): update tab stack --- modules/BottomNavigation.js | 74 +++++++++++++++++++++++------------- modules/TabStack.js | 75 +++++++++++++++++++++---------------- modules/Tabs.js | 45 +++++++++++++--------- 3 files changed, 118 insertions(+), 76 deletions(-) diff --git a/modules/BottomNavigation.js b/modules/BottomNavigation.js index 52076ca..cbec178 100644 --- a/modules/BottomNavigation.js +++ b/modules/BottomNavigation.js @@ -1,8 +1,11 @@ /* @flow */ +/* eslint no-nested-ternary: 0 */ import React, { Component, createElement } from 'react' -import { StyleSheet, Dimensions } from 'react-native' +import { StyleSheet, Dimensions, View } from 'react-native' import { TabViewAnimated, TabViewPagerPan } from 'react-native-tab-view' +import { Route } from 'react-router' +import type { ContextRouter } from 'react-router' import type { TabProps, TabBarProps, TabSubViewProps } from './TypeDefinitions' import * as StackUtils from './StackUtils' import TabBarBottom from './TabBarBottom' @@ -12,6 +15,10 @@ const styles = StyleSheet.create({ container: { flex: 1, }, + scene: { + flex: 1, + overflow: 'hidden', + }, }) type Props = TabBarProps & { @@ -70,35 +77,50 @@ class BottomNavigation extends Component { renderScene = (sceneProps: TabSubViewProps): ?React$Element => { const { render, children, component } = sceneProps - if (render) return render(sceneProps) - else if (children && typeof children === 'function') return children(sceneProps) - else if (component) return createElement(component, sceneProps) - return null + const Scene = component ? ( // component prop gets first priority + React.createElement(component, sceneProps) + ) : render ? ( // render prop is next + render(sceneProps) + ) : (children && typeof children === 'function') ? ( // then children as func + children(sceneProps) + ) : null + return ( + + {Scene} + + ) } render(): React$Element { return ( - { - const ownProps = { ...this.props, ...props } - return ( - null} - renderPager={StackUtils.renderSubView(this.renderPager, ownProps)} - renderFooter={StackUtils.renderSubView(this.renderNavigationBar, ownProps)} - renderScene={StackUtils.renderSubView(this.renderScene, ownProps)} - /> - ) - }} - /> + + {({ history, location, match }: ContextRouter) => ( + { + const ownProps = { ...this.props, ...props } + return ( + + ) + }} + /> + )} + ) } diff --git a/modules/TabStack.js b/modules/TabStack.js index 6d22cc9..3398699 100755 --- a/modules/TabStack.js +++ b/modules/TabStack.js @@ -2,13 +2,13 @@ /* eslint no-duplicate-imports: 0 */ /* eslint react/no-unused-prop-types:0 */ -import React, { Component } from 'react' -import { Route, matchPath } from 'react-router' +import { Component } from 'react' +import { matchPath } from 'react-router' import type { ContextRouter, Location } from 'react-router' import type { NavigationState, TabsRendererProps, Tab, TabProps } from './TypeDefinitions' import * as StackUtils from './StackUtils' -type Props = { +type Props = ContextRouter & { // eslint-disable-next-line children?: Array>, render: (props: TabsRendererProps) => React$Element, @@ -16,9 +16,6 @@ type Props = { forceSync?: boolean, } -// $FlowFixMe -type OwnProps = ContextRouter & Props - type DefaultProps = { forceSync: boolean, } @@ -30,20 +27,23 @@ type State = { }>, tabs: Array, rootIndex: number, + isPending: boolean, history: { [key: number]: Array }, } -class TabStack extends Component { +class TabStack extends Component { - props: OwnProps + props: Props state: State + unlisten: Function + static defaultProps = { forceSync: false, } // Initialyze navigation state with initial history - constructor(props: OwnProps): void { + constructor(props: Props): void { super(props) // Build the tab stack $FlowFixMe const { children, history: { entries, location } } = props @@ -71,14 +71,25 @@ class TabStack extends Component { const history = { [index]: entries.slice(location.index), } + // Set isPending + const isPending = false // Save everything - this.state = { navigationState, tabs, rootIndex, history } + this.state = { navigationState, tabs, rootIndex, history, isPending } + } + + componentDidMount(): void { + this.unlisten = this.props.history.listen(this.onChangeHistory) } - // Listen all history events - componentWillReceiveProps(nextProps: OwnProps): void { + componentWillUnmount(): void { + this.unlisten() + } + + // Listen history events + onChangeHistory = (location: Location): void => { + if (this.state.isPending) return // Get current route $FlowFixMe - const { history: { entries }, location } = nextProps + const { history: { entries } } = this.props const { navigationState: { routes, index }, tabs, rootIndex } = this.state // Get current tab const currentRoute = routes[index] @@ -104,13 +115,15 @@ class TabStack extends Component { if (nextRoute) { this.state.history[nextIndex] = entries.slice( rootIndex, - nextProps.history.index + 1, + this.props.history.index + 1, ) } } // Callback for when the current tab changes onRequestChangeTab = (index: number): void => { + if (index < 0) return + this.state.isPending = true const entries = this.state.history[index] if (index !== this.state.navigationState.index) { // Update navigation state @@ -120,26 +133,32 @@ class TabStack extends Component { index, }, })) + // Force sync if (this.props.forceSync) { // Go back to root index const n = this.state.rootIndex - (this.props.history.index || 0) if (n !== 0) this.props.history.go(n) // Replace root entry - if (entries && entries[0]) this.props.history.replace(entries[0].pathname) - else this.props.history.replace(this.state.tabs[index].path) + if (entries && entries[0]) { + const entry = entries[0] + this.props.history.replace(entry.pathname, entry.state) + } else { + const entry = this.state.tabs[index] // $FlowFixMe + this.props.history.replace(entry.path, entry.state) + } // Push other entries if (entries && entries.length > 1) { entries .slice(this.state.rootIndex + 1) - .forEach(({ pathname }) => { - this.props.history.push(pathname) + .forEach(({ pathname, state }) => { + this.props.history.push(pathname, state) }) - this.props.history.replace( - entries[Math.max(0, parseInt(entries.length - 1, 10))].pathname, - ) + const entry = entries[Math.max(0, parseInt(entries.length - 1, 10))] + this.props.history.replace(entry.pathname, entry.state) } } else { - this.props.history.replace(this.state.tabs[index].path) + const entry = this.state.tabs[index] // $FlowFixMe + this.props.history.replace(entry.path, entry.state) } } else { const tab = this.state.tabs[index] @@ -151,6 +170,7 @@ class TabStack extends Component { if (props.onReset) props.onReset(props) } } + this.state.isPending = false } // Render view @@ -166,13 +186,4 @@ class TabStack extends Component { } -export default (props: Props) => ( - - {(ownProps: ContextRouter) => ( - - )} - -) +export default TabStack diff --git a/modules/Tabs.js b/modules/Tabs.js index dc05da3..5dd6e5b 100644 --- a/modules/Tabs.js +++ b/modules/Tabs.js @@ -3,7 +3,8 @@ import React, { Component, createElement } from 'react' import { StyleSheet, Dimensions, Text } from 'react-native' import { TabViewAnimated, TabBar } from 'react-native-tab-view' -import { matchPath } from 'react-router' +import { Route, matchPath } from 'react-router' +import type { ContextRouter } from 'react-router' import type { TabSubViewProps, TabBarProps } from './TypeDefinitions' import * as StackUtils from './StackUtils' import TabStack from './TabStack' @@ -105,23 +106,31 @@ class Tabs extends Component { render(): React$Element { return ( - { - const ownProps = { ...this.props, ...props } - return ( - - ) - }} - /> + + {({ history, location, match }: ContextRouter) => ( + { + const ownProps = { ...this.props, ...props } + console.log('', ownProps) + return ( + + ) + }} + /> + )} + ) } From 6b222b0827ef32df3f6c47157ff2f7d01e375e9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 17 May 2017 23:36:02 +0200 Subject: [PATCH 12/50] fix(navigation): use with child as func --- modules/Navigation.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/Navigation.js b/modules/Navigation.js index a5d50b5..64aabfb 100644 --- a/modules/Navigation.js +++ b/modules/Navigation.js @@ -41,8 +41,8 @@ class Navigation extends Component { render(): React$Element { const { children, ...props } = this.props return ( - ( + + {({ history, location, match }: ContextRouter) => ( { )} /> )} - /> + ) } From 94d51b8e953a262695b1f252046799b019d81a8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 17 May 2017 23:53:09 +0200 Subject: [PATCH 13/50] test(TabStack): some fixes --- modules/TabStack.js | 7 +++- modules/Tabs.js | 1 - modules/__tests__/TabStack-spec.js | 67 +++++++++++++++++++----------- 3 files changed, 47 insertions(+), 28 deletions(-) diff --git a/modules/TabStack.js b/modules/TabStack.js index 3398699..ed52d28 100755 --- a/modules/TabStack.js +++ b/modules/TabStack.js @@ -28,6 +28,7 @@ type State = { tabs: Array, rootIndex: number, isPending: boolean, + location: Location, history: { [key: number]: Array }, } @@ -74,7 +75,7 @@ class TabStack extends Component { // Set isPending const isPending = false // Save everything - this.state = { navigationState, tabs, rootIndex, history, isPending } + this.state = { navigationState, tabs, rootIndex, history, location, isPending } } componentDidMount(): void { @@ -102,7 +103,7 @@ class TabStack extends Component { // Update navigation state if ( currentTab && nextTab && - StackUtils.shouldUpdate(currentTab, nextTab, this.props.location, location) + StackUtils.shouldUpdate(currentTab, nextTab, this.state.location, location) ) { this.setState(({ navigationState }) => ({ navigationState: { @@ -118,6 +119,8 @@ class TabStack extends Component { this.props.history.index + 1, ) } + // Save location + this.state.location = location } // Callback for when the current tab changes diff --git a/modules/Tabs.js b/modules/Tabs.js index 5dd6e5b..b84b92e 100644 --- a/modules/Tabs.js +++ b/modules/Tabs.js @@ -116,7 +116,6 @@ class Tabs extends Component { style={styles.container} render={(props) => { const ownProps = { ...this.props, ...props } - console.log('', ownProps) return ( renders correctly', () => { const history = createHistory() const component = renderer.create( - - - - - + + {routeProps => ( + + + + + + )} + , ) const tree = component.toJSON() @@ -28,11 +32,15 @@ it(' renders correctly with initialEntries prop ', () => { const history = createHistory({ initialEntries: ['/hello'] }) const component = renderer.create( - - - - - + + {routeProps => ( + + + + + + )} + , ) const tree = component.toJSON() @@ -43,11 +51,15 @@ it(' re-renders correctly when "replace" action is called', () => { const history = createHistory() const component = renderer.create( - - - - - + + {routeProps => ( + + + + + + )} + , ) let tree = component.toJSON() @@ -61,17 +73,22 @@ it(' re-renders correctly when onRequestChangeTab() method is called const history = createHistory() const component = renderer.create( - ( - - {TabView({ navigationState, onRequestChangeTab, tabs })} - + + {routeProps => ( + ( + + {TabView({ navigationState, onRequestChangeTab, tabs })} + + )} + > + + + + )} - > - - - - + , ) let tree = component.toJSON() From 5d9432f2c72435ee271bf9a2dbc0ddec36d5bd18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Sun, 21 May 2017 23:48:16 +0200 Subject: [PATCH 14/50] fix(all): deal with update blocker + fix react imports --- modules/BottomNavigation.js | 18 +++--- modules/Card.js | 18 ++---- modules/CardStack.js | 46 +++++++-------- modules/History.js | 50 +++++++++++++++++ modules/NativeNavigation.js | 51 +++++++++++++++++ modules/NativeRenderer.js | 5 ++ modules/NavBar.js | 4 +- modules/Navigation.js | 17 +++--- modules/SceneView.js | 33 ++++++----- modules/StackUtils.js | 6 +- modules/Tab.js | 27 +++++---- modules/TabBarBottom.js | 4 +- modules/TabStack.js | 109 +++++++++++++++++------------------- modules/Tabs.js | 19 +++---- modules/TypeDefinitions.js | 3 +- package.json | 1 + yarn.lock | 4 ++ 17 files changed, 250 insertions(+), 165 deletions(-) create mode 100644 modules/History.js create mode 100644 modules/NativeRenderer.js diff --git a/modules/BottomNavigation.js b/modules/BottomNavigation.js index cbec178..692ce95 100644 --- a/modules/BottomNavigation.js +++ b/modules/BottomNavigation.js @@ -1,14 +1,13 @@ /* @flow */ /* eslint no-nested-ternary: 0 */ -import React, { Component, createElement } from 'react' +import React from 'react' import { StyleSheet, Dimensions, View } from 'react-native' import { TabViewAnimated, TabViewPagerPan } from 'react-native-tab-view' -import { Route } from 'react-router' -import type { ContextRouter } from 'react-router' import type { TabProps, TabBarProps, TabSubViewProps } from './TypeDefinitions' import * as StackUtils from './StackUtils' import TabBarBottom from './TabBarBottom' +import History from './History' import TabStack from './TabStack' const styles = StyleSheet.create({ @@ -35,7 +34,7 @@ type State = { key: string, } -class BottomNavigation extends Component { +class BottomNavigation extends React.Component { props: Props @@ -61,7 +60,7 @@ class BottomNavigation extends Component { if (sceneProps.hideTabBar) return null // Custom tab bar if (sceneProps.renderTabBar) { - return createElement( + return React.createElement( sceneProps.renderTabBar, sceneProps, ) @@ -78,7 +77,7 @@ class BottomNavigation extends Component { renderScene = (sceneProps: TabSubViewProps): ?React$Element => { const { render, children, component } = sceneProps const Scene = component ? ( // component prop gets first priority - React.createElement(component, sceneProps) + React.createElement(component, sceneProps) ) : render ? ( // render prop is next render(sceneProps) ) : (children && typeof children === 'function') ? ( // then children as func @@ -93,13 +92,12 @@ class BottomNavigation extends Component { render(): React$Element { return ( - - {({ history, location, match }: ContextRouter) => ( + + {({ history, location }) => ( { @@ -120,7 +118,7 @@ class BottomNavigation extends Component { }} /> )} - + ) } diff --git a/modules/Card.js b/modules/Card.js index aedd45f..98c27fd 100644 --- a/modules/Card.js +++ b/modules/Card.js @@ -1,28 +1,22 @@ /* @flow */ -/* eslint no-duplicate-imports: 0 */ import React from 'react' -import { Route } from 'react-router' import type { CardProps } from './TypeDefinitions' +import History from './History' import SceneView from './SceneView' type Props = CardProps -const Card = (props: Props): React$Element => ( - - {({ history, location, match }) => ( +const Card = (props: Props) => ( + + {({ history, location }) => ( )} - + ) export default Card diff --git a/modules/CardStack.js b/modules/CardStack.js index cce1399..01e734a 100755 --- a/modules/CardStack.js +++ b/modules/CardStack.js @@ -2,17 +2,16 @@ /* eslint no-duplicate-imports: 0 */ /* eslint react/no-unused-prop-types: 0 */ -import { Component } from 'react' +import React from 'react' import { BackHandler } from 'react-native' +import isEqual from 'lodash.isequal' import { matchPath } from 'react-router' import { StateUtils } from 'react-navigation' -import type { ContextRouter, Location, HistoryAction } from 'react-router' +import type { RouterHistory, Location } from 'react-router' import type { CardsRendererProps, NavigationState, Card, CardProps } from './TypeDefinitions' import * as StackUtils from './StackUtils' type State = { - location: Location, - historyIndex: number, navigationState: NavigationState<{ path?: string, params?: Object, @@ -20,19 +19,19 @@ type State = { cards: Array, } -type Props = ContextRouter & { +type Props = { // eslint-disable-next-line + location: Location, + history: RouterHistory, children?: Array>, render: (props: CardsRendererProps) => React$Element, } -class CardStack extends Component { +class CardStack extends React.Component { props: Props state: State - unlistenHistory: Function - // Initialyze navigation state with initial history constructor(props: Props): void { super(props) @@ -67,40 +66,36 @@ class CardStack extends Component { // Listen hardware BackHandler event componentDidMount(): void { - const { history } = this.props BackHandler.addEventListener('hardwareBackPress', this.onNavigateBack) - this.unlistenHistory = history.listen(this.onChangeHistory) } // Remove all listeners componentWillUnmount(): void { BackHandler.removeEventListener('hardwareBackPress', this.onNavigateBack) - this.unlistenHistory() } // Listen all history events - onChangeHistory = (location: Location, action: HistoryAction): void => { - const { history: { entries, index: indexHistory } } = this.props + componentWillReceiveProps(nextProps: Props): void { + const { location, history: { entries, index: indexHistory } } = this.props + const { location: nextLocation, history: { action, index: nextIndexHistory } } = nextProps const { cards, navigationState: { routes, index } } = this.state // Re-build cards // Get current card const currentRoute = routes[index] const currentCard = cards.find(({ key }) => key === currentRoute.routeName) // Get next card - const nextRoute = StackUtils.getRoute(cards, location) + const nextRoute = StackUtils.getRoute(cards, nextLocation) if (!nextRoute) return const nextCard = cards.find(({ key }) => key === nextRoute.routeName) // Local state must be updated ? if ( currentCard && nextCard && - StackUtils.shouldUpdate(currentCard, nextCard, this.state.location, location) + StackUtils.shouldUpdate(currentCard, nextCard, location, nextLocation) ) { const key = StackUtils.createKey(nextRoute) switch (action) { case 'PUSH': { this.setState(state => ({ - location, - historyIndex: indexHistory, navigationState: StateUtils.push( state.navigationState, { ...nextRoute, key }, @@ -111,16 +106,14 @@ class CardStack extends Component { case 'POP': { if ( indexHistory === undefined || - indexHistory === undefined || + nextIndexHistory === undefined || entries === undefined ) { return } - const n = this.state.historyIndex - indexHistory + const n = indexHistory - nextIndexHistory if (n > 1) { this.setState(state => ({ - location, - historyIndex: indexHistory, navigationState: StateUtils.reset( state.navigationState, state.navigationState.routes.slice( @@ -132,8 +125,6 @@ class CardStack extends Component { })) } else { this.setState(state => ({ - location, - historyIndex: indexHistory, navigationState: StateUtils.pop(state.navigationState), })) } @@ -141,8 +132,6 @@ class CardStack extends Component { } case 'REPLACE': { this.setState(state => ({ - location, - historyIndex: indexHistory, navigationState: StateUtils.replaceAtIndex( state.navigationState, state.navigationState.index, @@ -165,12 +154,15 @@ class CardStack extends Component { return false } + // Diff navigation state + shouldComponentUpdate(nextProps: Props, nextState: State): boolean { + return !isEqual(this.state.navigationState, nextState.navigationState) + } + // Render view render(): React$Element { return this.props.render({ ...this.state, - match: this.props.match, - location: this.props.location, history: this.props.history, onNavigateBack: this.onNavigateBack, }) diff --git a/modules/History.js b/modules/History.js new file mode 100644 index 0000000..c431772 --- /dev/null +++ b/modules/History.js @@ -0,0 +1,50 @@ +/* @flow */ + +import React from 'react' +import type { ContextRouter, Location } from 'react-router' +import { withRouter } from 'react-router' + +const enhancer = withRouter + +type Props = ContextRouter + +type State = { + location: Location, +} + +class History extends React.Component { + + props: Props + state: State + + unlisten: Function + + constructor(props: Props) { + super(props) + this.state = { + location: props.location, + } + } + + componentWillMount(): void { + const { history } = this.props + this.unlisten = history.listen(this.onChangeHistory) + } + + componentWillUnmount(): void { + this.unlisten() + } + + onChangeHistory = (location: Location): void => { + this.setState({ location }) + } + + render(): ?React$Element { + const { children, history } = this.props + const { location } = this.state + return children({ history, location }) + } + +} + +export default enhancer(History) diff --git a/modules/NativeNavigation.js b/modules/NativeNavigation.js index e69de29..9721769 100644 --- a/modules/NativeNavigation.js +++ b/modules/NativeNavigation.js @@ -0,0 +1,51 @@ +/* @flow */ +/* eslint react/no-children-prop: 0 */ + +import React from 'react' +import type { NavigationProps } from './TypeDefinitions' +import CardStack from './CardStack' +import NativeRenderer from './NativeRenderer' +import History from './History' + +type Props = NavigationProps & { + children?: Array>, +} + +class Navigation extends React.Component { + + props: Props + + renderScene = (sceneProps: TabSubViewProps): ?React$Element => { + const { render, children, component } = sceneProps + if (render) return render(sceneProps) + else if (children && typeof children === 'function') return children(sceneProps) + else if (component) return React.createElement(component, sceneProps) + return null + } + + render(): React$Element { + const { children, ...props } = this.props + return ( + + {({ history, location }) => ( + ( + + )} + /> + )} + + ) + } + +} + +export default Navigation diff --git a/modules/NativeRenderer.js b/modules/NativeRenderer.js new file mode 100644 index 0000000..e172a13 --- /dev/null +++ b/modules/NativeRenderer.js @@ -0,0 +1,5 @@ +/* @flow */ + +const NativeRenderer = (): ?React$Element => null + +export default NativeRenderer() diff --git a/modules/NavBar.js b/modules/NavBar.js index 25d765f..664a309 100644 --- a/modules/NavBar.js +++ b/modules/NavBar.js @@ -1,6 +1,6 @@ /* @flow */ -import React, { Component } from 'react' +import React from 'react' import { Platform } from 'react-native' import Header from 'react-navigation/src/views/Header' import HeaderTitle from 'react-navigation/src/views/HeaderTitle' @@ -10,7 +10,7 @@ import * as StackUtils from './StackUtils' type Props = CardSubViewProps -class NavBar extends Component { +class NavBar extends React.Component { props: Props diff --git a/modules/Navigation.js b/modules/Navigation.js index 64aabfb..a0d54d7 100644 --- a/modules/Navigation.js +++ b/modules/Navigation.js @@ -1,21 +1,19 @@ /* @flow */ -/* eslint no-duplicate-imports: 0 */ /* eslint react/no-children-prop: 0 */ -import React, { Component } from 'react' -import { Route } from 'react-router' -import type { ContextRouter } from 'react-router' +import React from 'react' import type { NavigationProps, CardSubViewProps } from './TypeDefinitions' import CardStack from './CardStack' import DefaultRenderer from './DefaultRenderer' import NavBar from './NavBar' +import History from './History' import * as StackUtils from './StackUtils' type Props = NavigationProps & { children?: Array>, } -class Navigation extends Component { +class Navigation extends React.Component { props: Props @@ -41,13 +39,12 @@ class Navigation extends Component { render(): React$Element { const { children, ...props } = this.props return ( - - {({ history, location, match }: ContextRouter) => ( + + {({ history, location }) => ( ( { )} /> )} - + ) } diff --git a/modules/SceneView.js b/modules/SceneView.js index 513a3e2..dee11cf 100644 --- a/modules/SceneView.js +++ b/modules/SceneView.js @@ -1,6 +1,7 @@ /* @flow */ import React from 'react' +import { matchPath } from 'react-router' import type { ContextRouter, Location } from 'react-router' import type { CardProps } from './TypeDefinitions' @@ -19,28 +20,30 @@ class SceneView extends React.Component { constructor(props: Props) { super(props) - this.state = { - location: props.location, - } - } - - componentWillMount(): void { - const { history } = this.props - this.unlisten = history.listen(this.onChangeHistory) + // Build current match + const { location, path, exact, strict } = props + const match = matchPath(location.pathname, { path, exact, strict }) + this.state = { match } } - componentWillUnmount(): void { - this.unlisten() + componentWillReceiveProps(nextProps: Props): void { + const { location, path, exact, strict } = nextProps + if (!this.state.match) { + const match = matchPath(location.pathname, { path, exact, strict }) + this.setState({ match }) + } } - onChangeHistory = (location: Location): void => { - this.setState({ location }) + shouldComponentUpdate(nextProps: Props, nextState: State): boolean { + // Only update when scene is focused + return !!nextState.match } render(): ?React$Element { - const { render, children, component, match } = this.props - if (!match) return null - const ownProps = { ...this.props, ...this.state } + // Get scene component + const { render, children, component } = this.props + const { match } = this.state + const ownProps = { ...this.props, match } if (render) return render(ownProps) else if (children && typeof children === 'function') return children(ownProps) else if (component) return React.createElement(component, ownProps) diff --git a/modules/StackUtils.js b/modules/StackUtils.js index 8a05804..caf2a12 100644 --- a/modules/StackUtils.js +++ b/modules/StackUtils.js @@ -1,7 +1,7 @@ /* @flow */ /* eslint no-duplicate-imports: 0 */ -import { Children, cloneElement } from 'react' +import React from 'react' import { matchPath } from 'react-router' import type { Location } from 'react-router' import type { Route } from './TypeDefinitions' @@ -14,7 +14,7 @@ import type { Route } from './TypeDefinitions' export const build = ( children: Array>, ): Array => { - return Children.toArray(children).reduce((stack, child) => { + return React.Children.toArray(children).reduce((stack, child) => { const item = Object.keys(child.props).reduce((props, key) => { if (key === 'path') { return { @@ -25,7 +25,7 @@ export const build = ( } else if (key === 'render' || key === 'component' || key === 'children') { return { ...props, - [key]: () => cloneElement(child), + [key]: () => React.cloneElement(child), } } return { diff --git a/modules/Tab.js b/modules/Tab.js index 476058f..4c0b1a7 100644 --- a/modules/Tab.js +++ b/modules/Tab.js @@ -1,23 +1,22 @@ /* @flow */ import React from 'react' -import { Route } from 'react-router' import type { TabProps } from './TypeDefinitions' +import History from './History' +import SceneView from './SceneView' type Props = TabProps -const Tab = (props: Props) => { - const { path, exact, strict, render, children, component: Component } = props - return ( - - {(routeProps) => { - if (render) return render(routeProps) - else if (children) return children(routeProps) - else if (Component) return - return null - }} - - ) -} +const Tab = (props: Props) => ( + + {({ history, location }) => ( + + )} + +) export default Tab diff --git a/modules/TabBarBottom.js b/modules/TabBarBottom.js index 5100477..af31bd5 100644 --- a/modules/TabBarBottom.js +++ b/modules/TabBarBottom.js @@ -1,6 +1,6 @@ /* @flow */ -import React, { Component } from 'react' +import React from 'react' import { StyleSheet, Platform, Text } from 'react-native' import { TabBar } from 'react-native-tab-view' import type { TabSubViewProps } from './TypeDefinitions' @@ -51,7 +51,7 @@ type DefaultProps = { tabActiveTintColor: string, } -class TabBarBottom extends Component { +class TabBarBottom extends React.Component { props: Props diff --git a/modules/TabStack.js b/modules/TabStack.js index ed52d28..a38c028 100755 --- a/modules/TabStack.js +++ b/modules/TabStack.js @@ -2,17 +2,19 @@ /* eslint no-duplicate-imports: 0 */ /* eslint react/no-unused-prop-types:0 */ -import { Component } from 'react' -import { matchPath } from 'react-router' -import type { ContextRouter, Location } from 'react-router' +import React from 'react' +import type { HistoryRouter, Location } from 'react-router' +import isEqual from 'lodash.isequal' import type { NavigationState, TabsRendererProps, Tab, TabProps } from './TypeDefinitions' import * as StackUtils from './StackUtils' -type Props = ContextRouter & { +type Props = { + history: HistoryRouter, // eslint-disable-next-line children?: Array>, render: (props: TabsRendererProps) => React$Element, // eslint-disable-next-line + lazy?: boolean, forceSync?: boolean, } @@ -27,12 +29,11 @@ type State = { }>, tabs: Array, rootIndex: number, - isPending: boolean, location: Location, history: { [key: number]: Array }, } -class TabStack extends Component { +class TabStack extends React.Component { props: Props state: State @@ -58,7 +59,6 @@ class TabStack extends Component { const route = { key: tab.key, routeName: tab.path, - match: matchPath(location.pathname, tab), } return { ...route, @@ -72,10 +72,8 @@ class TabStack extends Component { const history = { [index]: entries.slice(location.index), } - // Set isPending - const isPending = false // Save everything - this.state = { navigationState, tabs, rootIndex, history, location, isPending } + this.state = { navigationState, tabs, rootIndex, history, location } } componentDidMount(): void { @@ -88,7 +86,6 @@ class TabStack extends Component { // Listen history events onChangeHistory = (location: Location): void => { - if (this.state.isPending) return // Get current route $FlowFixMe const { history: { entries } } = this.props const { navigationState: { routes, index }, tabs, rootIndex } = this.state @@ -126,62 +123,58 @@ class TabStack extends Component { // Callback for when the current tab changes onRequestChangeTab = (index: number): void => { if (index < 0) return - this.state.isPending = true - const entries = this.state.history[index] - if (index !== this.state.navigationState.index) { - // Update navigation state - this.setState(prevState => ({ - navigationState: { - ...prevState.navigationState, - index, - }, - })) - // Force sync - if (this.props.forceSync) { - // Go back to root index - const n = this.state.rootIndex - (this.props.history.index || 0) - if (n !== 0) this.props.history.go(n) - // Replace root entry - if (entries && entries[0]) { - const entry = entries[0] - this.props.history.replace(entry.pathname, entry.state) - } else { - const entry = this.state.tabs[index] // $FlowFixMe - this.props.history.replace(entry.path, entry.state) - } - // Push other entries - if (entries && entries.length > 1) { - entries - .slice(this.state.rootIndex + 1) - .forEach(({ pathname, state }) => { - this.props.history.push(pathname, state) - }) - const entry = entries[Math.max(0, parseInt(entries.length - 1, 10))] - this.props.history.replace(entry.pathname, entry.state) - } - } else { - const entry = this.state.tabs[index] // $FlowFixMe - this.props.history.replace(entry.path, entry.state) + // 1) Set index directly + this.setState(prevState => ({ + navigationState: { + ...prevState.navigationState, + index, + }, + })) + // 2) Resync history if needed + if (this.props.forceSync) { + // Get entries + const entries = this.state.history[index] + // Update index + length + entries properties + const newHistoryIndex = 2 + this.props.history.index = newHistoryIndex + this.props.history.entries = [ + ...this.props.history.entries, + ...entries, + ] + this.props.history.length = this.props.history.entries.length + } + // 3) Prevent history of changes + // Warning: we must deal with this king of thing: + // const App = () => ( + // + // + // history.push('/one')} + // /> + // + // ) + const entry = this.state.tabs[index] // $FlowFixMe + if (entry.path.includes(':')) { + if (entry.onRequestChangeTab) { + entry.onRequestChangeTab() } } else { - const tab = this.state.tabs[index] - const n = this.state.rootIndex - (this.props.history.index || 0) - if (n < 0) { - this.props.history.go(n) - } else { - const props = { ...this.props, ...tab } - if (props.onReset) props.onReset(props) - } + this.props.history.replace(entry.path, entry.state) } - this.state.isPending = false + } + + // Diff navigation state + shouldComponentUpdate(nextProps: Props, nextState: State): boolean { + return !isEqual(this.state.navigationState, nextState.navigationState) } // Render view render(): React$Element { return this.props.render({ ...this.state, - match: this.props.match, - location: this.props.location, history: this.props.history, onRequestChangeTab: this.onRequestChangeTab, }) diff --git a/modules/Tabs.js b/modules/Tabs.js index b84b92e..6e7c95d 100644 --- a/modules/Tabs.js +++ b/modules/Tabs.js @@ -1,13 +1,13 @@ /* @flow */ -import React, { Component, createElement } from 'react' +import React from 'react' import { StyleSheet, Dimensions, Text } from 'react-native' import { TabViewAnimated, TabBar } from 'react-native-tab-view' -import { Route, matchPath } from 'react-router' -import type { ContextRouter } from 'react-router' +import { matchPath } from 'react-router' import type { TabSubViewProps, TabBarProps } from './TypeDefinitions' import * as StackUtils from './StackUtils' import TabStack from './TabStack' +import History from './History' const styles = StyleSheet.create({ container: { @@ -28,7 +28,7 @@ type State = { key: string, } -class Tabs extends Component { +class Tabs extends React.Component { props: Props @@ -53,7 +53,7 @@ class Tabs extends Component { if (sceneProps.hideTabBar) return null // Custom tab bar if (sceneProps.renderTabBar) { - return createElement( + return React.createElement( sceneProps.renderTabBar, sceneProps, ) @@ -100,19 +100,18 @@ class Tabs extends Component { const { render, children, component } = sceneProps if (render) return render(sceneProps) else if (children && typeof children === 'function') return children(sceneProps) - else if (component) return createElement(component, sceneProps) + else if (component) return React.createElement(component, sceneProps) return null } render(): React$Element { return ( - - {({ history, location, match }: ContextRouter) => ( + + {({ history, location }) => ( { const ownProps = { ...this.props, ...props } @@ -129,7 +128,7 @@ class Tabs extends Component { }} /> )} - + ) } diff --git a/modules/TypeDefinitions.js b/modules/TypeDefinitions.js index b063855..ef2bbf0 100644 --- a/modules/TypeDefinitions.js +++ b/modules/TypeDefinitions.js @@ -1,12 +1,11 @@ /* @flow */ /* eslint no-use-before-define: 0 */ -import type { ContextRouter, Match } from 'react-router' +import type { ContextRouter } from 'react-router' export type Route = { key: string, routeName: string, - match: ?Match, } export type NavigationState = { diff --git a/package.json b/package.json index 47ac96c..88989bc 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "react-router-native": "4.1.x" }, "dependencies": { + "lodash.isequal": "^4.5.0", "react-native-tab-view": "0.0.65", "react-navigation": "1.0.0-beta.9" }, diff --git a/yarn.lock b/yarn.lock index 8d0ca91..f32792d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2963,6 +2963,10 @@ lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" From f65f8f4b890644f33739e94594b58ef08a23bc8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Mon, 22 May 2017 15:16:04 +0200 Subject: [PATCH 15/50] refactor(examples): rewrite src Huge app --- examples/Huge/.flowconfig | 1 + .../Huge/flow-typed/npm/react-redux_v5.x.x.js | 91 +++++++++++++ .../npm/react-router-native_v4.x.x.js | 34 +++++ .../flow-typed/npm/react-router_v4.x.x.js | 128 ++++++++++++++++++ examples/Huge/flow-typed/npm/redux_v3.x.x.js | 58 ++++++++ examples/Huge/index.ios.js | 6 +- examples/Huge/package.json | 52 +++---- examples/Huge/src/Article.js | 92 +++++++++++++ .../{app/modules/Feed/index.js => Feed.js} | 48 +++++-- examples/Huge/src/List.js | 83 ++++++++++++ .../modules/Profile/index.js => Profile.js} | 54 +++++++- examples/Huge/src/app/assets/search.png | Bin 868 -> 0 bytes .../modules/Feed/components/Article/index.js | 57 -------- .../modules/Feed/components/Article/styles.js | 30 ---- .../app/modules/Feed/components/List/index.js | 49 ------- .../modules/Feed/components/List/styles.js | 19 --- examples/Huge/src/app/modules/Feed/styles.js | 16 --- .../Huge/src/app/modules/Profile/styles.js | 37 ----- examples/Huge/src/app/package.json | 3 - examples/Huge/src/app/styles.js | 20 --- examples/Huge/src/{app => }/assets/feed.png | Bin .../Huge/src/{app => }/assets/profile.png | Bin examples/Huge/src/helpers/Router.js | 20 --- examples/Huge/src/helpers/package.json | 3 - examples/Huge/src/index.js | 15 -- examples/Huge/src/ressources/package.json | 3 - examples/Huge/src/store/history.js | 37 ----- examples/Huge/src/store/index.js | 17 --- examples/Huge/src/store/package.json | 3 - examples/Huge/src/{ressources => }/theme.js | 2 + 30 files changed, 604 insertions(+), 374 deletions(-) create mode 100644 examples/Huge/flow-typed/npm/react-redux_v5.x.x.js create mode 100644 examples/Huge/flow-typed/npm/react-router-native_v4.x.x.js create mode 100644 examples/Huge/flow-typed/npm/react-router_v4.x.x.js create mode 100644 examples/Huge/flow-typed/npm/redux_v3.x.x.js create mode 100644 examples/Huge/src/Article.js rename examples/Huge/src/{app/modules/Feed/index.js => Feed.js} (56%) create mode 100644 examples/Huge/src/List.js rename examples/Huge/src/{app/modules/Profile/index.js => Profile.js} (63%) delete mode 100644 examples/Huge/src/app/assets/search.png delete mode 100644 examples/Huge/src/app/modules/Feed/components/Article/index.js delete mode 100644 examples/Huge/src/app/modules/Feed/components/Article/styles.js delete mode 100644 examples/Huge/src/app/modules/Feed/components/List/index.js delete mode 100644 examples/Huge/src/app/modules/Feed/components/List/styles.js delete mode 100644 examples/Huge/src/app/modules/Feed/styles.js delete mode 100644 examples/Huge/src/app/modules/Profile/styles.js delete mode 100644 examples/Huge/src/app/package.json delete mode 100644 examples/Huge/src/app/styles.js rename examples/Huge/src/{app => }/assets/feed.png (100%) rename examples/Huge/src/{app => }/assets/profile.png (100%) delete mode 100644 examples/Huge/src/helpers/Router.js delete mode 100644 examples/Huge/src/helpers/package.json delete mode 100644 examples/Huge/src/index.js delete mode 100644 examples/Huge/src/ressources/package.json delete mode 100644 examples/Huge/src/store/history.js delete mode 100644 examples/Huge/src/store/index.js delete mode 100644 examples/Huge/src/store/package.json rename examples/Huge/src/{ressources => }/theme.js (86%) diff --git a/examples/Huge/.flowconfig b/examples/Huge/.flowconfig index a76425e..e912b57 100644 --- a/examples/Huge/.flowconfig +++ b/examples/Huge/.flowconfig @@ -7,6 +7,7 @@ ; Ignore unexpected extra "@providesModule" .*/node_modules/.*/node_modules/fbjs/.* +.*/node_modules/react-navigation/.*/__tests__/.* ; Ignore duplicate module providers ; For RN Apps installed via npm, "Libraries" folder is inside diff --git a/examples/Huge/flow-typed/npm/react-redux_v5.x.x.js b/examples/Huge/flow-typed/npm/react-redux_v5.x.x.js new file mode 100644 index 0000000..bd81781 --- /dev/null +++ b/examples/Huge/flow-typed/npm/react-redux_v5.x.x.js @@ -0,0 +1,91 @@ +// flow-typed signature: cfe423889942df70fd53fcaad18ef279 +// flow-typed version: 84d79be776/react-redux_v5.x.x/flow_>=v0.30.x + +import type { Dispatch, Store } from 'redux' + +declare module 'react-redux' { + + /* + + S = State + A = Action + OP = OwnProps + SP = StateProps + DP = DispatchProps + + */ + + declare type MapStateToProps = (state: S, ownProps: OP) => SP | MapStateToProps; + + declare type MapDispatchToProps = ((dispatch: Dispatch, ownProps: OP) => DP) | DP; + + declare type MergeProps = (stateProps: SP, dispatchProps: DP, ownProps: OP) => P; + + declare type Context = { store: Store<*, *> }; + + declare type StatelessComponent

= (props: P, context: Context) => ?React$Element; + + declare class ConnectedComponent extends React$Component { + static WrappedComponent: Class>; + getWrappedInstance(): React$Component; + static defaultProps: void; + props: OP; + state: void; + } + + declare type ConnectedComponentClass = Class>; + + declare type Connector = { + (component: StatelessComponent

): ConnectedComponentClass; + (component: Class>): ConnectedComponentClass; + }; + + declare class Provider extends React$Component, children?: any }, void> { } + + declare type ConnectOptions = { + pure?: boolean, + withRef?: boolean + }; + + declare type Null = null | void; + + declare function connect( + ...rest: Array // <= workaround for https://github.com/facebook/flow/issues/2360 + ): Connector } & OP>>; + + declare function connect( + mapStateToProps: Null, + mapDispatchToProps: Null, + mergeProps: Null, + options: ConnectOptions + ): Connector } & OP>>; + + declare function connect( + mapStateToProps: MapStateToProps, + mapDispatchToProps: Null, + mergeProps: Null, + options?: ConnectOptions + ): Connector } & OP>>; + + declare function connect( + mapStateToProps: Null, + mapDispatchToProps: MapDispatchToProps, + mergeProps: Null, + options?: ConnectOptions + ): Connector>; + + declare function connect( + mapStateToProps: MapStateToProps, + mapDispatchToProps: MapDispatchToProps, + mergeProps: Null, + options?: ConnectOptions + ): Connector>; + + declare function connect( + mapStateToProps: MapStateToProps, + mapDispatchToProps: MapDispatchToProps, + mergeProps: MergeProps, + options?: ConnectOptions + ): Connector; + +} diff --git a/examples/Huge/flow-typed/npm/react-router-native_v4.x.x.js b/examples/Huge/flow-typed/npm/react-router-native_v4.x.x.js new file mode 100644 index 0000000..2e2b3c8 --- /dev/null +++ b/examples/Huge/flow-typed/npm/react-router-native_v4.x.x.js @@ -0,0 +1,34 @@ +// flow-typed signature: 07423e13d22d83c255c563e719e383f4 +// flow-typed version: 53afdde167/react-router-native_v4.x.x/flow_>=v0.38.x + +declare module 'react-router-native' { + declare export type GetUserConfirmation = + (message: string, callback: (confirmed: boolean) => void) => void + + declare type LocationShape = { + pathname?: string, + search?: string, + hash?: string, + state?: any, + } + + declare export class NativeRouter extends React$Component { + props: { + getUserConfirmation?: GetUserConfirmation, + keyLength?: number, + children?: React$Element<*>, + } + } + + declare export class Link extends React$Component { + props: { + to: string | LocationShape, + replace?: boolean, + children?: React$Element<*>, + } + } + + declare export class DeepLinking extends React$Component {} + + declare export class AndroidBackButton extends React$Component {} +} diff --git a/examples/Huge/flow-typed/npm/react-router_v4.x.x.js b/examples/Huge/flow-typed/npm/react-router_v4.x.x.js new file mode 100644 index 0000000..564b558 --- /dev/null +++ b/examples/Huge/flow-typed/npm/react-router_v4.x.x.js @@ -0,0 +1,128 @@ +// flow-typed signature: 6754d868bed664ee0e73f1799c67e2a1 +// flow-typed version: 777f182c85/react-router_v4.x.x/flow_>=v0.38.x + +declare module 'react-router' { + // NOTE: many of these are re-exported by react-router-dom and + // react-router-native, so when making changes, please be sure to update those + // as well. + declare export type Location = { + pathname: string, + search: string, + hash: string, + state?: any, + key?: string, + } + + declare export type LocationShape = { + pathname?: string, + search?: string, + hash?: string, + state?: any, + } + + declare export type HistoryAction = 'PUSH' | 'REPLACE' | 'POP' + + declare export type RouterHistory = { + length: number, + location: Location, + action: HistoryAction, + listen(callback: (location: Location, action: HistoryAction) => void): () => void, + push(path: string | LocationShape, state?: any): void, + replace(path: string | LocationShape, state?: any): void, + go(n: number): void, + goBack(): void, + goForward(): void, + canGo?: (n: number) => bool, + block(callback: (location: Location, action: HistoryAction) => boolean): void, + // createMemoryHistory + index?: number, + entries?: Array, + } + + declare export type Match = { + params: Object, + isExact: boolean, + path: string, + url: string, + } + + declare export type ContextRouter = { + history: RouterHistory, + location: Location, + match: Match, + } + + declare export type GetUserConfirmation = + (message: string, callback: (confirmed: boolean) => void) => void + + declare type StaticRouterContext = { + url?: string, + } + + declare export class StaticRouter extends React$Component { + props: { + basename?: string, + location?: string | Location, + context: StaticRouterContext, + children?: React$Element<*>, + } + } + + declare export class MemoryRouter extends React$Component { + props: { + initialEntries?: Array, + initialIndex?: number, + getUserConfirmation?: GetUserConfirmation, + keyLength?: number, + children?: React$Element<*>, + } + } + + declare export class Router extends React$Component { + props: { + history: RouterHistory, + children?: React$Element<*>, + } + } + + declare export class Prompt extends React$Component { + props: { + message: string | (location: Location) => string | true, + when?: boolean, + } + } + + declare export class Redirect extends React$Component { + props: { + to: string | LocationShape, + push?: boolean, + } + } + + declare export class Route extends React$Component { + props: { + component?: ReactClass<*>, + render?: (router: ContextRouter) => React$Element<*>, + children?: (router: ContextRouter) => React$Element<*>, + path?: string, + exact?: bool, + strict?: bool, + } + } + + declare export class Switch extends React$Component { + props: { + children?: Array>, + } + } + + declare type FunctionComponent

= (props: P) => ?React$Element; + declare type ClassComponent = Class>; + declare export function withRouter(Component: ClassComponent | FunctionComponent

): ClassComponent, S>; + + declare type MatchPathOptions = { + exact?: boolean, + strict?: boolean, + } + declare export function matchPath(pathname: string, path: string, options?: MatchPathOptions): null | Match +} diff --git a/examples/Huge/flow-typed/npm/redux_v3.x.x.js b/examples/Huge/flow-typed/npm/redux_v3.x.x.js new file mode 100644 index 0000000..f4f5e20 --- /dev/null +++ b/examples/Huge/flow-typed/npm/redux_v3.x.x.js @@ -0,0 +1,58 @@ +// flow-typed signature: 7f1a115f75043c44385071ea3f33c586 +// flow-typed version: 358375125e/redux_v3.x.x/flow_>=v0.33.x + +declare module 'redux' { + + /* + + S = State + A = Action + + */ + + declare type Dispatch }> = (action: A) => A; + + declare type MiddlewareAPI = { + dispatch: Dispatch; + getState(): S; + }; + + declare type Store = { + // rewrite MiddlewareAPI members in order to get nicer error messages (intersections produce long messages) + dispatch: Dispatch; + getState(): S; + subscribe(listener: () => void): () => void; + replaceReducer(nextReducer: Reducer): void + }; + + declare type Reducer = (state: S, action: A) => S; + + declare type CombinedReducer = (state: $Shape & {} | void, action: A) => S; + + declare type Middleware = + (api: MiddlewareAPI) => + (next: Dispatch) => Dispatch; + + declare type StoreCreator = { + (reducer: Reducer, enhancer?: StoreEnhancer): Store; + (reducer: Reducer, preloadedState: S, enhancer?: StoreEnhancer): Store; + }; + + declare type StoreEnhancer = (next: StoreCreator) => StoreCreator; + + declare function createStore(reducer: Reducer, enhancer?: StoreEnhancer): Store; + declare function createStore(reducer: Reducer, preloadedState: S, enhancer?: StoreEnhancer): Store; + + declare function applyMiddleware(...middlewares: Array>): StoreEnhancer; + + declare type ActionCreator = (...args: Array) => A; + declare type ActionCreators = { [key: K]: ActionCreator }; + + declare function bindActionCreators>(actionCreator: C, dispatch: Dispatch): C; + declare function bindActionCreators>(actionCreators: C, dispatch: Dispatch): C; + + declare function combineReducers(reducers: O): CombinedReducer<$ObjMap(r: Reducer) => S>, A>; + + declare function compose(...fns: Array>): Function; + +} diff --git a/examples/Huge/index.ios.js b/examples/Huge/index.ios.js index 821eaf1..f82ee97 100644 --- a/examples/Huge/index.ios.js +++ b/examples/Huge/index.ios.js @@ -1,4 +1,6 @@ +/* @flow */ + import { AppRegistry } from 'react-native' -import Huge from './src' +import App from './src' -AppRegistry.registerComponent('Huge', () => Huge) +AppRegistry.registerComponent('Huge', () => App) diff --git a/examples/Huge/package.json b/examples/Huge/package.json index 8eb3c04..c516fa1 100644 --- a/examples/Huge/package.json +++ b/examples/Huge/package.json @@ -1,27 +1,29 @@ { - "name": "Huge", - "version": "0.0.1", - "private": true, - "scripts": { - "start": "node node_modules/react-native/local-cli/cli.js start", - "test": "jest" - }, - "dependencies": { - "react": "16.0.0-alpha.6", - "react-native": "0.44.0", - "react-redux": "^5.0.2", - "react-router": "4.1.1", - "react-router-native": "4.1.1", - "react-router-navigation": "file:./../../", - "redux": "^3.6.0" - }, - "devDependencies": { - "babel-jest": "20.0.1", - "babel-preset-react-native": "1.9.2", - "jest": "20.0.1", - "react-test-renderer": "16.0.0-alpha.6" - }, - "jest": { - "preset": "react-native" - } + "name": "Huge", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node node_modules/react-native/local-cli/cli.js start", + "test": "jest" + }, + "dependencies": { + "history": "^4.6.1", + "react": "16.0.0-alpha.6", + "react-native": "0.44.0", + "react-redux": "^5.0.2", + "react-router": "4.1.1", + "react-router-native": "4.1.1", + "react-router-navigation": "file:./../../", + "react-router-redux": "^5.0.0-alpha.6", + "redux": "^3.6.0" + }, + "devDependencies": { + "babel-jest": "20.0.1", + "babel-preset-react-native": "1.9.2", + "jest": "20.0.1", + "react-test-renderer": "16.0.0-alpha.6" + }, + "jest": { + "preset": "react-native" + } } diff --git a/examples/Huge/src/Article.js b/examples/Huge/src/Article.js new file mode 100644 index 0000000..88b82dd --- /dev/null +++ b/examples/Huge/src/Article.js @@ -0,0 +1,92 @@ +/* eslint react/no-unused-prop-types: 0 */ + +import React from 'react' +import { StyleSheet, View, Text, TouchableOpacity } from 'react-native' +import type { Match, Location } from 'react-router' +import { Link } from 'react-router-native' +import { BRAND_COLOR_50, BRAND_COLOR_60 } from './theme' + +const styles = StyleSheet.create({ + scene: { + flex: 1, + alignItems: 'flex-start', + padding: 20, + }, + link: { + marginTop: 16, + marginLeft: -8, + paddingVertical: 10, + paddingHorizontal: 18, + borderWidth: 1, + borderColor: BRAND_COLOR_50, + borderRadius: 3, + }, + span: { + color: BRAND_COLOR_60, + }, + strong: { + marginTop: 5, + fontWeight: '700', + }, +}) + +type Props = { + match: Match, + location: Location, +} + +type State = { + time: 0, +} + +class Article extends React.Component { + + props: Props + state: State = { time: 0 } + + componentDidMount(): void { + this.timer = setInterval(() => { + if (this.props.match && this.props.match.url === this.props.location.pathname) { + this.setState(prevState => ({ + time: prevState.time + 250, + })) + } + }, 250) + } + + componentWillUnmount(): void { + clearInterval(this.timer) + } + + shouldComponentUpdate(nextProps, nextState): boolean { + return this.state.time !== nextState.time + } + + render(): React$Element { + const { match } = this.props + return ( + + + I know words. I have the best words. Be careful, or I will spill the + beans on your placeholder text. Trump Ipsum is calling for a total + and complete shutdown of Muslim text entering your website. + + + Focus time: {this.state.time / 1000}s + + + + See item {parseInt(match.params.id, 10) + 1} + + + + ) + } + +} + +export default Article diff --git a/examples/Huge/src/app/modules/Feed/index.js b/examples/Huge/src/Feed.js similarity index 56% rename from examples/Huge/src/app/modules/Feed/index.js rename to examples/Huge/src/Feed.js index 419ad9f..9fbe72a 100644 --- a/examples/Huge/src/app/modules/Feed/index.js +++ b/examples/Huge/src/Feed.js @@ -1,15 +1,38 @@ +/* @flow */ + import React, { Component } from 'react' -import { View, Text } from 'react-native' -import { Link } from 'react-router-native' +import { StyleSheet, View } from 'react-native' import { Navigation, Card } from 'react-router-navigation' +import type { Match } from 'react-router' import HeaderTitle from 'react-navigation/src/views/HeaderTitle' -import List from './components/List' -import Article from './components/Article' -import styles from './styles' +import List from './List' +import Article from './Article' +import { BRAND_COLOR_50 } from './theme' + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, + navBar: { + backgroundColor: BRAND_COLOR_50, + }, + title: { + color: 'white', + }, +}) + +type Props = { + match: Match, +} /* FIX > https://github.com/facebook/react/issues/4936 */ -class Feed extends Component { - render() { +class Feed extends Component { + + props: Props + listView: List + + render(): React$Element { + const { match: { url } } = this.props return ( ( + path={url} + render={props => ( this.listView = c} + ref={(c) => { + this.listView = c + }} {...props} /> )} title="Feed" /> ) } + } export default Feed diff --git a/examples/Huge/src/List.js b/examples/Huge/src/List.js new file mode 100644 index 0000000..d9d772d --- /dev/null +++ b/examples/Huge/src/List.js @@ -0,0 +1,83 @@ +/* @flow */ + +import React from 'react' +import { StyleSheet, PixelRatio, ListView, View, Text } from 'react-native' +import { Link } from 'react-router-native' +import type { Match } from 'react-router' + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, + separator: { + borderBottomWidth: 1 / PixelRatio.get(), + borderBottomColor: '#cdcdcd', + }, + row: { + padding: 15, + backgroundColor: 'white', + fontSize: 16, + fontWeight: '500', + }, +}) + +type Props = { + match: Match, +} + +type State = { + dataSource: Object, +} + +class List extends React.Component { + + props: Props + state: State + + listView: ListView + + constructor(props: Props): void { + super(props) + const ds = new ListView.DataSource({ + rowHasChanged: () => false, + }) + this.state = { + dataSource: ds.cloneWithRows( + Array + .from({ length: 100 }) + .map((a, i) => `Item ${i + 1}`), + ), + } + } + + scrollTo = (options: Object): void => { + if (this.listView) this.listView.scrollTo(options) + } + + render(): React$Element { + const { match: { url } } = this.props + return ( + { + this.listView = c + }} + style={styles.container} + dataSource={this.state.dataSource} + renderRow={rowData => ( + + {rowData} + + )} + renderSeparator={(sectionIndex, rowIndex) => ( + + )} + /> + ) + } + +} + +export default List diff --git a/examples/Huge/src/app/modules/Profile/index.js b/examples/Huge/src/Profile.js similarity index 63% rename from examples/Huge/src/app/modules/Profile/index.js rename to examples/Huge/src/Profile.js index 23bce67..227761a 100644 --- a/examples/Huge/src/app/modules/Profile/index.js +++ b/examples/Huge/src/Profile.js @@ -1,19 +1,59 @@ +/* @flow */ + import React from 'react' -import { View, TouchableOpacity, Text } from 'react-native' +import { StyleSheet, Platform, View, TouchableOpacity, Text } from 'react-native' import { Route, Redirect } from 'react-router' +import type { Match } from 'react-router' import { Link } from 'react-router-native' import { Tabs, Tab } from 'react-router-navigation' -import styles from './styles' +import { BRAND_COLOR_50 } from './theme' + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, + scene: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + tabBar: { + paddingTop: Platform.OS === 'ios' ? 10 : 0, + backgroundColor: BRAND_COLOR_50, + }, + indicatorStyle: { + backgroundColor: 'white', + }, + link: { + marginTop: 20, + marginLeft: -8, + paddingVertical: 10, + paddingHorizontal: 18, + borderWidth: 1, + borderColor: BRAND_COLOR_50, + borderRadius: 3, + }, + span: { + color: BRAND_COLOR_50, + }, + strong: { + fontWeight: '700', + }, +}) + +type Props = { + match: Match, +} -const Profile = () => ( +const Profile = ({ match: { url } }: Props): React$Element => ( } /> ( ( tabBarIndicatorStyle={styles.indicatorStyle} > ( @@ -38,7 +78,7 @@ const Profile = () => ( )} /> ( diff --git a/examples/Huge/src/app/assets/search.png b/examples/Huge/src/app/assets/search.png deleted file mode 100644 index 21be572990b53d8e0e518c620a3257f19bd1864b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 868 zcmV-q1DpJbP)4TXzm;VPvvcwr7M2HdMWZC4h%@*Fpv8egxp~((Y zn87r=G|e{>5gdAh-w;FJGSD0$G5Oixek~W>XQ5xN!S4pCKbV8L+nBxeu;pFk6jHt%3Y88F% zkKsiO{ajeVD*f-u4qol4iPu;ZLsV0El|fVytjVjTe#Z}0H8qDdTWYBye%Mx1H?ZbV zEtSO&i)v~aYxFNWjvtb0>Lu3H)KVk(VN^}M$C?+lR0uzW)zs(LzJcazzl9!N`yX)? zYYwa&qf2V)k-G=kCVnWXsU@t*TR5?Y_|x61L=;g?{^-!3=vJ*u05xx2ZQT>2*^N6ZJl3t{FLR7OjaEhpIiPEhY z_s)L)N{SYux+6t5(uT`#lE9I51l=RKF7Ev&1l`v-Gt32Is7$PbgYytE^fMtGicm)k zHQ6K6=Bc|+3o%sVO&rV6KrmNjn?;h05+=+jNtP(-cOJFz4{>gm2I6~P;!uV<;<38^ zbd)b}D8f17pHGKF6sf6{O34BFX=x|671Lj*$-gQGJyp z#y-QjaaOoS+H^&M3AC>eW1rF&5prx$=8}7!Y4SjoBTE0ZKj&5u15pSB2}c3`IrmCk zN&tU*9%W+D&w9!E`2-4=u!ZsECwxr8;wMaDyw6P-!g%o$wn^yxgeHu2ZbAuT@)HI+ uz$BDlI`Y0rC_y#QeWU*Wendn>M8plT<4%HsxPR9G0000 { - if (this.props.match && this.props.match.url === this.props.location.pathname) { - this.setState((state) => ({ - time: state.time + 250, - })) - } - }, 250) - } - - componentWillUnmount() { - clearInterval(this.timer) - } - - shouldComponentUpdate(nextProps, nextState) { - return this.state.time !== nextState.time - } - - render() { - const { match } = this.props - return ( - - - I know words. I have the best words. Be careful, or I will spill the - beans on your placeholder text. Trump Ipsum is calling for a total - and complete shutdown of Muslim text entering your website. - - - Focus time: {this.state.time / 1000}s - - - - See item {parseInt(match.params.id) + 1} - - - - ) - } - -} - -export default Article diff --git a/examples/Huge/src/app/modules/Feed/components/Article/styles.js b/examples/Huge/src/app/modules/Feed/components/Article/styles.js deleted file mode 100644 index a5505f6..0000000 --- a/examples/Huge/src/app/modules/Feed/components/Article/styles.js +++ /dev/null @@ -1,30 +0,0 @@ -/* @flow */ - -import { StyleSheet } from 'react-native' -import { BRAND_COLOR_50, BRAND_COLOR_60 } from '@ressources/theme' - -const styles = StyleSheet.create({ - scene: { - flex: 1, - alignItems: 'flex-start', - padding: 20, - }, - link: { - marginTop: 16, - marginLeft: -8, - paddingVertical: 10, - paddingHorizontal: 18, - borderWidth: 1, - borderColor: BRAND_COLOR_50, - borderRadius: 3, - }, - span: { - color: BRAND_COLOR_60, - }, - strong: { - marginTop: 5, - fontWeight: '700', - }, -}) - -export default styles diff --git a/examples/Huge/src/app/modules/Feed/components/List/index.js b/examples/Huge/src/app/modules/Feed/components/List/index.js deleted file mode 100644 index 75ad7d6..0000000 --- a/examples/Huge/src/app/modules/Feed/components/List/index.js +++ /dev/null @@ -1,49 +0,0 @@ -import React, { Component } from 'react' -import { ListView, View, Text } from 'react-native' -import { Link } from 'react-router-native' -import styles from './styles' - -class List extends Component { - - constructor(props) { - super(props) - const ds = new ListView.DataSource({ - rowHasChanged: () => false, - }) - this.state = { - dataSource: ds.cloneWithRows( - Array - .from({ length: 100 }) - .map((a, i) => `Item ${i + 1}`) - ), - } - } - - scrollTo = (options: Object): void => { - if (this.listView) this.listView.scrollTo(options) - } - - render() { - return ( - this.listView = c} - style={styles.container} - dataSource={this.state.dataSource} - renderRow={(rowData) => ( - - {rowData} - - )} - renderSeparator={(sectionIndex, rowIndex) => ( - - )} - /> - ) - } - -} - -export default List diff --git a/examples/Huge/src/app/modules/Feed/components/List/styles.js b/examples/Huge/src/app/modules/Feed/components/List/styles.js deleted file mode 100644 index 97c7c27..0000000 --- a/examples/Huge/src/app/modules/Feed/components/List/styles.js +++ /dev/null @@ -1,19 +0,0 @@ -import { StyleSheet, PixelRatio } from 'react-native' - -const styles = StyleSheet.create({ - container: { - flex: 1, - }, - separator: { - borderBottomWidth: 1 / PixelRatio.get(), - borderBottomColor: '#cdcdcd', - }, - row: { - padding: 15, - backgroundColor: 'white', - fontSize: 16, - fontWeight: '500', - }, -}) - -export default styles diff --git a/examples/Huge/src/app/modules/Feed/styles.js b/examples/Huge/src/app/modules/Feed/styles.js deleted file mode 100644 index 34f07da..0000000 --- a/examples/Huge/src/app/modules/Feed/styles.js +++ /dev/null @@ -1,16 +0,0 @@ -import { StyleSheet } from 'react-native' -import { BRAND_COLOR_50 } from '@ressources/theme' - -const styles = StyleSheet.create({ - container: { - flex: 1, - }, - navBar: { - backgroundColor: BRAND_COLOR_50, - }, - title: { - color: 'white', - }, -}) - -export default styles diff --git a/examples/Huge/src/app/modules/Profile/styles.js b/examples/Huge/src/app/modules/Profile/styles.js deleted file mode 100644 index 5fd750a..0000000 --- a/examples/Huge/src/app/modules/Profile/styles.js +++ /dev/null @@ -1,37 +0,0 @@ -import { StyleSheet, Platform } from 'react-native' -import { BRAND_COLOR_50 } from '@ressources/theme' - -const styles = StyleSheet.create({ - container: { - flex: 1, - }, - scene: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - tabBar: { - paddingTop: Platform.OS === 'ios' ? 10 : 0, - backgroundColor: BRAND_COLOR_50, - }, - indicatorStyle: { - backgroundColor: 'white', - }, - link: { - marginTop: 20, - marginLeft: -8, - paddingVertical: 10, - paddingHorizontal: 18, - borderWidth: 1, - borderColor: BRAND_COLOR_50, - borderRadius: 3, - }, - span: { - color: BRAND_COLOR_50, - }, - strong: { - fontWeight: '700', - }, -}) - -export default styles diff --git a/examples/Huge/src/app/package.json b/examples/Huge/src/app/package.json deleted file mode 100644 index 783adf5..0000000 --- a/examples/Huge/src/app/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "@app" -} diff --git a/examples/Huge/src/app/styles.js b/examples/Huge/src/app/styles.js deleted file mode 100644 index 91b277c..0000000 --- a/examples/Huge/src/app/styles.js +++ /dev/null @@ -1,20 +0,0 @@ -import { StyleSheet } from 'react-native' -import { BRAND_COLOR_60 } from '@ressources/theme' - -const styles = StyleSheet.create({ - tabs: { - flex: 1, - }, - activeLabel: { - color: BRAND_COLOR_60, - }, - modal: { - marginTop: 12.5, - marginBottom: 20, - textAlign: 'center', - fontSize: 17, - fontWeight: '700', - }, -}) - -export default styles diff --git a/examples/Huge/src/app/assets/feed.png b/examples/Huge/src/assets/feed.png similarity index 100% rename from examples/Huge/src/app/assets/feed.png rename to examples/Huge/src/assets/feed.png diff --git a/examples/Huge/src/app/assets/profile.png b/examples/Huge/src/assets/profile.png similarity index 100% rename from examples/Huge/src/app/assets/profile.png rename to examples/Huge/src/assets/profile.png diff --git a/examples/Huge/src/helpers/Router.js b/examples/Huge/src/helpers/Router.js deleted file mode 100644 index 89e10fa..0000000 --- a/examples/Huge/src/helpers/Router.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react' -import * as ReactRouter from 'react-router' -import createHistory from 'history/createMemoryHistory' -import { connect } from 'react-redux' -import { initialyzeHistory, changeHistory } from '@store/history' - -const Router = connect()((ownProps) => { - const { dispatch, ...props } = ownProps - const history = createHistory(props) - dispatch(initialyzeHistory(history)) - history.listen(() => dispatch(changeHistory(history))) - return ( - - ) -}) - -export default Router diff --git a/examples/Huge/src/helpers/package.json b/examples/Huge/src/helpers/package.json deleted file mode 100644 index 85d1c72..0000000 --- a/examples/Huge/src/helpers/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "@helpers" -} diff --git a/examples/Huge/src/index.js b/examples/Huge/src/index.js deleted file mode 100644 index 0194789..0000000 --- a/examples/Huge/src/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import { Provider } from 'react-redux' -import Router from '@helpers/Router' -import App from '@app' -import store from '@store' - -const Huge = () => ( - - - - - -) - -export default Huge diff --git a/examples/Huge/src/ressources/package.json b/examples/Huge/src/ressources/package.json deleted file mode 100644 index 26d3c6c..0000000 --- a/examples/Huge/src/ressources/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "@ressources" -} diff --git a/examples/Huge/src/store/history.js b/examples/Huge/src/store/history.js deleted file mode 100644 index d9ca72d..0000000 --- a/examples/Huge/src/store/history.js +++ /dev/null @@ -1,37 +0,0 @@ -/* eslint symbol-description: 0 */ - -const INITIALYZE_HISTORY = 'INITIALYZE_HISTORY' -const CHANGE_HISTORY = 'CHANGE_HISTORY' - -export const initialyzeHistory = (history) => ({ - type: INITIALYZE_HISTORY, - payload: { history }, -}) - -export const changeHistory = (history) => ({ - type: CHANGE_HISTORY, - payload: { history }, -}) - -const initialState = { - location: null, - index: 0, - entries: [], -} - -export default (state = initialState, action) => { - switch (action.type) { - case INITIALYZE_HISTORY: - case CHANGE_HISTORY: { - const { location, index, entries } = action.payload.history - return { - ...state, - location, - index, - entries, - } - } - default: - return state - } -} diff --git a/examples/Huge/src/store/index.js b/examples/Huge/src/store/index.js deleted file mode 100644 index 7384db7..0000000 --- a/examples/Huge/src/store/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/* eslint no-console: 0 */ - -import { createStore, combineReducers } from 'redux' -import history from './history' - -// Create store -const reducer = combineReducers({ history }) -const store = createStore(reducer) - -// Logger -store.subscribe(() => { - const { history: { index, entries } } = store.getState() - const pathnames = entries.slice(0, index + 1).map(({ pathname }) => pathname) - console.log(pathnames) -}) - -export default store diff --git a/examples/Huge/src/store/package.json b/examples/Huge/src/store/package.json deleted file mode 100644 index cc99608..0000000 --- a/examples/Huge/src/store/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "@store" -} diff --git a/examples/Huge/src/ressources/theme.js b/examples/Huge/src/theme.js similarity index 86% rename from examples/Huge/src/ressources/theme.js rename to examples/Huge/src/theme.js index d7fb2e8..139bd36 100644 --- a/examples/Huge/src/ressources/theme.js +++ b/examples/Huge/src/theme.js @@ -1,2 +1,4 @@ +/* @flow */ + export const BRAND_COLOR_50 = '#1b95e0' export const BRAND_COLOR_60 = '#1581c4' From fd923b6a2e17269e295a56c0320d27ffb8af967f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Mon, 22 May 2017 15:36:15 +0200 Subject: [PATCH 16/50] fix(SceneView): fix first render --- modules/Card.js | 1 + modules/History.js | 5 ++--- modules/SceneView.js | 11 ++++++++--- modules/Tab.js | 1 + 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/modules/Card.js b/modules/Card.js index 98c27fd..4998383 100644 --- a/modules/Card.js +++ b/modules/Card.js @@ -12,6 +12,7 @@ const Card = (props: Props) => ( {({ history, location }) => ( diff --git a/modules/History.js b/modules/History.js index c431772..5153ee6 100644 --- a/modules/History.js +++ b/modules/History.js @@ -21,9 +21,8 @@ class History extends React.Component { constructor(props: Props) { super(props) - this.state = { - location: props.location, - } + const { location } = props.history + this.state = { location } } componentWillMount(): void { diff --git a/modules/SceneView.js b/modules/SceneView.js index dee11cf..1bcba49 100644 --- a/modules/SceneView.js +++ b/modules/SceneView.js @@ -5,7 +5,9 @@ import { matchPath } from 'react-router' import type { ContextRouter, Location } from 'react-router' import type { CardProps } from './TypeDefinitions' -type Props = ContextRouter & CardProps +type Props = ContextRouter & CardProps & { + type: 'card' | 'tab', +} type State = { location: Location, @@ -21,7 +23,7 @@ class SceneView extends React.Component { constructor(props: Props) { super(props) // Build current match - const { location, path, exact, strict } = props + const { path, exact, strict, history: { location } } = props const match = matchPath(location.pathname, { path, exact, strict }) this.state = { match } } @@ -41,8 +43,11 @@ class SceneView extends React.Component { render(): ?React$Element { // Get scene component - const { render, children, component } = this.props + const { render, children, component, type } = this.props const { match } = this.state + // If card, return null is match is not defined + if (type === 'card' && !match) return null + // Return scene component const ownProps = { ...this.props, match } if (render) return render(ownProps) else if (children && typeof children === 'function') return children(ownProps) diff --git a/modules/Tab.js b/modules/Tab.js index 4c0b1a7..89ca14f 100644 --- a/modules/Tab.js +++ b/modules/Tab.js @@ -12,6 +12,7 @@ const Tab = (props: Props) => ( {({ history, location }) => ( From b3e9108803a6894db97f4fe689739e05e1fade2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Tue, 23 May 2017 23:20:15 +0200 Subject: [PATCH 17/50] feat(TabStack): manage history sync --- modules/TabStack.js | 143 ++++++++++++++++++++++++-------------------- 1 file changed, 77 insertions(+), 66 deletions(-) diff --git a/modules/TabStack.js b/modules/TabStack.js index a38c028..977bc3f 100755 --- a/modules/TabStack.js +++ b/modules/TabStack.js @@ -9,6 +9,7 @@ import type { NavigationState, TabsRendererProps, Tab, TabProps } from './TypeDe import * as StackUtils from './StackUtils' type Props = { + location: Location, history: HistoryRouter, // eslint-disable-next-line children?: Array>, @@ -29,8 +30,7 @@ type State = { }>, tabs: Array, rootIndex: number, - location: Location, - history: { [key: number]: Array }, + tabsHistory: { [key: number]: Array }, } class TabStack extends React.Component { @@ -48,12 +48,12 @@ class TabStack extends React.Component { constructor(props: Props): void { super(props) // Build the tab stack $FlowFixMe - const { children, history: { entries, location } } = props + const { children, history: { location, entries } } = props const tabs = children && StackUtils.build(children) if (!tabs) throw new Error('No children found') // Get initial route - const currentRoute = StackUtils.getRoute(tabs, location) - if (!currentRoute) throw new Error('No route found !') + const currentRoute = StackUtils.getRoute(tabs, { ...location }) + if (!currentRoute) throw new Error('No initial route found !') // Build navigation state const routes = tabs.map((tab) => { const route = { @@ -69,38 +69,30 @@ class TabStack extends React.Component { const navigationState = { index, routes } const rootIndex = props.history.index || 0 // Initialyze cached history - const history = { + const tabsHistory = { [index]: entries.slice(location.index), } // Save everything - this.state = { navigationState, tabs, rootIndex, history, location } - } - - componentDidMount(): void { - this.unlisten = this.props.history.listen(this.onChangeHistory) - } - - componentWillUnmount(): void { - this.unlisten() + this.state = { navigationState, tabs, rootIndex, tabsHistory } } - // Listen history events - onChangeHistory = (location: Location): void => { - // Get current route $FlowFixMe - const { history: { entries } } = this.props + componentWillReceiveProps(nextProps: Props): void { + // Extract props + const { location } = this.props + const { location: nextLocation, history: { entries, index: historyIndex } } = nextProps const { navigationState: { routes, index }, tabs, rootIndex } = this.state // Get current tab const currentRoute = routes[index] const currentTab = StackUtils.get(tabs, currentRoute) // Get next tab - const nextRoute = StackUtils.getRoute(tabs, location) + const nextRoute = StackUtils.getRoute(tabs, nextLocation) if (!nextRoute) return const nextTab = StackUtils.get(tabs, nextRoute) const nextIndex = routes.findIndex(({ routeName }) => routeName === nextRoute.routeName) // Update navigation state if ( currentTab && nextTab && - StackUtils.shouldUpdate(currentTab, nextTab, this.state.location, location) + StackUtils.shouldUpdate(currentTab, nextTab, location, nextLocation) ) { this.setState(({ navigationState }) => ({ navigationState: { @@ -109,60 +101,79 @@ class TabStack extends React.Component { }, })) } - // Update history - if (nextRoute) { - this.state.history[nextIndex] = entries.slice( - rootIndex, - this.props.history.index + 1, - ) + // Save history + if (nextRoute && nextLocation.pathname === entries[historyIndex].pathname) { + this.state.tabsHistory[nextIndex] = entries.slice(rootIndex, historyIndex + 1) } - // Save location - this.state.location = location } // Callback for when the current tab changes onRequestChangeTab = (index: number): void => { if (index < 0) return // 1) Set index directly - this.setState(prevState => ({ - navigationState: { - ...prevState.navigationState, - index, - }, - })) - // 2) Resync history if needed - if (this.props.forceSync) { - // Get entries - const entries = this.state.history[index] - // Update index + length + entries properties - const newHistoryIndex = 2 - this.props.history.index = newHistoryIndex - this.props.history.entries = [ - ...this.props.history.entries, - ...entries, - ] - this.props.history.length = this.props.history.entries.length - } - // 3) Prevent history of changes - // Warning: we must deal with this king of thing: - // const App = () => ( - // - // - // history.push('/one')} - // /> - // - // ) - const entry = this.state.tabs[index] // $FlowFixMe - if (entry.path.includes(':')) { - if (entry.onRequestChangeTab) { - entry.onRequestChangeTab() + const { lazy, forceSync, history: { entries, index: historyIndex } } = this.props + const { navigationState, tabsHistory, tabs, rootIndex } = this.state + if (index !== navigationState.index) { + if (!lazy || tabsHistory[index]) { + this.setState(prevState => ({ + navigationState: { + ...prevState.navigationState, + index, + }, + })) + } + // 2) Resync history if needed + if (forceSync) { + // Re-build hisstory + const newEntries = tabsHistory[index] + ? [ + ...entries.slice(0, rootIndex), + ...tabsHistory[index], + ] + : [...entries.slice(0, rootIndex + 1)] + const newIndex = tabsHistory[index] + ? (newEntries.length - 1) + : rootIndex + // Save it + this.props.history.entries = [...newEntries] + this.props.history.location = { ...newEntries[newIndex] } + this.props.history.index = newIndex + this.props.history.length = newEntries.length + } + // 3) Prevent history of changes + // Warning: we must deal with this king of thing: + // const App = () => ( + // + // + // history.push('/one')} + // /> + // + // ) + if (!tabsHistory[index]) { + const entry = tabs[index] // $FlowFixMe + if (entry.onRequestChangeTab && !tabsHistory[index]) { + entry.onRequestChangeTab() + } else { + this.props.history.replace(entry.path, entry.state) + } + } else { + const entry = tabsHistory[index].slice(-1)[0] + this.props.history.replace(entry.pathname, entry.state) } } else { - this.props.history.replace(entry.path, entry.state) + // 4) Reset tab + const tab = tabs[index] + const n = rootIndex - (historyIndex || 0) + if (n < 0) { + this.props.history.go(n) + } else { + const props = { ...this.props, ...tab } + if (props.onReset) props.onReset(props) + } } } From d10a1f42b8845b4acba789d3108eb9f1af7b717c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Tue, 23 May 2017 23:23:11 +0200 Subject: [PATCH 18/50] fix(examples): some fixes --- examples/Huge/src/Profile.js | 100 +++++++++++---------------- examples/Huge/src/app/index.js | 87 ------------------------ examples/Huge/src/index.js | 120 +++++++++++++++++++++++++++++++++ 3 files changed, 159 insertions(+), 148 deletions(-) delete mode 100644 examples/Huge/src/app/index.js create mode 100644 examples/Huge/src/index.js diff --git a/examples/Huge/src/Profile.js b/examples/Huge/src/Profile.js index 227761a..0566cf1 100644 --- a/examples/Huge/src/Profile.js +++ b/examples/Huge/src/Profile.js @@ -3,20 +3,11 @@ import React from 'react' import { StyleSheet, Platform, View, TouchableOpacity, Text } from 'react-native' import { Route, Redirect } from 'react-router' -import type { Match } from 'react-router' import { Link } from 'react-router-native' import { Tabs, Tab } from 'react-router-navigation' import { BRAND_COLOR_50 } from './theme' const styles = StyleSheet.create({ - container: { - flex: 1, - }, - scene: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, tabBar: { paddingTop: Platform.OS === 'ios' ? 10 : 0, backgroundColor: BRAND_COLOR_50, @@ -24,6 +15,11 @@ const styles = StyleSheet.create({ indicatorStyle: { backgroundColor: 'white', }, + scene: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, link: { marginTop: 20, marginLeft: -8, @@ -41,64 +37,46 @@ const styles = StyleSheet.create({ }, }) -type Props = { - match: Match, -} - -const Profile = ({ match: { url } }: Props): React$Element => ( - - } +const Profile = (): React$Element => ( + + ( + + Current: likes + + Go to bookmarks + + + )} /> - ( - - + Current: bookmarks + - ( - - Current: likes - - Go to bookmarks - - - )} - /> - ( - - Current: bookmarks - - Go to likes - - - )} - /> - + Go to likes + )} /> - + ) export default Profile diff --git a/examples/Huge/src/app/index.js b/examples/Huge/src/app/index.js deleted file mode 100644 index 3acad84..0000000 --- a/examples/Huge/src/app/index.js +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint global-require: 0 */ - -import React from 'react' -import { StatusBar, Platform, View, Image, Text } from 'react-native' -import { withRouter, Switch, Route, Redirect } from 'react-router' -import { BottomNavigation, Tab } from 'react-router-navigation' -import { BRAND_COLOR_50, BRAND_COLOR_60 } from '@ressources/theme' -import Feed from './modules/Feed' -import Profile from './modules/Profile' -import styles from './styles' - -const App = (props) => ( - - } - /> - ( - - - - ( - this.feed = c} - /> - )} - onReset={() => { - if (this.feed && this.feed.listView) { - this.feed.listView.scrollTo({ y: 0 }) - } - }} - label="Feed" - renderTabIcon={({ focused, tabTintColor, tabActiveTintColor }) => ( - - )} - /> - props.history.replace(`${url}/profile/likes`)} - label="Profile" - renderTabIcon={({ focused, tabTintColor, tabActiveTintColor }) => ( - - )} - /> - - - )} - /> - -) - -export default withRouter(App) diff --git a/examples/Huge/src/index.js b/examples/Huge/src/index.js new file mode 100644 index 0000000..921bcf7 --- /dev/null +++ b/examples/Huge/src/index.js @@ -0,0 +1,120 @@ +/* eslint global-require: 0 */ + +import React from 'react' +import { StyleSheet, StatusBar, Platform, View, Image } from 'react-native' +import { Switch, Route, Redirect } from 'react-router' +import { BottomNavigation, Tab } from 'react-router-navigation' +import { ConnectedRouter, routerReducer, routerMiddleware } from 'react-router-redux' +import createHistory from 'history/createMemoryHistory' +import { Provider } from 'react-redux' +import { createStore, combineReducers, applyMiddleware } from 'redux' +import Feed from './Feed' +import Profile from './Profile' +import { BRAND_COLOR_60 } from './theme' + +const styles = StyleSheet.create({ + tabs: { + flex: 1, + }, +}) + +const history = createHistory() +const historyMiddleware = routerMiddleware(history) +const loggerMiddleware = () => (next) => (action) => { + if (action.type === '@@router/LOCATION_CHANGE') { + console.log(history.entries.map(({ pathname }) => pathname)) + } + next(action) +} + +const store = createStore( + combineReducers({ router: routerReducer }), + applyMiddleware( + historyMiddleware, + loggerMiddleware, + ), +) + +const App = (): React$Element => ( + + + + } + /> + ( + + + + ( + { + this.feed = c + }} + /> + )} + onReset={() => { + if (this.feed && this.feed.listView) { + this.feed.listView.scrollTo({ y: 0 }) + } + }} + label="Feed" + renderTabIcon={({ focused, tabTintColor, tabActiveTintColor }) => ( + + )} + /> + history.replace('/profile/likes')} + onReset={() => history.replace(`${url}/profile/likes`)} + label="Profile" + renderTabIcon={({ focused, tabTintColor, tabActiveTintColor }) => ( + + )} + /> + + + )} + /> + + + +) + +export default App From a2b914f9b76c6749bc70b59d7110864a6bde58dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Tue, 23 May 2017 23:23:29 +0200 Subject: [PATCH 19/50] fix(CardStack): minor improvments --- modules/CardStack.js | 2 +- modules/StackUtils.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/CardStack.js b/modules/CardStack.js index 01e734a..806856e 100755 --- a/modules/CardStack.js +++ b/modules/CardStack.js @@ -38,7 +38,7 @@ class CardStack extends React.Component { // Build the card stack $FlowFixMe const { children, history: { entries, index, location } } = props const cards = children && StackUtils.build(children) - if (!cards) throw new Error('No cards found') + if (!cards) throw new Error('No initial route found') // Get initial route of navigation state if (!entries) throw new Error('No history entries found') // Build navigation state diff --git a/modules/StackUtils.js b/modules/StackUtils.js index caf2a12..afeb46c 100644 --- a/modules/StackUtils.js +++ b/modules/StackUtils.js @@ -86,7 +86,7 @@ export const get = (items: Array, route: Route): ?Item => ({ * Generate unique key */ export const createKey = (route: Route): string => { - return `${route.key}@@${Math.random().toString(10)}` + return `${route.key}@@${Math.random().toString(10).slice(1)}` } @@ -102,7 +102,6 @@ export const getRoute = (stack: Array, location: Location): ?Route => { return { key: createKey(item), routeName: item.key, - match: matchPath(pathname, item), } } From fceeb77d799a3f36d4fdf9cc07731a805b9d5e4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Tue, 23 May 2017 23:26:09 +0200 Subject: [PATCH 20/50] fix(NativeNavigation): rename component --- modules/NativeNavigation.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/NativeNavigation.js b/modules/NativeNavigation.js index 9721769..349af57 100644 --- a/modules/NativeNavigation.js +++ b/modules/NativeNavigation.js @@ -11,7 +11,7 @@ type Props = NavigationProps & { children?: Array>, } -class Navigation extends React.Component { +class NativeNavigation extends React.Component { props: Props @@ -48,4 +48,4 @@ class Navigation extends React.Component { } -export default Navigation +export default NativeNavigation From a4d1bd7d189c6f2271b1625772d4c3e5a1db97b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Tue, 23 May 2017 23:46:31 +0200 Subject: [PATCH 21/50] chore(all): lint --- modules/CardStack.js | 13 +++++----- modules/DefaultRenderer.js | 2 +- modules/History.js | 5 +++- modules/NativeNavigation.js | 51 ------------------------------------- modules/NativeRenderer.js | 5 ---- modules/SceneView.js | 10 +++++--- modules/TabStack.js | 22 +++++++++------- 7 files changed, 30 insertions(+), 78 deletions(-) delete mode 100644 modules/NativeNavigation.js delete mode 100644 modules/NativeRenderer.js diff --git a/modules/CardStack.js b/modules/CardStack.js index 806856e..6c8d4c8 100755 --- a/modules/CardStack.js +++ b/modules/CardStack.js @@ -8,14 +8,11 @@ import isEqual from 'lodash.isequal' import { matchPath } from 'react-router' import { StateUtils } from 'react-navigation' import type { RouterHistory, Location } from 'react-router' -import type { CardsRendererProps, NavigationState, Card, CardProps } from './TypeDefinitions' +import type { CardsRendererProps, NavigationState, Card } from './TypeDefinitions' import * as StackUtils from './StackUtils' type State = { - navigationState: NavigationState<{ - path?: string, - params?: Object, - }>, + navigationState: NavigationState<{}>, cards: Array, } @@ -23,7 +20,8 @@ type Props = { // eslint-disable-next-line location: Location, history: RouterHistory, - children?: Array>, + // eslint-disable-next-line + children?: Array>, render: (props: CardsRendererProps) => React$Element, } @@ -35,7 +33,7 @@ class CardStack extends React.Component { // Initialyze navigation state with initial history constructor(props: Props): void { super(props) - // Build the card stack $FlowFixMe + // Build the card stack const { children, history: { entries, index, location } } = props const cards = children && StackUtils.build(children) if (!cards) throw new Error('No initial route found') @@ -48,6 +46,7 @@ class CardStack extends React.Component { }) if (!card || !card.path) return state const route = StackUtils.getRoute(cards, entry) + if (!route) return state return { index: matchPath(location.pathname, card) ? state.routes.length diff --git a/modules/DefaultRenderer.js b/modules/DefaultRenderer.js index f01cd1e..bbb2b81 100644 --- a/modules/DefaultRenderer.js +++ b/modules/DefaultRenderer.js @@ -73,7 +73,7 @@ class DefaultRenderer extends React.Component { getComponentForRouteName: routeName => this.getSceenComponent(routeName, ownProps), }} navigation={{ - goBack: this.props.onNavigateBack, // $FlowFixMe + goBack: this.props.onNavigateBack, state: this.props.navigationState, dispatch: (action) => { if (action.type === 'Navigation/BACK') { diff --git a/modules/History.js b/modules/History.js index 5153ee6..d05410a 100644 --- a/modules/History.js +++ b/modules/History.js @@ -6,7 +6,9 @@ import { withRouter } from 'react-router' const enhancer = withRouter -type Props = ContextRouter +type Props = ContextRouter & { + children?: () => React$Element, +} type State = { location: Location, @@ -40,6 +42,7 @@ class History extends React.Component { render(): ?React$Element { const { children, history } = this.props + if (!children) return null const { location } = this.state return children({ history, location }) } diff --git a/modules/NativeNavigation.js b/modules/NativeNavigation.js deleted file mode 100644 index 349af57..0000000 --- a/modules/NativeNavigation.js +++ /dev/null @@ -1,51 +0,0 @@ -/* @flow */ -/* eslint react/no-children-prop: 0 */ - -import React from 'react' -import type { NavigationProps } from './TypeDefinitions' -import CardStack from './CardStack' -import NativeRenderer from './NativeRenderer' -import History from './History' - -type Props = NavigationProps & { - children?: Array>, -} - -class NativeNavigation extends React.Component { - - props: Props - - renderScene = (sceneProps: TabSubViewProps): ?React$Element => { - const { render, children, component } = sceneProps - if (render) return render(sceneProps) - else if (children && typeof children === 'function') return children(sceneProps) - else if (component) return React.createElement(component, sceneProps) - return null - } - - render(): React$Element { - const { children, ...props } = this.props - return ( - - {({ history, location }) => ( - ( - - )} - /> - )} - - ) - } - -} - -export default NativeNavigation diff --git a/modules/NativeRenderer.js b/modules/NativeRenderer.js deleted file mode 100644 index e172a13..0000000 --- a/modules/NativeRenderer.js +++ /dev/null @@ -1,5 +0,0 @@ -/* @flow */ - -const NativeRenderer = (): ?React$Element => null - -export default NativeRenderer() diff --git a/modules/SceneView.js b/modules/SceneView.js index 1bcba49..e5a0fb5 100644 --- a/modules/SceneView.js +++ b/modules/SceneView.js @@ -2,15 +2,17 @@ import React from 'react' import { matchPath } from 'react-router' -import type { ContextRouter, Location } from 'react-router' +import type { RouterHistory, Location, Match } from 'react-router' import type { CardProps } from './TypeDefinitions' -type Props = ContextRouter & CardProps & { +type Props = CardProps & { + location: Location, + history: RouterHistory, type: 'card' | 'tab', } type State = { - location: Location, + match: ?Match, } class SceneView extends React.Component { @@ -42,7 +44,7 @@ class SceneView extends React.Component { } render(): ?React$Element { - // Get scene component + // Get scene component $FlowFixMe const { render, children, component, type } = this.props const { match } = this.state // If card, return null is match is not defined diff --git a/modules/TabStack.js b/modules/TabStack.js index 977bc3f..b26ce0b 100755 --- a/modules/TabStack.js +++ b/modules/TabStack.js @@ -3,16 +3,16 @@ /* eslint react/no-unused-prop-types:0 */ import React from 'react' -import type { HistoryRouter, Location } from 'react-router' +import type { RouterHistory, Location } from 'react-router' import isEqual from 'lodash.isequal' -import type { NavigationState, TabsRendererProps, Tab, TabProps } from './TypeDefinitions' +import type { NavigationState, TabsRendererProps, Tab } from './TypeDefinitions' import * as StackUtils from './StackUtils' type Props = { location: Location, - history: HistoryRouter, + history: RouterHistory, // eslint-disable-next-line - children?: Array>, + children?: Array>, render: (props: TabsRendererProps) => React$Element, // eslint-disable-next-line lazy?: boolean, @@ -47,7 +47,7 @@ class TabStack extends React.Component { // Initialyze navigation state with initial history constructor(props: Props): void { super(props) - // Build the tab stack $FlowFixMe + // Build the tab stack const { children, history: { location, entries } } = props const tabs = children && StackUtils.build(children) if (!tabs) throw new Error('No children found') @@ -69,8 +69,9 @@ class TabStack extends React.Component { const navigationState = { index, routes } const rootIndex = props.history.index || 0 // Initialyze cached history + if (!entries) throw new Error('No history entries found') const tabsHistory = { - [index]: entries.slice(location.index), + [index]: entries.slice(props.history.index), } // Save everything this.state = { navigationState, tabs, rootIndex, tabsHistory } @@ -102,7 +103,10 @@ class TabStack extends React.Component { })) } // Save history - if (nextRoute && nextLocation.pathname === entries[historyIndex].pathname) { + if ( + nextRoute && historyIndex && entries && entries[historyIndex] && + nextLocation.pathname === entries[historyIndex].pathname + ) { this.state.tabsHistory[nextIndex] = entries.slice(rootIndex, historyIndex + 1) } } @@ -123,7 +127,7 @@ class TabStack extends React.Component { })) } // 2) Resync history if needed - if (forceSync) { + if (forceSync && entries) { // Re-build hisstory const newEntries = tabsHistory[index] ? [ @@ -157,7 +161,7 @@ class TabStack extends React.Component { const entry = tabs[index] // $FlowFixMe if (entry.onRequestChangeTab && !tabsHistory[index]) { entry.onRequestChangeTab() - } else { + } else { // $FlowFixMe this.props.history.replace(entry.path, entry.state) } } else { From 996ee942737e754dce85c763852020e4db45ae5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 24 May 2017 00:41:49 +0200 Subject: [PATCH 22/50] test(stack): some fixes --- modules/CardStack.js | 17 +++++++++-------- modules/__tests__/TabStack-spec.js | 30 ------------------------------ 2 files changed, 9 insertions(+), 38 deletions(-) diff --git a/modules/CardStack.js b/modules/CardStack.js index 6c8d4c8..84989b1 100755 --- a/modules/CardStack.js +++ b/modules/CardStack.js @@ -14,6 +14,7 @@ import * as StackUtils from './StackUtils' type State = { navigationState: NavigationState<{}>, cards: Array, + historyIndex: number, } type Props = { @@ -38,7 +39,7 @@ class CardStack extends React.Component { const cards = children && StackUtils.build(children) if (!cards) throw new Error('No initial route found') // Get initial route of navigation state - if (!entries) throw new Error('No history entries found') + if (!entries || index === undefined) throw new Error('No history entries found') // Build navigation state const navigationState = entries.reduce((state, entry) => { const card = cards.find(({ path, exact, strict }) => { @@ -57,10 +58,8 @@ class CardStack extends React.Component { ], } }, { index: -1, routes: [] }) - // Get history index - const historyIndex = index || 0 // Save everything in component state - this.state = { navigationState, cards, location, historyIndex } + this.state = { navigationState, cards, historyIndex: index } } // Listen hardware BackHandler event @@ -75,9 +74,9 @@ class CardStack extends React.Component { // Listen all history events componentWillReceiveProps(nextProps: Props): void { - const { location, history: { entries, index: indexHistory } } = this.props + const { location, history: { entries } } = this.props const { location: nextLocation, history: { action, index: nextIndexHistory } } = nextProps - const { cards, navigationState: { routes, index } } = this.state + const { cards, navigationState: { routes, index }, historyIndex } = this.state // Re-build cards // Get current card const currentRoute = routes[index] @@ -104,13 +103,13 @@ class CardStack extends React.Component { } case 'POP': { if ( - indexHistory === undefined || + historyIndex === undefined || nextIndexHistory === undefined || entries === undefined ) { return } - const n = indexHistory - nextIndexHistory + const n = historyIndex - nextIndexHistory if (n > 1) { this.setState(state => ({ navigationState: StateUtils.reset( @@ -141,6 +140,8 @@ class CardStack extends React.Component { } default: } + // Save historyIndex + if (historyIndex >= 0) this.state.historyIndex = historyIndex } } diff --git a/modules/__tests__/TabStack-spec.js b/modules/__tests__/TabStack-spec.js index 4a20012..1b1df72 100644 --- a/modules/__tests__/TabStack-spec.js +++ b/modules/__tests__/TabStack-spec.js @@ -1,7 +1,6 @@ /* eslint new-cap: 0 */ import React from 'react' -import { TouchableOpacity } from 'react-native' import { Router, Route } from 'react-router' import createHistory from 'history/createMemoryHistory' import renderer from 'react-test-renderer' @@ -68,32 +67,3 @@ it(' re-renders correctly when "replace" action is called', () => { tree = component.toJSON() expect(tree).toMatchSnapshot() }) - -it(' re-renders correctly when onRequestChangeTab() method is called', () => { - const history = createHistory() - const component = renderer.create( - - - {routeProps => ( - ( - - {TabView({ navigationState, onRequestChangeTab, tabs })} - - )} - > - - - - - )} - - , - ) - let tree = component.toJSON() - expect(tree).toMatchSnapshot() - tree.props.onPress(2) - tree = component.toJSON() - expect(tree).toMatchSnapshot() -}) From f7b64f699bacec921261c20e41e0ad77bad4f021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 24 May 2017 00:42:45 +0200 Subject: [PATCH 23/50] test(stack): update snapshots --- .../__snapshots__/TabStack-spec.js.snap | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/modules/__tests__/__snapshots__/TabStack-spec.js.snap b/modules/__tests__/__snapshots__/TabStack-spec.js.snap index cf58866..e50d9e8 100644 --- a/modules/__tests__/__snapshots__/TabStack-spec.js.snap +++ b/modules/__tests__/__snapshots__/TabStack-spec.js.snap @@ -12,26 +12,6 @@ exports[` re-renders correctly when "replace" action is called 2`] = `; -exports[` re-renders correctly when onRequestChangeTab() method is called 1`] = ` - - - Index - - -`; - -exports[` re-renders correctly when onRequestChangeTab() method is called 2`] = ` - - - Goodbye - - -`; - exports[` renders correctly 1`] = ` Index From cca135aadf6aaa162788cbea66610bce0741cc50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 24 May 2017 12:07:34 +0200 Subject: [PATCH 24/50] fix(examples): :boom: --- examples/Huge/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/Huge/src/index.js b/examples/Huge/src/index.js index 921bcf7..a40d70b 100644 --- a/examples/Huge/src/index.js +++ b/examples/Huge/src/index.js @@ -94,7 +94,7 @@ const App = (): React$Element => ( path="/profile/(likes|bookmarks)" component={Profile} onRequestChangeTab={() => history.replace('/profile/likes')} - onReset={() => history.replace(`${url}/profile/likes`)} + onReset={() => history.replace("/profile/likes")} label="Profile" renderTabIcon={({ focused, tabTintColor, tabActiveTintColor }) => ( Date: Wed, 24 May 2017 12:07:46 +0200 Subject: [PATCH 25/50] fix(stack): some fixes --- modules/StackUtils.js | 1 + modules/TabStack.js | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/StackUtils.js b/modules/StackUtils.js index afeb46c..c36b314 100644 --- a/modules/StackUtils.js +++ b/modules/StackUtils.js @@ -102,6 +102,7 @@ export const getRoute = (stack: Array, location: Location): ?Route => { return { key: createKey(item), routeName: item.key, + match: matchPath(pathname, item), } } diff --git a/modules/TabStack.js b/modules/TabStack.js index b26ce0b..b6d3640 100755 --- a/modules/TabStack.js +++ b/modules/TabStack.js @@ -104,7 +104,7 @@ class TabStack extends React.Component { } // Save history if ( - nextRoute && historyIndex && entries && entries[historyIndex] && + nextRoute && entries && historyIndex !== undefined && entries[historyIndex] && nextLocation.pathname === entries[historyIndex].pathname ) { this.state.tabsHistory[nextIndex] = entries.slice(rootIndex, historyIndex + 1) @@ -159,9 +159,9 @@ class TabStack extends React.Component { // ) if (!tabsHistory[index]) { const entry = tabs[index] // $FlowFixMe - if (entry.onRequestChangeTab && !tabsHistory[index]) { + if (entry.onRequestChangeTab) { entry.onRequestChangeTab() - } else { // $FlowFixMe + } else { this.props.history.replace(entry.path, entry.state) } } else { From 93faed233f86ed00426c8bc7b41f171ec060c751 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 24 May 2017 12:22:45 +0200 Subject: [PATCH 26/50] chore(DefaultrRnderer): update react-navigation core --- package.json | 2 +- yarn.lock | 57 ++++++++++++++++++++++++++++++++-------------------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 88989bc..bb64866 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "dependencies": { "lodash.isequal": "^4.5.0", "react-native-tab-view": "0.0.65", - "react-navigation": "1.0.0-beta.9" + "react-navigation": "1.0.0-beta.11" }, "devDependencies": { "babel-eslint": "7.1.1", diff --git a/yarn.lock b/yarn.lock index f32792d..4e7917b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1833,7 +1833,19 @@ fbjs-scripts@^0.7.0: semver "^5.1.0" through2 "^2.0.0" -fbjs@^0.8.5, fbjs@^0.8.9, fbjs@~0.8.9: +fbjs@^0.8.12: + version "0.8.12" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + +fbjs@^0.8.9, fbjs@~0.8.9: version "0.8.9" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.9.tgz#180247fbd347dcc9004517b904f865400a0c8f14" dependencies: @@ -3502,6 +3514,13 @@ promise@^7.1.1: dependencies: asap "~2.0.3" +prop-types@^15.5.10: + version "15.5.10" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + prop-types@^15.5.4, prop-types@^15.5.8: version "15.5.8" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394" @@ -3570,30 +3589,24 @@ react-native-dismiss-keyboard@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/react-native-dismiss-keyboard/-/react-native-dismiss-keyboard-1.0.0.tgz#32886242b3f2317e121f3aeb9b0a585e2b879b49" -react-native-drawer-layout-polyfill@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/react-native-drawer-layout-polyfill/-/react-native-drawer-layout-polyfill-1.2.0.tgz#0d77bd3af8964ffe7fd0f1f6550d6be328a5b567" +react-native-drawer-layout-polyfill@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/react-native-drawer-layout-polyfill/-/react-native-drawer-layout-polyfill-1.3.1.tgz#b514e34dec22c856b1e9e7253162e0af7d0eb4f0" dependencies: - react-native-drawer-layout "1.2.0" + react-native-drawer-layout "1.3.1" -react-native-drawer-layout@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/react-native-drawer-layout/-/react-native-drawer-layout-1.2.0.tgz#ae274ee17fadce58d9d7ecef4797d9fad672af74" +react-native-drawer-layout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/react-native-drawer-layout/-/react-native-drawer-layout-1.3.1.tgz#eb976df8fc43844811acebeed109029395406fe9" dependencies: react-native-dismiss-keyboard "1.0.0" -react-native-tab-view@0.0.65: +react-native-tab-view@0.0.65, react-native-tab-view@^0.0.65: version "0.0.65" resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-0.0.65.tgz#b685ea3081ff7c96486cd997361026c407302c59" dependencies: prop-types "^15.5.8" -react-native-tab-view@^0.0.61: - version "0.0.61" - resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-0.0.61.tgz#9f5446c9ad33158b87f0bccf5004fbff79ca1f92" - dependencies: - prop-types "^15.5.8" - react-native@0.44.0: version "0.44.0" resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.44.0.tgz#06427a30053f2d555c60fe0b9afcc6c778db09de" @@ -3680,17 +3693,17 @@ react-native@0.44.0: xpipe "^1.0.5" yargs "^6.4.0" -react-navigation@1.0.0-beta.9: - version "1.0.0-beta.9" - resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-1.0.0-beta.9.tgz#9fb1f8e4d15cee70cc8b5d58719a986ca443664d" +react-navigation@1.0.0-beta.11: + version "1.0.0-beta.11" + resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-1.0.0-beta.11.tgz#4271edb23cdbcc6eb88602f7fde0a77f0ef7a160" dependencies: clamp "^1.0.1" - fbjs "^0.8.5" + fbjs "^0.8.12" hoist-non-react-statics "^1.2.0" path-to-regexp "^1.7.0" - prop-types "^15.5.8" - react-native-drawer-layout-polyfill "1.2.0" - react-native-tab-view "^0.0.61" + prop-types "^15.5.10" + react-native-drawer-layout-polyfill "^1.3.0" + react-native-tab-view "^0.0.65" react-proxy@^1.1.7: version "1.1.8" From acc475db7d3f0d8a7fa43008d1c8af90a764ac25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 24 May 2017 14:47:51 +0200 Subject: [PATCH 27/50] chore(flow): ignore react navigation __tests__ dir --- .flowconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.flowconfig b/.flowconfig index baafde9..fd84f4a 100644 --- a/.flowconfig +++ b/.flowconfig @@ -8,6 +8,9 @@ ; Ignore unexpected extra "@providesModule" .*/node_modules/.*/node_modules/fbjs/.* +; Ignore react-navigation +.*/node_modules/react-navigation/.*/__tests__/.* + ; Ignore duplicate module providers ; For RN Apps installed via npm, "Libraries" folder is inside ; "node_modules/react-native" but in the source repo it is in the root From 33b058c81583b5713d2313e527c60f53aeb5b3c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 24 May 2017 16:10:01 +0200 Subject: [PATCH 28/50] chore(examples): improve Basic app --- examples/Basic/src/index.js | 54 +++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/examples/Basic/src/index.js b/examples/Basic/src/index.js index b1d8d3d..2c96c96 100644 --- a/examples/Basic/src/index.js +++ b/examples/Basic/src/index.js @@ -5,6 +5,7 @@ import { NativeRouter, Link, DeepLinking } from 'react-router-native' import { Navigation, Card, Tabs, Tab } from 'react-router-navigation' const PRIMARY_COLOR = 'rgb(226, 68, 68)' +const SECONDARY_COLOR = 'rgb(226, 144, 68)' const styles = StyleSheet.create({ container: { @@ -27,18 +28,20 @@ const styles = StyleSheet.create({ class App extends Component { - state = {} + state = { + navigation: {}, + card: {}, + } render() { - const { setNavigationState } = this.props return ( - + { this.setState({ - navBarStyle: { backgroundColor: PRIMARY_COLOR }, - titleStyle: { color: 'white' }, - barStyle: 'light-content', - backButtonTintColor: 'white', + navigation: { + navBarStyle: { backgroundColor: PRIMARY_COLOR }, + titleStyle: { color: 'white' }, + barStyle: 'light-content', + backButtonTintColor: 'white', + }, }) }} > @@ -66,6 +71,7 @@ class App extends Component { )} /> ( @@ -75,9 +81,35 @@ class App extends Component { > Push tabs + { + this.setState(prevState => ({ + card: { + ...prevState.card, + navBarStyle: { backgroundColor: SECONDARY_COLOR }, + }, + })) + }} + > + Change navbar style + + { + this.setState(prevState => ({ + card: { + ...prevState.card, + title: 'New title !', + }, + })) + }} + > + Change title + )} - title="Yolo" + title={this.state.card.title || 'Yolo'} /> Date: Wed, 24 May 2017 16:13:10 +0200 Subject: [PATCH 29/50] chore(stack): better options support --- modules/CardStack.js | 60 ++++++++++++++++++++++++++++++++++++++++---- modules/Tab.js | 2 +- modules/TabStack.js | 24 +++++++++++++++--- package.json | 2 ++ yarn.lock | 26 ++++++++----------- 5 files changed, 90 insertions(+), 24 deletions(-) diff --git a/modules/CardStack.js b/modules/CardStack.js index 84989b1..1349980 100755 --- a/modules/CardStack.js +++ b/modules/CardStack.js @@ -5,6 +5,8 @@ import React from 'react' import { BackHandler } from 'react-native' import isEqual from 'lodash.isequal' +import omit from 'lodash.omit' +import functions from 'lodash.functions' import { matchPath } from 'react-router' import { StateUtils } from 'react-navigation' import type { RouterHistory, Location } from 'react-router' @@ -72,12 +74,38 @@ class CardStack extends React.Component { BackHandler.removeEventListener('hardwareBackPress', this.onNavigateBack) } - // Listen all history events componentWillReceiveProps(nextProps: Props): void { - const { location, history: { entries } } = this.props - const { location: nextLocation, history: { action, index: nextIndexHistory } } = nextProps - const { cards, navigationState: { routes, index }, historyIndex } = this.state + // Extact state and props + const { + location, + history: { entries }, + } = this.props + const { + location: nextLocation, + history: { action, index: nextIndexHistory }, + children: nextChildren, + } = nextProps + const { + cards, + navigationState: { routes, index }, + historyIndex, + } = this.state // Re-build cards + const nextCards = nextChildren && StackUtils.build(nextChildren) + if ( + nextCards && + !isEqual( + cards.map(card => omit(card, functions(card))), + nextCards.map(card => omit(card, functions(card))), + ) + ) { + this.setState({ + cards: nextCards.map((card, i) => ({ + ...cards[i], + ...omit(card, functions(card)), + })), + }) + } // Get current card const currentRoute = routes[index] const currentCard = cards.find(({ key }) => key === currentRoute.routeName) @@ -156,7 +184,29 @@ class CardStack extends React.Component { // Diff navigation state shouldComponentUpdate(nextProps: Props, nextState: State): boolean { - return !isEqual(this.state.navigationState, nextState.navigationState) + // Get options + const options = { ...this.props } + const nextOptions = { ...nextProps } + delete options.location + delete options.history + delete options.children + delete options.render + delete nextOptions.location + delete nextOptions.history + delete nextOptions.children + delete nextOptions.render + // Get navigation state + const { cards, navigationState } = this.state + const { cards: nextCards, navigationState: nextNavigationState } = nextState + // Get diff + return ( + !isEqual(navigationState, nextNavigationState) || + !isEqual(options, nextOptions) || + !isEqual( + cards.map(card => omit(card, functions(card))), + nextCards.map(card => omit(card, functions(card))), + ) + ) } // Render view diff --git a/modules/Tab.js b/modules/Tab.js index 89ca14f..cf7999a 100644 --- a/modules/Tab.js +++ b/modules/Tab.js @@ -7,7 +7,7 @@ import SceneView from './SceneView' type Props = TabProps -const Tab = (props: Props) => ( +const Tab = (props: Props): React$Element => ( {({ history, location }) => ( { const tabs = children && StackUtils.build(children) if (!tabs) throw new Error('No children found') // Get initial route - const currentRoute = StackUtils.getRoute(tabs, { ...location }) + const currentRoute = StackUtils.getRoute(tabs, location) if (!currentRoute) throw new Error('No initial route found !') // Build navigation state const routes = tabs.map((tab) => { @@ -134,7 +134,7 @@ class TabStack extends React.Component { ...entries.slice(0, rootIndex), ...tabsHistory[index], ] - : [...entries.slice(0, rootIndex + 1)] + : entries.slice(0, rootIndex + 1) const newIndex = tabsHistory[index] ? (newEntries.length - 1) : rootIndex @@ -183,7 +183,25 @@ class TabStack extends React.Component { // Diff navigation state shouldComponentUpdate(nextProps: Props, nextState: State): boolean { - return !isEqual(this.state.navigationState, nextState.navigationState) + // Get options + const options = { ...this.props } + const nextOptions = { ...nextProps } + delete options.location + delete options.history + delete options.children + delete options.render + delete nextOptions.location + delete nextOptions.history + delete nextOptions.children + delete nextOptions.render + // Get navigation state + const { navigationState } = this.state + const { navigationState: nextNavigationState } = nextState + // Get diff + return ( + !isEqual(navigationState, nextNavigationState) || + !isEqual(options, nextOptions) + ) } // Render view diff --git a/package.json b/package.json index bb64866..65bd804 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,9 @@ "react-router-native": "4.1.x" }, "dependencies": { + "lodash.functions": "^4.3.0", "lodash.isequal": "^4.5.0", + "lodash.omit": "^4.5.0", "react-native-tab-view": "0.0.65", "react-navigation": "1.0.0-beta.11" }, diff --git a/yarn.lock b/yarn.lock index 4e7917b..845a957 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1833,7 +1833,7 @@ fbjs-scripts@^0.7.0: semver "^5.1.0" through2 "^2.0.0" -fbjs@^0.8.12: +fbjs@^0.8.12, fbjs@^0.8.9, fbjs@~0.8.9: version "0.8.12" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" dependencies: @@ -1845,18 +1845,6 @@ fbjs@^0.8.12: setimmediate "^1.0.5" ua-parser-js "^0.7.9" -fbjs@^0.8.9, fbjs@~0.8.9: - version "0.8.9" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.9.tgz#180247fbd347dcc9004517b904f865400a0c8f14" - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.9" - figures@^1.3.5: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -2967,6 +2955,10 @@ lodash.escape@^3.0.0: dependencies: lodash._root "^3.0.0" +lodash.functions@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.functions/-/lodash.functions-4.3.0.tgz#ba02495b06fad31a95026a59b5a6404626190bc2" + lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -2987,6 +2979,10 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" +lodash.omit@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" + lodash.pad@^4.1.0: version "4.5.1" resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" @@ -3514,14 +3510,14 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.5.10: +prop-types@^15.5.10, prop-types@^15.5.4: version "15.5.10" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" dependencies: fbjs "^0.8.9" loose-envify "^1.3.1" -prop-types@^15.5.4, prop-types@^15.5.8: +prop-types@^15.5.8: version "15.5.8" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394" dependencies: From 34320698a7c2f16837dba38227639bfa2df13e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 24 May 2017 18:05:21 +0200 Subject: [PATCH 30/50] fix(DefaultRenderer): add cardStyle prop --- modules/DefaultRenderer.js | 1 + modules/TypeDefinitions.js | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/modules/DefaultRenderer.js b/modules/DefaultRenderer.js index bbb2b81..c9e6d65 100644 --- a/modules/DefaultRenderer.js +++ b/modules/DefaultRenderer.js @@ -67,6 +67,7 @@ class DefaultRenderer extends React.Component { renderView = (ownProps: SceneRendererProps): React$Element => ( this.getScreenOptions(navigationScreen, ownProps), diff --git a/modules/TypeDefinitions.js b/modules/TypeDefinitions.js index ef2bbf0..974d1d0 100644 --- a/modules/TypeDefinitions.js +++ b/modules/TypeDefinitions.js @@ -45,14 +45,11 @@ export type NavBarProps = { renderRightButton?: (props: CardSubViewProps) => React$Element, } -export type NavigationCardProps = { - cardStyle?: StyleSheet, -} - export type NavigationProps = & NavBarProps & NavigationCardProps & { + cardStyle?: StyleSheet, onTransitionStart?: Function, onTransitionEnd?: Function, } From 0ba4237ea217c2dddf840e29f0a7ec2eac90a847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 24 May 2017 18:05:32 +0200 Subject: [PATCH 31/50] fix(stack): improve perf --- modules/CardStack.js | 9 +++++++-- modules/TabStack.js | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/modules/CardStack.js b/modules/CardStack.js index 1349980..eee3aa0 100755 --- a/modules/CardStack.js +++ b/modules/CardStack.js @@ -169,7 +169,9 @@ class CardStack extends React.Component { default: } // Save historyIndex - if (historyIndex >= 0) this.state.historyIndex = historyIndex + if (nextIndexHistory >= 0) { + this.state.historyIndex = nextIndexHistory + } } } @@ -201,7 +203,10 @@ class CardStack extends React.Component { // Get diff return ( !isEqual(navigationState, nextNavigationState) || - !isEqual(options, nextOptions) || + !isEqual( + omit(options, functions(options)), + omit(nextOptions, functions(nextOptions)), + ) || !isEqual( cards.map(card => omit(card, functions(card))), nextCards.map(card => omit(card, functions(card))), diff --git a/modules/TabStack.js b/modules/TabStack.js index 38a53aa..cba94be 100755 --- a/modules/TabStack.js +++ b/modules/TabStack.js @@ -5,6 +5,8 @@ import React from 'react' import type { RouterHistory, Location } from 'react-router' import isEqual from 'lodash.isequal' +import omit from 'lodash.omit' +import functions from 'lodash.functions' import type { NavigationState, TabsRendererProps, Tab } from './TypeDefinitions' import * as StackUtils from './StackUtils' @@ -200,7 +202,10 @@ class TabStack extends React.Component { // Get diff return ( !isEqual(navigationState, nextNavigationState) || - !isEqual(options, nextOptions) + !isEqual( + omit(options, functions(options)), + omit(nextOptions, functions(nextOptions)), + ) ) } From ace2a19cc56c30f773c790bb84ccab147554f3f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 24 May 2017 18:24:58 +0200 Subject: [PATCH 32/50] fix(Navigation): lint --- modules/CardStack.js | 2 +- modules/TypeDefinitions.js | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/CardStack.js b/modules/CardStack.js index eee3aa0..c2dcbf0 100755 --- a/modules/CardStack.js +++ b/modules/CardStack.js @@ -169,7 +169,7 @@ class CardStack extends React.Component { default: } // Save historyIndex - if (nextIndexHistory >= 0) { + if (nextIndexHistory !== undefined && nextIndexHistory >= 0) { this.state.historyIndex = nextIndexHistory } } diff --git a/modules/TypeDefinitions.js b/modules/TypeDefinitions.js index 974d1d0..a513144 100644 --- a/modules/TypeDefinitions.js +++ b/modules/TypeDefinitions.js @@ -47,7 +47,6 @@ export type NavBarProps = { export type NavigationProps = & NavBarProps - & NavigationCardProps & { cardStyle?: StyleSheet, onTransitionStart?: Function, @@ -57,7 +56,6 @@ export type NavigationProps = export type CardProps = & RouteProps & NavBarProps - & NavigationCardProps export type Card = & CardProps From 7973844ba5aa1b9f055fb3ffc314722ac0fa844f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 24 May 2017 18:25:48 +0200 Subject: [PATCH 33/50] feat(README): update library npm tag --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7eeda22..0324c8c 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ and `react-native-tab-view`. ## How to use Install: ```shell -$ yarn add react-router react-router-native react-router-navigation +$ yarn add react-router react-router-native react-router-navigation@next ``` And then, enjoy it: From 0ecdbad94546964f0100a2dbfd39291e6c9d9a6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 24 May 2017 19:01:02 +0200 Subject: [PATCH 34/50] chore(all): some fixes --- modules/History.js | 1 + modules/SceneView.js | 1 + modules/TabStack.js | 37 ----- modules/__tests__/CardStack-spec.js | 20 +-- .../__tests__/__snapshots__/Card-spec.js.snap | 4 +- .../__snapshots__/CardStack-spec.js.snap | 44 +++--- .../__snapshots__/Navigation-spec.js.snap | 14 +- .../__snapshots__/StackUtils-spec.js.snap | 5 +- .../__tests__/__snapshots__/Tab-spec.js.snap | 4 +- .../__snapshots__/TabStack-spec.js.snap | 10 +- package.json | 11 +- yarn.lock | 149 ++++-------------- 12 files changed, 83 insertions(+), 217 deletions(-) diff --git a/modules/History.js b/modules/History.js index d05410a..bd8e90a 100644 --- a/modules/History.js +++ b/modules/History.js @@ -1,4 +1,5 @@ /* @flow */ +/* eslint no-duplicate-imports: 0 */ import React from 'react' import type { ContextRouter, Location } from 'react-router' diff --git a/modules/SceneView.js b/modules/SceneView.js index e5a0fb5..875b442 100644 --- a/modules/SceneView.js +++ b/modules/SceneView.js @@ -1,4 +1,5 @@ /* @flow */ +/* eslint no-duplicate-imports: 0 */ import React from 'react' import { matchPath } from 'react-router' diff --git a/modules/TabStack.js b/modules/TabStack.js index 3ef5f61..cba94be 100755 --- a/modules/TabStack.js +++ b/modules/TabStack.js @@ -115,7 +115,6 @@ class TabStack extends React.Component { // Callback for when the current tab changes onRequestChangeTab = (index: number): void => { -<<<<<<< HEAD if (index < 0) return // 1) Set index directly const { lazy, forceSync, history: { entries, index: historyIndex } } = this.props @@ -170,42 +169,6 @@ class TabStack extends React.Component { } else { const entry = tabsHistory[index].slice(-1)[0] this.props.history.replace(entry.pathname, entry.state) -======= - const entries = this.state.history[index] - if (index !== this.state.navigationState.index) { - // Update navigation state - this.setState(prevState => ({ - navigationState: { - ...prevState.navigationState, - index, - }, - })) - if (this.props.forceSync) { - // Go back to root index - const n = this.state.rootIndex - (this.props.history.index || 0) - if (n !== 0) this.props.history.go(n) - // Replace root entry - if (entries && entries[0]) { - const entry = entries[0] - this.props.history.replace(entry.pathname, entry.state) - } else { - const entry = this.state.tabs[index] - this.props.history.replace(entry.path, entry.state) - } - // Push other entries - if (entries && entries.length > 1) { - entries - .slice(this.state.rootIndex + 1) - .forEach(({ pathname, state }) => { - this.props.history.push(pathname, state) - }) - const entry = entries[Math.max(0, parseInt(entries.length - 1, 10))] - this.props.history.replace(entry.pathname, entry.state) - } - } else { - const entry = this.state.tabs[index] - this.props.history.replace(entry.path, entry.state) ->>>>>>> master } } else { // 4) Reset tab diff --git a/modules/__tests__/CardStack-spec.js b/modules/__tests__/CardStack-spec.js index 0c4fbd5..94554ef 100644 --- a/modules/__tests__/CardStack-spec.js +++ b/modules/__tests__/CardStack-spec.js @@ -14,7 +14,7 @@ it(' renders correctly', () => { const component = renderer.create( ( + render={routeProps => ( @@ -35,7 +35,7 @@ it(' renders correctly with initialIndex and initialEntries prop ', const component = renderer.create( ( + render={routeProps => ( @@ -54,7 +54,7 @@ it(' re-renders correctly when "push" action is called', () => { const component = renderer.create( ( + render={routeProps => ( @@ -77,7 +77,7 @@ it(' re-renders correctly when "push" action is called with same pa const component = renderer.create( ( + render={routeProps => ( @@ -100,7 +100,7 @@ it(' re-renders correctly when "goBack" action is called', () => { const component = renderer.create( ( + render={routeProps => ( @@ -124,7 +124,7 @@ it(' re-renders correctly when "goBack" action is called with same const component = renderer.create( ( + render={routeProps => ( @@ -147,7 +147,7 @@ it(' re-renders correctly when "go" action is called', () => { const component = renderer.create( ( + render={routeProps => ( @@ -172,7 +172,7 @@ it(' re-renders correctly when "go" action is called with same path const component = renderer.create( ( + render={routeProps => ( @@ -195,7 +195,7 @@ it(' re-renders correctly when "replace" action is called', () => { const component = renderer.create( ( + render={routeProps => ( @@ -220,7 +220,7 @@ it(' re-renders correctly when onNavigateBack() method is called', const component = renderer.create( ( + render={routeProps => ( ( diff --git a/modules/__tests__/__snapshots__/Card-spec.js.snap b/modules/__tests__/__snapshots__/Card-spec.js.snap index 0f81478..4e29190 100644 --- a/modules/__tests__/__snapshots__/Card-spec.js.snap +++ b/modules/__tests__/__snapshots__/Card-spec.js.snap @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` renders correctly 1`] = ` +exports[`test renders correctly 1`] = ` 1 diff --git a/modules/__tests__/__snapshots__/CardStack-spec.js.snap b/modules/__tests__/__snapshots__/CardStack-spec.js.snap index 1af43d6..bc19e84 100644 --- a/modules/__tests__/__snapshots__/CardStack-spec.js.snap +++ b/modules/__tests__/__snapshots__/CardStack-spec.js.snap @@ -1,116 +1,112 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` re-renders correctly when "go" action is called 1`] = ` +exports[`test re-renders correctly when "go" action is called 1`] = ` Goodbye `; -exports[` re-renders correctly when "go" action is called 2`] = ` +exports[`test re-renders correctly when "go" action is called 2`] = ` Index `; -exports[` re-renders correctly when "go" action is called with same path 1`] = ` +exports[`test re-renders correctly when "go" action is called with same path 1`] = ` 3 `; -exports[` re-renders correctly when "go" action is called with same path 2`] = ` +exports[`test re-renders correctly when "go" action is called with same path 2`] = ` 1 `; -exports[` re-renders correctly when "goBack" action is called 1`] = ` +exports[`test re-renders correctly when "goBack" action is called 1`] = ` Hello `; -exports[` re-renders correctly when "goBack" action is called 2`] = ` +exports[`test re-renders correctly when "goBack" action is called 2`] = ` Index `; -exports[` re-renders correctly when "goBack" action is called with same path 1`] = ` +exports[`test re-renders correctly when "goBack" action is called with same path 1`] = ` 2 `; -exports[` re-renders correctly when "goBack" action is called with same path 2`] = ` +exports[`test re-renders correctly when "goBack" action is called with same path 2`] = ` 1 `; -exports[` re-renders correctly when "push" action is called 1`] = ` +exports[`test re-renders correctly when "push" action is called 1`] = ` Index `; -exports[` re-renders correctly when "push" action is called 2`] = ` +exports[`test re-renders correctly when "push" action is called 2`] = ` Hello `; -exports[` re-renders correctly when "push" action is called with same path 1`] = ` +exports[`test re-renders correctly when "push" action is called with same path 1`] = ` 1 `; -exports[` re-renders correctly when "push" action is called with same path 2`] = ` +exports[`test re-renders correctly when "push" action is called with same path 2`] = ` 2 `; -exports[` re-renders correctly when "replace" action is called 1`] = ` +exports[`test re-renders correctly when "replace" action is called 1`] = ` Hello `; -exports[` re-renders correctly when "replace" action is called 2`] = ` +exports[`test re-renders correctly when "replace" action is called 2`] = ` Goodbye `; -exports[` re-renders correctly when onNavigateBack() method is called 1`] = ` +exports[`test re-renders correctly when onNavigateBack() method is called 1`] = ` + onPress={[Function]}> Hello `; -exports[` re-renders correctly when onNavigateBack() method is called 2`] = ` +exports[`test re-renders correctly when onNavigateBack() method is called 2`] = ` + onPress={[Function]}> Index `; -exports[` renders correctly 1`] = ` +exports[`test renders correctly 1`] = ` Index `; -exports[` renders correctly with initialIndex and initialEntries prop 1`] = ` +exports[`test renders correctly with initialIndex and initialEntries prop 1`] = ` Hello diff --git a/modules/__tests__/__snapshots__/Navigation-spec.js.snap b/modules/__tests__/__snapshots__/Navigation-spec.js.snap index 23c93c1..ed632cc 100644 --- a/modules/__tests__/__snapshots__/Navigation-spec.js.snap +++ b/modules/__tests__/__snapshots__/Navigation-spec.js.snap @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` re-renders correctly when "push" action is called 1`] = ` +exports[`test re-renders correctly when "push" action is called 1`] = ` @@ -14,7 +12,7 @@ exports[` re-renders correctly when "push" action is called 1`] = `; -exports[` re-renders correctly when "push" action is called 2`] = ` +exports[`test re-renders correctly when "push" action is called 2`] = ` @@ -33,7 +31,7 @@ exports[` re-renders correctly when "push" action is called 2`] = `; -exports[` re-renders correctly when "replace" action is called 1`] = ` +exports[`test re-renders correctly when "replace" action is called 1`] = ` @@ -48,7 +46,7 @@ exports[` re-renders correctly when "replace" action is called 1`] `; -exports[` re-renders correctly when "replace" action is called 2`] = ` +exports[`test re-renders correctly when "replace" action is called 2`] = ` @@ -63,7 +61,7 @@ exports[` re-renders correctly when "replace" action is called 2`] `; -exports[` renders correctly 1`] = ` +exports[`test renders correctly 1`] = ` @@ -77,7 +75,7 @@ exports[` renders correctly 1`] = ` `; -exports[` renders correctly with initialIndex and initialEntries prop 1`] = ` +exports[`test renders correctly with initialIndex and initialEntries prop 1`] = ` diff --git a/modules/__tests__/__snapshots__/StackUtils-spec.js.snap b/modules/__tests__/__snapshots__/StackUtils-spec.js.snap index ee9a4cd..25e997f 100644 --- a/modules/__tests__/__snapshots__/StackUtils-spec.js.snap +++ b/modules/__tests__/__snapshots__/StackUtils-spec.js.snap @@ -1,11 +1,8 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - exports[`build util creates correctly render method 1`] = ` + ellipsizeMode="tail"> / `; diff --git a/modules/__tests__/__snapshots__/Tab-spec.js.snap b/modules/__tests__/__snapshots__/Tab-spec.js.snap index 7bd80b5..67fc205 100644 --- a/modules/__tests__/__snapshots__/Tab-spec.js.snap +++ b/modules/__tests__/__snapshots__/Tab-spec.js.snap @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` renders correctly 1`] = ` +exports[`test renders correctly 1`] = ` 1 diff --git a/modules/__tests__/__snapshots__/TabStack-spec.js.snap b/modules/__tests__/__snapshots__/TabStack-spec.js.snap index e50d9e8..d4df9e7 100644 --- a/modules/__tests__/__snapshots__/TabStack-spec.js.snap +++ b/modules/__tests__/__snapshots__/TabStack-spec.js.snap @@ -1,24 +1,22 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` re-renders correctly when "replace" action is called 1`] = ` +exports[`test re-renders correctly when "replace" action is called 1`] = ` Index `; -exports[` re-renders correctly when "replace" action is called 2`] = ` +exports[`test re-renders correctly when "replace" action is called 2`] = ` Hello `; -exports[` renders correctly 1`] = ` +exports[`test renders correctly 1`] = ` Index `; -exports[` renders correctly with initialEntries prop 1`] = ` +exports[`test renders correctly with initialEntries prop 1`] = ` Hello diff --git a/package.json b/package.json index 65bd804..ccebbb3 100644 --- a/package.json +++ b/package.json @@ -42,16 +42,17 @@ "babel-eslint": "7.1.1", "babel-jest": "18.0.0", "babel-preset-react-native": "1.9.1", - "eslint": "3.16.1", - "eslint-config-airbnb": "14.1.0", + "eslint": "3.11.1", + "eslint-config-airbnb": "13.0.0", + "eslint-config-airbnb-base": "10.0.1", "eslint-plugin-babel": "^4.1.1", "eslint-plugin-flowtype": "^2.30.3", "eslint-plugin-import": "2.2.0", - "eslint-plugin-jsx-a11y": "4.0.0", - "eslint-plugin-react": "6.10.0", + "eslint-plugin-jsx-a11y": "2.2.3", + "eslint-plugin-react": "6.7.1", "flow-bin": "0.42.0", "history": "4.6.1", - "jest": "20.0.1", + "jest": "20.0.4", "react": "16.0.0-alpha.6", "react-native": "0.44.0", "react-router": "4.1.1", diff --git a/yarn.lock b/yarn.lock index 5a735cc..be41226 100644 --- a/yarn.lock +++ b/yarn.lock @@ -119,12 +119,6 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -aria-query@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.3.0.tgz#cb8a9984e2862711c83c80ade5b8f5ca0de2b467" - dependencies: - ast-types-flow "0.0.7" - arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -169,13 +163,6 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" -array.prototype.find@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -200,10 +187,6 @@ assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" -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" - async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -1327,13 +1310,6 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" -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" @@ -1407,10 +1383,6 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -emoji-regex@^6.1.0: - version "6.4.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.4.2.tgz#a30b6fee353d406d96cfb9fa765bdc82897eff6e" - encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -1436,23 +1408,6 @@ errorhandler@~1.4.2: accepts "~1.3.0" escape-html "~1.0.3" -es-abstract@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.0" - is-callable "^1.1.3" - is-regex "^1.0.3" - -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" - es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: version "0.10.21" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.21.tgz#19a725f9e51d0300bbc1e8e821109fd9daf55925" @@ -1537,15 +1492,15 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-airbnb-base@^11.1.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.2.0.tgz#19a9dc4481a26f70904545ec040116876018f853" +eslint-config-airbnb-base@10.0.1, eslint-config-airbnb-base@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-10.0.1.tgz#f17d4e52992c1d45d1b7713efbcd5ecd0e7e0506" -eslint-config-airbnb@14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-14.1.0.tgz#355d290040bbf8e00bf8b4b19f4b70cbe7c2317f" +eslint-config-airbnb@13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-13.0.0.tgz#688d15d3c276c0c753ae538c92a44397d76ae46e" dependencies: - eslint-config-airbnb-base "^11.1.0" + eslint-config-airbnb-base "^10.0.0" eslint-import-resolver-node@^0.2.0: version "0.2.3" @@ -1587,30 +1542,24 @@ eslint-plugin-import@2.2.0: minimatch "^3.0.3" pkg-up "^1.0.0" -eslint-plugin-jsx-a11y@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-4.0.0.tgz#779bb0fe7b08da564a422624911de10061e048ee" +eslint-plugin-jsx-a11y@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-2.2.3.tgz#4e35cb71b8a7db702ac415c806eb8e8d9ea6c65d" dependencies: - aria-query "^0.3.0" - ast-types-flow "0.0.7" damerau-levenshtein "^1.0.0" - emoji-regex "^6.1.0" jsx-ast-utils "^1.0.0" object-assign "^4.0.1" -eslint-plugin-react@6.10.0: - version "6.10.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.0.tgz#9c48b48d101554b5355413e7c64238abde6ef1ef" +eslint-plugin-react@6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.7.1.tgz#1af96aea545856825157d97c1b50d5a8fb64a5a7" dependencies: - array.prototype.find "^2.0.1" doctrine "^1.2.2" - has "^1.0.1" - jsx-ast-utils "^1.3.4" - object.assign "^4.0.4" + jsx-ast-utils "^1.3.3" -eslint@3.16.1: - version "3.16.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.16.1.tgz#9bc31fc7341692cf772e80607508f67d711c5609" +eslint@3.11.1: + version "3.11.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.11.1.tgz#408be581041385cba947cd8d1cd2227782b55dbf" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" @@ -1618,12 +1567,12 @@ eslint@3.16.1: debug "^2.1.1" doctrine "^1.2.2" escope "^3.6.0" - espree "^3.4.0" + espree "^3.3.1" estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" glob "^7.0.3" - globals "^9.14.0" + globals "^9.2.0" ignore "^3.2.0" imurmurhash "^0.1.4" inquirer "^0.12.0" @@ -1642,12 +1591,12 @@ eslint@3.16.1: require-uncached "^1.0.2" shelljs "^0.7.5" strip-bom "^3.0.0" - strip-json-comments "~2.0.1" + strip-json-comments "~1.0.1" table "^3.7.8" text-table "~0.2.0" user-home "^2.0.0" -espree@^3.4.0: +espree@^3.3.1: version "3.4.3" resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" dependencies: @@ -1878,10 +1827,6 @@ for-own@^0.1.4: dependencies: for-in "^1.0.1" -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -1910,7 +1855,7 @@ 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.0: +function-bind@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" @@ -1975,7 +1920,7 @@ global@^4.3.0: min-document "^2.19.0" process "~0.5.1" -globals@^9.0.0, globals@^9.14.0: +globals@^9.0.0, globals@^9.2.0: version "9.17.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" @@ -2228,20 +2173,12 @@ is-builtin-module@^1.0.0: 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-ci@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" dependencies: ci-info "^1.0.0" -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-dotfile@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" @@ -2325,12 +2262,6 @@ is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" -is-regex@^1.0.3: - 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" @@ -2341,10 +2272,6 @@ 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" - is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -2453,7 +2380,7 @@ jest-changed-files@^20.0.3: version "20.0.3" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" -jest-cli@^20.0.1: +jest-cli@^20.0.4: version "20.0.4" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" dependencies: @@ -2664,11 +2591,11 @@ jest-validate@^20.0.3: leven "^2.1.0" pretty-format "^20.0.3" -jest@20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.1.tgz#4e268159ccc3b659966939de817c75bfe9e0157d" +jest@20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" dependencies: - jest-cli "^20.0.1" + jest-cli "^20.0.4" jodid25519@^1.0.0: version "1.0.2" @@ -2777,7 +2704,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" -jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: +jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.3: version "1.4.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" @@ -3192,18 +3119,6 @@ object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-keys@^1.0.10, object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" - -object.assign@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.0" - object-keys "^1.0.10" - object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -4192,9 +4107,9 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" -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" +strip-json-comments@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" supports-color@^2.0.0: version "2.0.0" From e5e629c365e76509480fcf9785cca5361bcfd90c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Wed, 24 May 2017 19:07:27 +0200 Subject: [PATCH 35/50] test(jest): update --- .../__tests__/__snapshots__/Card-spec.js.snap | 4 +- .../__snapshots__/CardStack-spec.js.snap | 44 +- .../__snapshots__/Navigation-spec.js.snap | 14 +- .../__snapshots__/StackUtils-spec.js.snap | 5 +- .../__tests__/__snapshots__/Tab-spec.js.snap | 4 +- .../__snapshots__/TabStack-spec.js.snap | 10 +- package.json | 2 +- yarn.lock | 396 ++++++++---------- 8 files changed, 217 insertions(+), 262 deletions(-) diff --git a/modules/__tests__/__snapshots__/Card-spec.js.snap b/modules/__tests__/__snapshots__/Card-spec.js.snap index 4e29190..0f81478 100644 --- a/modules/__tests__/__snapshots__/Card-spec.js.snap +++ b/modules/__tests__/__snapshots__/Card-spec.js.snap @@ -1,4 +1,6 @@ -exports[`test renders correctly 1`] = ` +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders correctly 1`] = ` 1 diff --git a/modules/__tests__/__snapshots__/CardStack-spec.js.snap b/modules/__tests__/__snapshots__/CardStack-spec.js.snap index bc19e84..1af43d6 100644 --- a/modules/__tests__/__snapshots__/CardStack-spec.js.snap +++ b/modules/__tests__/__snapshots__/CardStack-spec.js.snap @@ -1,112 +1,116 @@ -exports[`test re-renders correctly when "go" action is called 1`] = ` +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` re-renders correctly when "go" action is called 1`] = ` Goodbye `; -exports[`test re-renders correctly when "go" action is called 2`] = ` +exports[` re-renders correctly when "go" action is called 2`] = ` Index `; -exports[`test re-renders correctly when "go" action is called with same path 1`] = ` +exports[` re-renders correctly when "go" action is called with same path 1`] = ` 3 `; -exports[`test re-renders correctly when "go" action is called with same path 2`] = ` +exports[` re-renders correctly when "go" action is called with same path 2`] = ` 1 `; -exports[`test re-renders correctly when "goBack" action is called 1`] = ` +exports[` re-renders correctly when "goBack" action is called 1`] = ` Hello `; -exports[`test re-renders correctly when "goBack" action is called 2`] = ` +exports[` re-renders correctly when "goBack" action is called 2`] = ` Index `; -exports[`test re-renders correctly when "goBack" action is called with same path 1`] = ` +exports[` re-renders correctly when "goBack" action is called with same path 1`] = ` 2 `; -exports[`test re-renders correctly when "goBack" action is called with same path 2`] = ` +exports[` re-renders correctly when "goBack" action is called with same path 2`] = ` 1 `; -exports[`test re-renders correctly when "push" action is called 1`] = ` +exports[` re-renders correctly when "push" action is called 1`] = ` Index `; -exports[`test re-renders correctly when "push" action is called 2`] = ` +exports[` re-renders correctly when "push" action is called 2`] = ` Hello `; -exports[`test re-renders correctly when "push" action is called with same path 1`] = ` +exports[` re-renders correctly when "push" action is called with same path 1`] = ` 1 `; -exports[`test re-renders correctly when "push" action is called with same path 2`] = ` +exports[` re-renders correctly when "push" action is called with same path 2`] = ` 2 `; -exports[`test re-renders correctly when "replace" action is called 1`] = ` +exports[` re-renders correctly when "replace" action is called 1`] = ` Hello `; -exports[`test re-renders correctly when "replace" action is called 2`] = ` +exports[` re-renders correctly when "replace" action is called 2`] = ` Goodbye `; -exports[`test re-renders correctly when onNavigateBack() method is called 1`] = ` +exports[` re-renders correctly when onNavigateBack() method is called 1`] = ` + onPress={[Function]} +> Hello `; -exports[`test re-renders correctly when onNavigateBack() method is called 2`] = ` +exports[` re-renders correctly when onNavigateBack() method is called 2`] = ` + onPress={[Function]} +> Index `; -exports[`test renders correctly 1`] = ` +exports[` renders correctly 1`] = ` Index `; -exports[`test renders correctly with initialIndex and initialEntries prop 1`] = ` +exports[` renders correctly with initialIndex and initialEntries prop 1`] = ` Hello diff --git a/modules/__tests__/__snapshots__/Navigation-spec.js.snap b/modules/__tests__/__snapshots__/Navigation-spec.js.snap index ed632cc..23c93c1 100644 --- a/modules/__tests__/__snapshots__/Navigation-spec.js.snap +++ b/modules/__tests__/__snapshots__/Navigation-spec.js.snap @@ -1,4 +1,6 @@ -exports[`test re-renders correctly when "push" action is called 1`] = ` +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` re-renders correctly when "push" action is called 1`] = ` @@ -12,7 +14,7 @@ exports[`test re-renders correctly when "push" action is called 1 `; -exports[`test re-renders correctly when "push" action is called 2`] = ` +exports[` re-renders correctly when "push" action is called 2`] = ` @@ -31,7 +33,7 @@ exports[`test re-renders correctly when "push" action is called 2 `; -exports[`test re-renders correctly when "replace" action is called 1`] = ` +exports[` re-renders correctly when "replace" action is called 1`] = ` @@ -46,7 +48,7 @@ exports[`test re-renders correctly when "replace" action is calle `; -exports[`test re-renders correctly when "replace" action is called 2`] = ` +exports[` re-renders correctly when "replace" action is called 2`] = ` @@ -61,7 +63,7 @@ exports[`test re-renders correctly when "replace" action is calle `; -exports[`test renders correctly 1`] = ` +exports[` renders correctly 1`] = ` @@ -75,7 +77,7 @@ exports[`test renders correctly 1`] = ` `; -exports[`test renders correctly with initialIndex and initialEntries prop 1`] = ` +exports[` renders correctly with initialIndex and initialEntries prop 1`] = ` diff --git a/modules/__tests__/__snapshots__/StackUtils-spec.js.snap b/modules/__tests__/__snapshots__/StackUtils-spec.js.snap index 25e997f..ee9a4cd 100644 --- a/modules/__tests__/__snapshots__/StackUtils-spec.js.snap +++ b/modules/__tests__/__snapshots__/StackUtils-spec.js.snap @@ -1,8 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + exports[`build util creates correctly render method 1`] = ` + ellipsizeMode="tail" +> / `; diff --git a/modules/__tests__/__snapshots__/Tab-spec.js.snap b/modules/__tests__/__snapshots__/Tab-spec.js.snap index 67fc205..7bd80b5 100644 --- a/modules/__tests__/__snapshots__/Tab-spec.js.snap +++ b/modules/__tests__/__snapshots__/Tab-spec.js.snap @@ -1,4 +1,6 @@ -exports[`test renders correctly 1`] = ` +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders correctly 1`] = ` 1 diff --git a/modules/__tests__/__snapshots__/TabStack-spec.js.snap b/modules/__tests__/__snapshots__/TabStack-spec.js.snap index d4df9e7..e50d9e8 100644 --- a/modules/__tests__/__snapshots__/TabStack-spec.js.snap +++ b/modules/__tests__/__snapshots__/TabStack-spec.js.snap @@ -1,22 +1,24 @@ -exports[`test re-renders correctly when "replace" action is called 1`] = ` +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` re-renders correctly when "replace" action is called 1`] = ` Index `; -exports[`test re-renders correctly when "replace" action is called 2`] = ` +exports[` re-renders correctly when "replace" action is called 2`] = ` Hello `; -exports[`test renders correctly 1`] = ` +exports[` renders correctly 1`] = ` Index `; -exports[`test renders correctly with initialEntries prop 1`] = ` +exports[` renders correctly with initialEntries prop 1`] = ` Hello diff --git a/package.json b/package.json index ccebbb3..04a73f0 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "eslint-plugin-react": "6.7.1", "flow-bin": "0.42.0", "history": "4.6.1", - "jest": "20.0.4", + "jest": "19.0.2", "react": "16.0.0-alpha.6", "react-native": "0.44.0", "react-router": "4.1.1", diff --git a/yarn.lock b/yarn.lock index be41226..4eb125b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -75,7 +75,7 @@ ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" -ansi-regex@^2.0.0, ansi-regex@^2.1.1: +ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -369,13 +369,13 @@ babel-jest@18.0.0: babel-plugin-istanbul "^3.0.0" babel-preset-jest "^18.0.0" -babel-jest@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" +babel-jest@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f" dependencies: babel-core "^6.0.0" babel-plugin-istanbul "^4.0.0" - babel-preset-jest "^20.0.3" + babel-preset-jest "^19.0.0" babel-messages@^6.23.0: version "6.23.0" @@ -416,9 +416,9 @@ babel-plugin-jest-hoist@^18.0.0: version "18.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-18.0.0.tgz#4150e70ecab560e6e7344adc849498072d34e12a" -babel-plugin-jest-hoist@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" +babel-plugin-jest-hoist@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea" babel-plugin-react-transform@2.0.2: version "2.0.2" @@ -754,11 +754,11 @@ babel-preset-jest@^18.0.0: dependencies: babel-plugin-jest-hoist "^18.0.0" -babel-preset-jest@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" +babel-preset-jest@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396" dependencies: - babel-plugin-jest-hoist "^20.0.3" + babel-plugin-jest-hoist "^19.0.0" babel-preset-react-native@1.9.1, babel-preset-react-native@^1.9.1: version "1.9.1" @@ -1189,7 +1189,7 @@ content-type@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" -convert-source-map@^1.1.0, convert-source-map@^1.4.0: +convert-source-map@^1.1.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" @@ -1352,7 +1352,7 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -diff@^3.2.0: +diff@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" @@ -2173,7 +2173,7 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" -is-ci@^1.0.10: +is-ci@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" dependencies: @@ -2313,7 +2313,7 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-api@^1.1.1: +istanbul-api@^1.1.0-alpha.1: version "1.1.8" resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e" dependencies: @@ -2329,7 +2329,7 @@ istanbul-api@^1.1.1: mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.0: +istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" @@ -2339,7 +2339,7 @@ istanbul-lib-hook@^1.0.6: dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.1: +istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" dependencies: @@ -2360,7 +2360,7 @@ istanbul-lib-report@^1.1.0: path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.0: +istanbul-lib-source-maps@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e" dependencies: @@ -2376,89 +2376,84 @@ istanbul-reports@^1.1.0: dependencies: handlebars "^4.0.3" -jest-changed-files@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" +jest-changed-files@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-19.0.2.tgz#16c54c84c3270be408e06d2e8af3f3e37a885824" -jest-cli@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" +jest-cli@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-19.0.2.tgz#cc3620b62acac5f2d93a548cb6ef697d4ec85443" dependencies: ansi-escapes "^1.4.0" callsites "^2.0.0" - chalk "^1.1.3" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - istanbul-api "^1.1.1" - istanbul-lib-coverage "^1.0.1" - istanbul-lib-instrument "^1.4.2" - istanbul-lib-source-maps "^1.1.0" - jest-changed-files "^20.0.3" - jest-config "^20.0.4" - jest-docblock "^20.0.3" - jest-environment-jsdom "^20.0.3" - jest-haste-map "^20.0.4" - jest-jasmine2 "^20.0.4" - jest-message-util "^20.0.3" - jest-regex-util "^20.0.3" - jest-resolve-dependencies "^20.0.3" - jest-runtime "^20.0.4" - jest-snapshot "^20.0.3" - jest-util "^20.0.3" + chalk "^1.1.1" + graceful-fs "^4.1.6" + is-ci "^1.0.9" + istanbul-api "^1.1.0-alpha.1" + istanbul-lib-coverage "^1.0.0" + istanbul-lib-instrument "^1.1.1" + jest-changed-files "^19.0.2" + jest-config "^19.0.2" + jest-environment-jsdom "^19.0.2" + jest-haste-map "^19.0.0" + jest-jasmine2 "^19.0.2" + jest-message-util "^19.0.0" + jest-regex-util "^19.0.0" + jest-resolve-dependencies "^19.0.0" + jest-runtime "^19.0.2" + jest-snapshot "^19.0.2" + jest-util "^19.0.2" micromatch "^2.3.11" - node-notifier "^5.0.2" - pify "^2.3.0" + node-notifier "^5.0.1" slash "^1.0.0" string-length "^1.0.1" throat "^3.0.0" - which "^1.2.12" + which "^1.1.1" worker-farm "^1.3.1" - yargs "^7.0.2" + yargs "^6.3.0" -jest-config@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" +jest-config@^19.0.2: + version "19.0.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-19.0.4.tgz#42980211d46417e91ca7abffd086c270234f73fd" dependencies: - chalk "^1.1.3" - glob "^7.1.1" - jest-environment-jsdom "^20.0.3" - jest-environment-node "^20.0.3" - jest-jasmine2 "^20.0.4" - jest-matcher-utils "^20.0.3" - jest-regex-util "^20.0.3" - jest-resolve "^20.0.4" - jest-validate "^20.0.3" - pretty-format "^20.0.3" - -jest-diff@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" + chalk "^1.1.1" + jest-environment-jsdom "^19.0.2" + jest-environment-node "^19.0.2" + jest-jasmine2 "^19.0.2" + jest-regex-util "^19.0.0" + jest-resolve "^19.0.2" + jest-validate "^19.0.2" + pretty-format "^19.0.0" + +jest-diff@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-19.0.0.tgz#d1563cfc56c8b60232988fbc05d4d16ed90f063c" dependencies: chalk "^1.1.3" - diff "^3.2.0" - jest-matcher-utils "^20.0.3" - pretty-format "^20.0.3" + diff "^3.0.0" + jest-matcher-utils "^19.0.0" + pretty-format "^19.0.0" -jest-docblock@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" - -jest-environment-jsdom@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" +jest-environment-jsdom@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-19.0.2.tgz#ceda859c4a4b94ab35e4de7dab54b926f293e4a3" dependencies: - jest-mock "^20.0.3" - jest-util "^20.0.3" - jsdom "^9.12.0" + jest-mock "^19.0.0" + jest-util "^19.0.2" + jsdom "^9.11.0" -jest-environment-node@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" +jest-environment-node@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-19.0.2.tgz#6e84079db87ed21d0c05e1f9669f207b116fe99b" dependencies: - jest-mock "^20.0.3" - jest-util "^20.0.3" + jest-mock "^19.0.0" + jest-util "^19.0.2" -jest-haste-map@19.0.0: +jest-file-exists@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-19.0.0.tgz#cca2e587a11ec92e24cfeab3f8a94d657f3fceb8" + +jest-haste-map@19.0.0, jest-haste-map@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.0.tgz#adde00b62b1fe04432a104b3254fc5004514b55e" dependencies: @@ -2468,134 +2463,120 @@ jest-haste-map@19.0.0: sane "~1.5.0" worker-farm "^1.3.1" -jest-haste-map@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.4.tgz#653eb55c889ce3c021f7b94693f20a4159badf03" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^20.0.3" - micromatch "^2.3.11" - sane "~1.6.0" - worker-farm "^1.3.1" - -jest-jasmine2@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" +jest-jasmine2@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-19.0.2.tgz#167991ac825981fb1a800af126e83afcca832c73" dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-matchers "^20.0.3" - jest-message-util "^20.0.3" - jest-snapshot "^20.0.3" - once "^1.4.0" - p-map "^1.1.1" + graceful-fs "^4.1.6" + jest-matcher-utils "^19.0.0" + jest-matchers "^19.0.0" + jest-message-util "^19.0.0" + jest-snapshot "^19.0.2" -jest-matcher-utils@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" +jest-matcher-utils@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz#5ecd9b63565d2b001f61fbf7ec4c7f537964564d" dependencies: chalk "^1.1.3" - pretty-format "^20.0.3" + pretty-format "^19.0.0" -jest-matchers@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" +jest-matchers@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-19.0.0.tgz#c74ecc6ebfec06f384767ba4d6fa4a42d6755754" dependencies: - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-message-util "^20.0.3" - jest-regex-util "^20.0.3" + jest-diff "^19.0.0" + jest-matcher-utils "^19.0.0" + jest-message-util "^19.0.0" + jest-regex-util "^19.0.0" -jest-message-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" +jest-message-util@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-19.0.0.tgz#721796b89c0e4d761606f9ba8cb828a3b6246416" dependencies: - chalk "^1.1.3" + chalk "^1.1.1" micromatch "^2.3.11" - slash "^1.0.0" -jest-mock@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" +jest-mock@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-19.0.0.tgz#67038641e9607ab2ce08ec4a8cb83aabbc899d01" -jest-regex-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" +jest-regex-util@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-19.0.0.tgz#b7754587112aede1456510bb1f6afe74ef598691" -jest-resolve-dependencies@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" +jest-resolve-dependencies@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-19.0.0.tgz#a741ad1fa094140e64ecf2642a504f834ece22ee" dependencies: - jest-regex-util "^20.0.3" + jest-file-exists "^19.0.0" -jest-resolve@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" +jest-resolve@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-19.0.2.tgz#5793575de4f07aec32f7d7ff0c6c181963eefb3c" dependencies: browser-resolve "^1.11.2" - is-builtin-module "^1.0.0" - resolve "^1.3.2" + jest-haste-map "^19.0.0" + resolve "^1.2.0" -jest-runtime@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" +jest-runtime@^19.0.2: + version "19.0.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-19.0.3.tgz#a163354ace46910ee33f0282b6bff6b0b87d4330" dependencies: babel-core "^6.0.0" - babel-jest "^20.0.3" + babel-jest "^19.0.0" babel-plugin-istanbul "^4.0.0" chalk "^1.1.3" - convert-source-map "^1.4.0" - graceful-fs "^4.1.11" - jest-config "^20.0.4" - jest-haste-map "^20.0.4" - jest-regex-util "^20.0.3" - jest-resolve "^20.0.4" - jest-util "^20.0.3" + graceful-fs "^4.1.6" + jest-config "^19.0.2" + jest-file-exists "^19.0.0" + jest-haste-map "^19.0.0" + jest-regex-util "^19.0.0" + jest-resolve "^19.0.2" + jest-util "^19.0.2" json-stable-stringify "^1.0.1" micromatch "^2.3.11" strip-bom "3.0.0" - yargs "^7.0.2" + yargs "^6.3.0" -jest-snapshot@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" +jest-snapshot@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-19.0.2.tgz#9c1b216214f7187c38bfd5c70b1efab16b0ff50b" dependencies: chalk "^1.1.3" - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-util "^20.0.3" + jest-diff "^19.0.0" + jest-file-exists "^19.0.0" + jest-matcher-utils "^19.0.0" + jest-util "^19.0.2" natural-compare "^1.4.0" - pretty-format "^20.0.3" + pretty-format "^19.0.0" -jest-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" +jest-util@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-19.0.2.tgz#e0a0232a2ab9e6b2b53668bdb3534c2b5977ed41" dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-message-util "^20.0.3" - jest-mock "^20.0.3" - jest-validate "^20.0.3" - leven "^2.1.0" + chalk "^1.1.1" + graceful-fs "^4.1.6" + jest-file-exists "^19.0.0" + jest-message-util "^19.0.0" + jest-mock "^19.0.0" + jest-validate "^19.0.2" + leven "^2.0.0" mkdirp "^0.5.1" -jest-validate@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" +jest-validate@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.2.tgz#dc534df5f1278d5b63df32b14241d4dbf7244c0c" dependencies: - chalk "^1.1.3" - jest-matcher-utils "^20.0.3" - leven "^2.1.0" - pretty-format "^20.0.3" + chalk "^1.1.1" + jest-matcher-utils "^19.0.0" + leven "^2.0.0" + pretty-format "^19.0.0" -jest@20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" +jest@19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-19.0.2.tgz#b794faaf8ff461e7388f28beef559a54f20b2c10" dependencies: - jest-cli "^20.0.4" + jest-cli "^19.0.2" jodid25519@^1.0.0: version "1.0.2" @@ -2627,7 +2608,7 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -jsdom@^9.12.0: +jsdom@^9.11.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" dependencies: @@ -2734,7 +2715,7 @@ left-pad@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.1.3.tgz#612f61c033f3a9e08e939f1caebeea41b6f3199a" -leven@^2.1.0: +leven@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -3067,7 +3048,7 @@ node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" -node-notifier@^5.0.2: +node-notifier@^5.0.1: version "5.1.2" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" dependencies: @@ -3198,10 +3179,6 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-map@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" - parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -3273,7 +3250,7 @@ performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -3328,11 +3305,10 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -pretty-format@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" +pretty-format@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84" dependencies: - ansi-regex "^2.1.1" ansi-styles "^3.0.0" pretty-format@^4.2.1: @@ -3773,7 +3749,7 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.3.2: +resolve@^1.1.6, resolve@^1.2.0: version "1.3.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" dependencies: @@ -3850,18 +3826,6 @@ sane@~1.5.0: walker "~1.0.5" watch "~0.10.0" -sane@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" - dependencies: - anymatch "^1.3.0" - exec-sh "^0.2.0" - fb-watchman "^1.8.0" - minimatch "^3.0.2" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.10.0" - sax@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" @@ -4390,7 +4354,7 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@^1.2.12, which@^1.2.9: +which@^1.1.1, which@^1.2.12, which@^1.2.9: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: @@ -4512,13 +4476,7 @@ yargs-parser@^4.2.0: dependencies: camelcase "^3.0.0" -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - dependencies: - camelcase "^3.0.0" - -yargs@^6.4.0: +yargs@^6.3.0, yargs@^6.4.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" dependencies: @@ -4536,24 +4494,6 @@ yargs@^6.4.0: y18n "^3.2.1" yargs-parser "^4.2.0" -yargs@^7.0.2: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" From 5abb8df76301efc0a5fd2476648b87d6186b55b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Thu, 25 May 2017 09:55:40 +0200 Subject: [PATCH 36/50] doc(README): remove warming --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 38ae422..3347eb6 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,6 @@ [![npm version](https://badge.fury.io/js/react-router-navigation.svg)](https://badge.fury.io/js/react-router-navigation) [![Am I a cool kid ?](http://cool-kid.herokuapp.com/LeoLeBras/react-router-navigation)](https://github.com/awemakers/cool-kid) ->### An update is coming (wip) -> Check [next branch](https://github.com/LeoLeBras/react-router-navigation/tree/next) for RN 0.42+ support - `react-router-navigation` provides tools to navigate between multiple screens with navigators or tab views. This library is based on `react-router`, `react-navigation`, and `react-native-tab-view`. From 0318cf22aea90c7c0e3023f17a9bc91ad9a5e5f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Thu, 25 May 2017 09:56:09 +0200 Subject: [PATCH 37/50] chore(npm): rc release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 04a73f0..465dde9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "react-router-navigation", "description": "A complete navigation library for React Native", - "version": "1.0.0-beta.3", + "version": "1.0.0-rc.1", "main": "index.js", "keywords": [ "react-native", From 388dfef3afd069f363eb218b94bc53ee0558490e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Thu, 25 May 2017 10:01:16 +0200 Subject: [PATCH 38/50] doc(BOTTOM_NAVIGATION): add onRequestChangeTab prop --- docs/BOTTOM_NAVIGATION.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/BOTTOM_NAVIGATION.md b/docs/BOTTOM_NAVIGATION.md index f6546ef..226fb5d 100644 --- a/docs/BOTTOM_NAVIGATION.md +++ b/docs/BOTTOM_NAVIGATION.md @@ -43,3 +43,4 @@ const App = () => ( * [```... ``` props](https://reacttraining.com/react-router/native/api/Route) * [```... TabBar props```](https://github.com/LeoLeBras/react-router-navigation/blob/master/docs/BOTTOM_NAVIGATION.md#tabbar-props) * **onReset** ```?Function``` callback which resets the current tab +* **onRequestChangeTab** ```?Function``` callback which update history From 52af2e6997a7d748e903c1d366d28298cc7ed0a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Thu, 25 May 2017 10:35:45 +0200 Subject: [PATCH 39/50] fix(DefaultRenderer): render navBar with correct scene --- modules/DefaultRenderer.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/DefaultRenderer.js b/modules/DefaultRenderer.js index c9e6d65..5f76586 100644 --- a/modules/DefaultRenderer.js +++ b/modules/DefaultRenderer.js @@ -4,16 +4,14 @@ import React from 'react' import { CardStack, Transitioner } from 'react-navigation' import type { NavigationTransitionProps } from 'react-navigation/src/TypeDefinition' -import type { NavigationProps, CardsRendererProps } from './TypeDefinitions' +import type { Route, NavigationProps, CardsRendererProps } from './TypeDefinitions' type SceneRendererProps = & CardsRendererProps & NavigationTransitionProps type NavigationScreen = { - state: { - routeName: string, - }, + state: Route, } type Props = @@ -33,10 +31,10 @@ class DefaultRenderer extends React.Component { sceneProps: SceneRendererProps, ): Object => { // Get route name - const { state: { routeName } } = navigationScreen + const { state: { key } } = navigationScreen // Get current scene const scene = sceneProps.scenes.find(({ route }) => { - return route.routeName === routeName + return route.key === key }) // Return header return { From e273824a1cbd86e69e644b45ff36524eb68db64f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Sat, 10 Jun 2017 13:04:09 +0200 Subject: [PATCH 40/50] fix(examples): lint + perf --- examples/Basic/package.json | 13 ----- examples/Huge/src/App.js | 82 ++++++++++++++++++++++++++++++ examples/Huge/src/Feed.js | 68 +++++++++++++------------ examples/Huge/src/Profile.js | 97 ++++++++++++++++++++---------------- examples/Huge/src/index.js | 67 +++---------------------- examples/Huge/src/theme.js | 1 + 6 files changed, 181 insertions(+), 147 deletions(-) create mode 100644 examples/Huge/src/App.js diff --git a/examples/Basic/package.json b/examples/Basic/package.json index 5faad5a..c69359f 100644 --- a/examples/Basic/package.json +++ b/examples/Basic/package.json @@ -1,5 +1,4 @@ { -<<<<<<< HEAD "name": "Basic", "version": "0.0.1", "private": true, @@ -11,18 +10,6 @@ "react": "16.0.0-alpha.6", "react-native": "0.44.0", "react-router": "4.1.1", -======= - "name": "Basic", - "version": "0.0.1", - "private": true, - "scripts": { - "start": "node node_modules/react-native/local-cli/cli.js start" - }, - "dependencies": { - "react": "^15.4.1", - "react-native": "^0.41.1", - "react-router": "4.1.1", ->>>>>>> master "react-router-native": "4.1.1", "react-router-navigation": "file:./../../" }, diff --git a/examples/Huge/src/App.js b/examples/Huge/src/App.js new file mode 100644 index 0000000..c4ab92e --- /dev/null +++ b/examples/Huge/src/App.js @@ -0,0 +1,82 @@ +/* @flow */ + +import React from 'react' +import { Platform, Image } from 'react-native' +import { BottomNavigation, Tab } from 'react-router-navigation' +import type { RouterHistory } from 'react-router' +import Feed from './Feed' +import Profile from './Profile' +import { NEUTRAL_COLOR_50, BRAND_COLOR_60 } from './theme' + +type Props = { + history: RouterHistory, +} + +class App extends React.Component { + + props: Props + feed: Feed + + shouldComponentUpdate(): boolean { + return false + } + + render(): React$Element { + const { history } = this.props + return ( + + ( + { + this.feed = c + }} + /> + )} + onReset={() => { + if (this.feed && this.feed.listView) { + this.feed.listView.scrollTo({ y: 0 }) + } + }} + label="Feed" + renderTabIcon={({ focused, tabTintColor, tabActiveTintColor }) => ( + + )} + /> + history.replace('/profile/likes')} + onReset={() => history.replace('/profile/likes')} + label="Profile" + renderTabIcon={({ focused, tabTintColor, tabActiveTintColor }) => ( + + )} + /> + + ) + } +} + +export default App diff --git a/examples/Huge/src/Feed.js b/examples/Huge/src/Feed.js index 9fbe72a..81ab8dc 100644 --- a/examples/Huge/src/Feed.js +++ b/examples/Huge/src/Feed.js @@ -1,7 +1,7 @@ /* @flow */ import React, { Component } from 'react' -import { StyleSheet, View } from 'react-native' +import { StyleSheet } from 'react-native' import { Navigation, Card } from 'react-router-navigation' import type { Match } from 'react-router' import HeaderTitle from 'react-navigation/src/views/HeaderTitle' @@ -31,41 +31,43 @@ class Feed extends Component { props: Props listView: List + shouldComponentUpdate(): boolean { + return false + } + render(): React$Element { const { match: { url } } = this.props return ( - - - ( - { - this.listView = c - }} - {...props} - /> - )} - title="Feed" - /> - ( - - {title} {match && match.params.id} - - )} - /> - - + + ( + { + this.listView = c + }} + {...props} + /> + )} + title="Feed" + /> + ( + + {title} {match && match.params.id} + + )} + /> + ) } diff --git a/examples/Huge/src/Profile.js b/examples/Huge/src/Profile.js index 0566cf1..bdf3058 100644 --- a/examples/Huge/src/Profile.js +++ b/examples/Huge/src/Profile.js @@ -2,7 +2,6 @@ import React from 'react' import { StyleSheet, Platform, View, TouchableOpacity, Text } from 'react-native' -import { Route, Redirect } from 'react-router' import { Link } from 'react-router-native' import { Tabs, Tab } from 'react-router-navigation' import { BRAND_COLOR_50 } from './theme' @@ -37,46 +36,60 @@ const styles = StyleSheet.create({ }, }) -const Profile = (): React$Element => ( - - ( - - Current: likes - - Go to bookmarks - - - )} - /> - ( - - Current: bookmarks - - Go to likes - - - )} - /> - -) +type Props = {} + +class Profile extends React.Component { + + props: Props + + shouldComponentUpdate(): boolean { + return false + } + + render(): React$Element { + return ( + + ( + + Current: likes + + Go to bookmarks + + + )} + /> + ( + + Current: bookmarks + + Go to likes + + + )} + /> + + ) + } + +} export default Profile diff --git a/examples/Huge/src/index.js b/examples/Huge/src/index.js index a40d70b..fa871d9 100644 --- a/examples/Huge/src/index.js +++ b/examples/Huge/src/index.js @@ -1,16 +1,15 @@ +/* @flow */ /* eslint global-require: 0 */ import React from 'react' -import { StyleSheet, StatusBar, Platform, View, Image } from 'react-native' +import { StyleSheet, StatusBar, View } from 'react-native' import { Switch, Route, Redirect } from 'react-router' -import { BottomNavigation, Tab } from 'react-router-navigation' import { ConnectedRouter, routerReducer, routerMiddleware } from 'react-router-redux' import createHistory from 'history/createMemoryHistory' import { Provider } from 'react-redux' import { createStore, combineReducers, applyMiddleware } from 'redux' -import Feed from './Feed' -import Profile from './Profile' import { BRAND_COLOR_60 } from './theme' +import App from './App' const styles = StyleSheet.create({ tabs: { @@ -21,10 +20,10 @@ const styles = StyleSheet.create({ const history = createHistory() const historyMiddleware = routerMiddleware(history) const loggerMiddleware = () => (next) => (action) => { - if (action.type === '@@router/LOCATION_CHANGE') { + if (action && action.type === '@@router/LOCATION_CHANGE') { console.log(history.entries.map(({ pathname }) => pathname)) } - next(action) + if (action) next(action) } const store = createStore( @@ -35,7 +34,7 @@ const store = createStore( ), ) -const App = (): React$Element => ( +const Root = (): React$Element => ( @@ -58,57 +57,7 @@ const App = (): React$Element => ( : '#ffffff' } /> - - ( - { - this.feed = c - }} - /> - )} - onReset={() => { - if (this.feed && this.feed.listView) { - this.feed.listView.scrollTo({ y: 0 }) - } - }} - label="Feed" - renderTabIcon={({ focused, tabTintColor, tabActiveTintColor }) => ( - - )} - /> - history.replace('/profile/likes')} - onReset={() => history.replace("/profile/likes")} - label="Profile" - renderTabIcon={({ focused, tabTintColor, tabActiveTintColor }) => ( - - )} - /> - + )} /> @@ -117,4 +66,4 @@ const App = (): React$Element => ( ) -export default App +export default Root diff --git a/examples/Huge/src/theme.js b/examples/Huge/src/theme.js index 139bd36..50b7077 100644 --- a/examples/Huge/src/theme.js +++ b/examples/Huge/src/theme.js @@ -1,4 +1,5 @@ /* @flow */ +export const NEUTRAL_COLOR_50 = '#a5aaB2' export const BRAND_COLOR_50 = '#1b95e0' export const BRAND_COLOR_60 = '#1581c4' From f421a042ddf3338d5e76fc2a0e7b46cbe1023d66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Sat, 10 Jun 2017 13:08:10 +0200 Subject: [PATCH 41/50] refactor(all): add history utils --- modules/BottomNavigation.js | 5 +- modules/Card.js | 5 +- modules/CardStack.js | 111 ++++------------ modules/History.js | 53 -------- modules/HistoryUtils.js | 29 ++++ modules/Navigation.js | 5 +- modules/SceneView.js | 30 +++-- modules/StackUtils.js | 7 +- modules/Tab.js | 5 +- modules/TabStack.js | 85 ++++++------ modules/Tabs.js | 5 +- modules/TypeDefinitions.js | 8 +- package.json | 5 +- yarn.lock | 257 ++++++++++++++++++------------------ 14 files changed, 265 insertions(+), 345 deletions(-) delete mode 100644 modules/History.js create mode 100644 modules/HistoryUtils.js diff --git a/modules/BottomNavigation.js b/modules/BottomNavigation.js index 692ce95..4d36202 100644 --- a/modules/BottomNavigation.js +++ b/modules/BottomNavigation.js @@ -7,7 +7,7 @@ import { TabViewAnimated, TabViewPagerPan } from 'react-native-tab-view' import type { TabProps, TabBarProps, TabSubViewProps } from './TypeDefinitions' import * as StackUtils from './StackUtils' import TabBarBottom from './TabBarBottom' -import History from './History' +import { History } from './HistoryUtils' import TabStack from './TabStack' const styles = StyleSheet.create({ @@ -93,11 +93,10 @@ class BottomNavigation extends React.Component { render(): React$Element { return ( - {({ history, location }) => ( + {history => ( { diff --git a/modules/Card.js b/modules/Card.js index 4998383..029ba94 100644 --- a/modules/Card.js +++ b/modules/Card.js @@ -2,18 +2,17 @@ import React from 'react' import type { CardProps } from './TypeDefinitions' -import History from './History' +import { History } from './HistoryUtils' import SceneView from './SceneView' type Props = CardProps const Card = (props: Props) => ( - {({ history, location }) => ( + {history => ( )} diff --git a/modules/CardStack.js b/modules/CardStack.js index c2dcbf0..8a405e7 100755 --- a/modules/CardStack.js +++ b/modules/CardStack.js @@ -4,43 +4,38 @@ import React from 'react' import { BackHandler } from 'react-native' -import isEqual from 'lodash.isequal' -import omit from 'lodash.omit' -import functions from 'lodash.functions' import { matchPath } from 'react-router' import { StateUtils } from 'react-navigation' -import type { RouterHistory, Location } from 'react-router' +import type { RouterHistory } from 'react-router' import type { CardsRendererProps, NavigationState, Card } from './TypeDefinitions' import * as StackUtils from './StackUtils' +import * as HistoryUtils from './HistoryUtils' type State = { navigationState: NavigationState<{}>, cards: Array, - historyIndex: number, } type Props = { - // eslint-disable-next-line - location: Location, - history: RouterHistory, - // eslint-disable-next-line + history: RouterHistory, // eslint-disable-next-line children?: Array>, render: (props: CardsRendererProps) => React$Element, } -class CardStack extends React.Component { +class CardStack extends React.PureComponent { props: Props state: State - // Initialyze navigation state with initial history + unlistenHistory: Function + constructor(props: Props): void { super(props) // Build the card stack const { children, history: { entries, index, location } } = props const cards = children && StackUtils.build(children) + // CardStack can be mount ? if (!cards) throw new Error('No initial route found') - // Get initial route of navigation state if (!entries || index === undefined) throw new Error('No history entries found') // Build navigation state const navigationState = entries.reduce((state, entry) => { @@ -61,53 +56,37 @@ class CardStack extends React.Component { } }, { index: -1, routes: [] }) // Save everything in component state - this.state = { navigationState, cards, historyIndex: index } + this.state = { navigationState, cards } } - // Listen hardware BackHandler event + // Listen hardware BackHandler event + history event componentDidMount(): void { + const { history } = this.props + this.unlistenHistory = HistoryUtils.runHistoryListenner(history, this.onListenHistory) BackHandler.addEventListener('hardwareBackPress', this.onNavigateBack) } // Remove all listeners componentWillUnmount(): void { + this.unlistenHistory() BackHandler.removeEventListener('hardwareBackPress', this.onNavigateBack) } + // Update cards componentWillReceiveProps(nextProps: Props): void { - // Extact state and props - const { - location, - history: { entries }, - } = this.props - const { - location: nextLocation, - history: { action, index: nextIndexHistory }, - children: nextChildren, - } = nextProps - const { - cards, - navigationState: { routes, index }, - historyIndex, - } = this.state - // Re-build cards - const nextCards = nextChildren && StackUtils.build(nextChildren) - if ( - nextCards && - !isEqual( - cards.map(card => omit(card, functions(card))), - nextCards.map(card => omit(card, functions(card))), - ) - ) { - this.setState({ - cards: nextCards.map((card, i) => ({ - ...cards[i], - ...omit(card, functions(card)), - })), - }) - } + const { children } = nextProps + const { cards } = this.state + const nextCards = children && StackUtils.build(children, cards) + this.setState({ cards: nextCards }) + } + + // Update navigation state + onListenHistory = (history: RouterHistory, nextHistory: RouterHistory): void => { + const { location, entries, index } = history + const { location: nextLocation, action, index: nextIndex } = nextHistory + const { navigationState, cards } = this.state // Get current card - const currentRoute = routes[index] + const currentRoute = navigationState.routes[navigationState.index] const currentCard = cards.find(({ key }) => key === currentRoute.routeName) // Get next card const nextRoute = StackUtils.getRoute(cards, nextLocation) @@ -131,13 +110,13 @@ class CardStack extends React.Component { } case 'POP': { if ( - historyIndex === undefined || - nextIndexHistory === undefined || + index === undefined || + nextIndex === undefined || entries === undefined ) { return } - const n = historyIndex - nextIndexHistory + const n = index - nextIndex if (n > 1) { this.setState(state => ({ navigationState: StateUtils.reset( @@ -168,10 +147,6 @@ class CardStack extends React.Component { } default: } - // Save historyIndex - if (nextIndexHistory !== undefined && nextIndexHistory >= 0) { - this.state.historyIndex = nextIndexHistory - } } } @@ -184,36 +159,6 @@ class CardStack extends React.Component { return false } - // Diff navigation state - shouldComponentUpdate(nextProps: Props, nextState: State): boolean { - // Get options - const options = { ...this.props } - const nextOptions = { ...nextProps } - delete options.location - delete options.history - delete options.children - delete options.render - delete nextOptions.location - delete nextOptions.history - delete nextOptions.children - delete nextOptions.render - // Get navigation state - const { cards, navigationState } = this.state - const { cards: nextCards, navigationState: nextNavigationState } = nextState - // Get diff - return ( - !isEqual(navigationState, nextNavigationState) || - !isEqual( - omit(options, functions(options)), - omit(nextOptions, functions(nextOptions)), - ) || - !isEqual( - cards.map(card => omit(card, functions(card))), - nextCards.map(card => omit(card, functions(card))), - ) - ) - } - // Render view render(): React$Element { return this.props.render({ diff --git a/modules/History.js b/modules/History.js deleted file mode 100644 index bd8e90a..0000000 --- a/modules/History.js +++ /dev/null @@ -1,53 +0,0 @@ -/* @flow */ -/* eslint no-duplicate-imports: 0 */ - -import React from 'react' -import type { ContextRouter, Location } from 'react-router' -import { withRouter } from 'react-router' - -const enhancer = withRouter - -type Props = ContextRouter & { - children?: () => React$Element, -} - -type State = { - location: Location, -} - -class History extends React.Component { - - props: Props - state: State - - unlisten: Function - - constructor(props: Props) { - super(props) - const { location } = props.history - this.state = { location } - } - - componentWillMount(): void { - const { history } = this.props - this.unlisten = history.listen(this.onChangeHistory) - } - - componentWillUnmount(): void { - this.unlisten() - } - - onChangeHistory = (location: Location): void => { - this.setState({ location }) - } - - render(): ?React$Element { - const { children, history } = this.props - if (!children) return null - const { location } = this.state - return children({ history, location }) - } - -} - -export default enhancer(History) diff --git a/modules/HistoryUtils.js b/modules/HistoryUtils.js new file mode 100644 index 0000000..4f5c3ee --- /dev/null +++ b/modules/HistoryUtils.js @@ -0,0 +1,29 @@ +/* @flow */ +/* eslint no-duplicate-imports: 0 */ + +import type { ContextRouter, RouterHistory } from 'react-router' +import { withRouter } from 'react-router' + +const enhancer = withRouter + +type Props = ContextRouter & { + children?: Function, +} + +export const History = enhancer( + ({ children, history }: Props): ?React$Element => { + if (!children) return null + return children(history) + }, +) + +export const runHistoryListenner = ( + history: RouterHistory, + onListenHistory: Function, +): Function => { + let lastHistory = { ...history } + return history.listen(() => { + onListenHistory(lastHistory, history) + lastHistory = { ...history } + }) +} diff --git a/modules/Navigation.js b/modules/Navigation.js index a0d54d7..e586667 100644 --- a/modules/Navigation.js +++ b/modules/Navigation.js @@ -6,7 +6,7 @@ import type { NavigationProps, CardSubViewProps } from './TypeDefinitions' import CardStack from './CardStack' import DefaultRenderer from './DefaultRenderer' import NavBar from './NavBar' -import History from './History' +import { History } from './HistoryUtils' import * as StackUtils from './StackUtils' type Props = NavigationProps & { @@ -40,10 +40,9 @@ class Navigation extends React.Component { const { children, ...props } = this.props return ( - {({ history, location }) => ( + {history => ( ( diff --git a/modules/SceneView.js b/modules/SceneView.js index 875b442..7445b89 100644 --- a/modules/SceneView.js +++ b/modules/SceneView.js @@ -7,12 +7,12 @@ import type { RouterHistory, Location, Match } from 'react-router' import type { CardProps } from './TypeDefinitions' type Props = CardProps & { - location: Location, history: RouterHistory, type: 'card' | 'tab', } type State = { + location: Location, match: ?Match, } @@ -28,14 +28,28 @@ class SceneView extends React.Component { // Build current match const { path, exact, strict, history: { location } } = props const match = matchPath(location.pathname, { path, exact, strict }) - this.state = { match } + this.state = { match, location } + } + + componentDidMount(): void { + // Listen history events + const { history } = this.props + this.unlisten = history.listen(this.onListenHistory) + } + + componentWillUnmount(): void { + // Remove history listenner + this.unlisten() } - componentWillReceiveProps(nextProps: Props): void { - const { location, path, exact, strict } = nextProps + onListenHistory = (location: Location): void => { + // Build match + const { path, exact, strict } = this.props if (!this.state.match) { const match = matchPath(location.pathname, { path, exact, strict }) - this.setState({ match }) + this.setState({ match, location }) + } else { + this.setState({ location }) } } @@ -47,11 +61,11 @@ class SceneView extends React.Component { render(): ?React$Element { // Get scene component $FlowFixMe const { render, children, component, type } = this.props - const { match } = this.state - // If card, return null is match is not defined + const { match, location } = this.state + // Special case if (type === 'card' && !match) return null // Return scene component - const ownProps = { ...this.props, match } + const ownProps = { ...this.props, match, location } if (render) return render(ownProps) else if (children && typeof children === 'function') return children(ownProps) else if (component) return React.createElement(component, ownProps) diff --git a/modules/StackUtils.js b/modules/StackUtils.js index c36b314..4b59639 100644 --- a/modules/StackUtils.js +++ b/modules/StackUtils.js @@ -13,8 +13,9 @@ import type { Route } from './TypeDefinitions' // eslint-disable-next-line export const build = ( children: Array>, + oldBuild?: Array, ): Array => { - return React.Children.toArray(children).reduce((stack, child) => { + return React.Children.toArray(children).reduce((stack, child, index) => { const item = Object.keys(child.props).reduce((props, key) => { if (key === 'path') { return { @@ -25,7 +26,9 @@ export const build = ( } else if (key === 'render' || key === 'component' || key === 'children') { return { ...props, - [key]: () => React.cloneElement(child), + [key]: oldBuild + ? oldBuild[index][key] + : () => React.cloneElement(child), } } return { diff --git a/modules/Tab.js b/modules/Tab.js index cf7999a..96c4ebb 100644 --- a/modules/Tab.js +++ b/modules/Tab.js @@ -2,18 +2,17 @@ import React from 'react' import type { TabProps } from './TypeDefinitions' -import History from './History' +import { History } from './HistoryUtils' import SceneView from './SceneView' type Props = TabProps const Tab = (props: Props): React$Element => ( - {({ history, location }) => ( + {history => ( )} diff --git a/modules/TabStack.js b/modules/TabStack.js index cba94be..79202d1 100755 --- a/modules/TabStack.js +++ b/modules/TabStack.js @@ -4,19 +4,14 @@ import React from 'react' import type { RouterHistory, Location } from 'react-router' -import isEqual from 'lodash.isequal' -import omit from 'lodash.omit' -import functions from 'lodash.functions' import type { NavigationState, TabsRendererProps, Tab } from './TypeDefinitions' import * as StackUtils from './StackUtils' +import * as HistoryUtils from './HistoryUtils' type Props = { - location: Location, - history: RouterHistory, - // eslint-disable-next-line + history: RouterHistory, // eslint-disable-next-line children?: Array>, - render: (props: TabsRendererProps) => React$Element, - // eslint-disable-next-line + render: (props: TabsRendererProps) => React$Element, // eslint-disable-next-line lazy?: boolean, forceSync?: boolean, } @@ -35,12 +30,12 @@ type State = { tabsHistory: { [key: number]: Array }, } -class TabStack extends React.Component { +class TabStack extends React.PureComponent { props: Props state: State - unlisten: Function + unlistenHistory: Function static defaultProps = { forceSync: false, @@ -79,47 +74,69 @@ class TabStack extends React.Component { this.state = { navigationState, tabs, rootIndex, tabsHistory } } + // Listen history events + componentDidMount(): void { + const { history } = this.props + this.unlistenHistory = HistoryUtils.runHistoryListenner(history, this.onListenHistory) + } + + // Remove all listeners + componentWillUnmount(): void { + this.unlistenHistory() + } + + // Update cards componentWillReceiveProps(nextProps: Props): void { + const { children } = nextProps + const { tabs } = this.state + const nextTabs = children && StackUtils.build(children, tabs) + this.setState({ tabs: nextTabs }) + } + + // Update navigation state + onListenHistory = (history: RouterHistory, nextHistory: RouterHistory): void => { // Extract props - const { location } = this.props - const { location: nextLocation, history: { entries, index: historyIndex } } = nextProps - const { navigationState: { routes, index }, tabs, rootIndex } = this.state + const { location } = history + const { location: nextLocation, entries, index } = nextHistory + const { navigationState, tabs, rootIndex } = this.state // Get current tab - const currentRoute = routes[index] + const currentRoute = navigationState.routes[navigationState.index] const currentTab = StackUtils.get(tabs, currentRoute) // Get next tab const nextRoute = StackUtils.getRoute(tabs, nextLocation) if (!nextRoute) return const nextTab = StackUtils.get(tabs, nextRoute) - const nextIndex = routes.findIndex(({ routeName }) => routeName === nextRoute.routeName) + const nextIndex = navigationState.routes.findIndex(({ routeName }) => { + return routeName === nextRoute.routeName + }) // Update navigation state if ( currentTab && nextTab && StackUtils.shouldUpdate(currentTab, nextTab, location, nextLocation) ) { - this.setState(({ navigationState }) => ({ + this.setState(previousState => ({ navigationState: { index: nextIndex, - routes: navigationState.routes, + routes: previousState.navigationState.routes, }, })) } // Save history if ( - nextRoute && entries && historyIndex !== undefined && entries[historyIndex] && - nextLocation.pathname === entries[historyIndex].pathname + nextRoute && entries && index !== undefined && entries[index] && + nextLocation.pathname === entries[index].pathname ) { - this.state.tabsHistory[nextIndex] = entries.slice(rootIndex, historyIndex + 1) + this.state.tabsHistory[nextIndex] = entries.slice(rootIndex, index + 1) } } // Callback for when the current tab changes onRequestChangeTab = (index: number): void => { if (index < 0) return - // 1) Set index directly const { lazy, forceSync, history: { entries, index: historyIndex } } = this.props const { navigationState, tabsHistory, tabs, rootIndex } = this.state if (index !== navigationState.index) { + // 1) Set index directly if (!lazy || tabsHistory[index]) { this.setState(prevState => ({ navigationState: { @@ -183,32 +200,6 @@ class TabStack extends React.Component { } } - // Diff navigation state - shouldComponentUpdate(nextProps: Props, nextState: State): boolean { - // Get options - const options = { ...this.props } - const nextOptions = { ...nextProps } - delete options.location - delete options.history - delete options.children - delete options.render - delete nextOptions.location - delete nextOptions.history - delete nextOptions.children - delete nextOptions.render - // Get navigation state - const { navigationState } = this.state - const { navigationState: nextNavigationState } = nextState - // Get diff - return ( - !isEqual(navigationState, nextNavigationState) || - !isEqual( - omit(options, functions(options)), - omit(nextOptions, functions(nextOptions)), - ) - ) - } - // Render view render(): React$Element { return this.props.render({ diff --git a/modules/Tabs.js b/modules/Tabs.js index 6e7c95d..0af8383 100644 --- a/modules/Tabs.js +++ b/modules/Tabs.js @@ -7,7 +7,7 @@ import { matchPath } from 'react-router' import type { TabSubViewProps, TabBarProps } from './TypeDefinitions' import * as StackUtils from './StackUtils' import TabStack from './TabStack' -import History from './History' +import { History } from './HistoryUtils' const styles = StyleSheet.create({ container: { @@ -107,11 +107,10 @@ class Tabs extends React.Component { render(): React$Element { return ( - {({ history, location }) => ( + {history => ( { const ownProps = { ...this.props, ...props } diff --git a/modules/TypeDefinitions.js b/modules/TypeDefinitions.js index a8da78c..68c70e9 100644 --- a/modules/TypeDefinitions.js +++ b/modules/TypeDefinitions.js @@ -49,10 +49,10 @@ export type NavBarProps = { export type NavigationProps = & NavBarProps & { - cardStyle?: StyleSheet, - onTransitionStart?: Function, - onTransitionEnd?: Function, -} + cardStyle?: StyleSheet, + onTransitionStart?: Function, + onTransitionEnd?: Function, + } export type CardProps = & RouteProps diff --git a/package.json b/package.json index 465dde9..e83e277 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "react-router-navigation", "description": "A complete navigation library for React Native", - "version": "1.0.0-rc.1", + "version": "1.0.0-rc", "main": "index.js", "keywords": [ "react-native", @@ -32,9 +32,6 @@ "react-router-native": "4.1.x" }, "dependencies": { - "lodash.functions": "^4.3.0", - "lodash.isequal": "^4.5.0", - "lodash.omit": "^4.5.0", "react-native-tab-view": "0.0.65", "react-navigation": "1.0.0-beta.11" }, diff --git a/yarn.lock b/yarn.lock index 4eb125b..7c24e61 100644 --- a/yarn.lock +++ b/yarn.lock @@ -222,19 +222,19 @@ babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: js-tokens "^3.0.0" babel-core@^6.0.0, babel-core@^6.21.0, babel-core@^6.24.1, babel-core@^6.7.2: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729" dependencies: babel-code-frame "^6.22.0" - babel-generator "^6.24.1" + babel-generator "^6.25.0" babel-helpers "^6.24.1" babel-messages "^6.23.0" babel-register "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babylon "^6.11.0" + babel-template "^6.25.0" + babel-traverse "^6.25.0" + babel-types "^6.25.0" + babylon "^6.17.2" convert-source-map "^1.1.0" debug "^2.1.1" json5 "^0.5.0" @@ -255,13 +255,13 @@ babel-eslint@7.1.1: babylon "^6.13.0" lodash.pickby "^4.6.0" -babel-generator@^6.18.0, babel-generator@^6.21.0, babel-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" +babel-generator@^6.18.0, babel-generator@^6.21.0, babel-generator@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" dependencies: babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.24.1" + babel-types "^6.25.0" detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.2.0" @@ -405,12 +405,12 @@ babel-plugin-istanbul@^3.0.0: test-exclude "^3.3.0" babel-plugin-istanbul@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.3.tgz#6ee6280410dcf59c7747518c3dfd98680958f102" + version "4.1.4" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz#18dde84bf3ce329fddf3f4103fae921456d8e587" dependencies: find-up "^2.1.0" - istanbul-lib-instrument "^1.7.1" - test-exclude "^4.1.0" + istanbul-lib-instrument "^1.7.2" + test-exclude "^4.1.1" babel-plugin-jest-hoist@^18.0.0: version "18.0.0" @@ -631,8 +631,8 @@ babel-plugin-transform-object-rest-spread@^6.20.2, babel-plugin-transform-object babel-runtime "^6.22.0" babel-plugin-transform-react-display-name@^6.5.0, babel-plugin-transform-react-display-name@^6.8.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.23.0.tgz#4398910c358441dc4cef18787264d0412ed36b37" + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" dependencies: babel-runtime "^6.22.0" @@ -716,8 +716,8 @@ babel-preset-fbjs@^1.0.0: object-assign "^4.0.1" babel-preset-fbjs@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.2.tgz#f52b2df56b1da883ffb7798b3b3be42c4c647a77" + version "2.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.3.tgz#005197cd2ce06fc36cb493071b15d715bd99c227" dependencies: babel-plugin-check-es2015-constants "^6.8.0" babel-plugin-syntax-class-properties "^6.8.0" @@ -813,42 +813,42 @@ babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtim core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-template@^6.16.0, babel-template@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" dependencies: babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babylon "^6.11.0" + babel-traverse "^6.25.0" + babel-types "^6.25.0" + babylon "^6.17.2" lodash "^4.2.0" -babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.21.0, babel-traverse@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" +babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.21.0, babel-traverse@^6.24.1, babel-traverse@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" dependencies: babel-code-frame "^6.22.0" babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.24.1" - babylon "^6.15.0" + babel-types "^6.25.0" + babylon "^6.17.2" debug "^2.2.0" globals "^9.0.0" invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" +babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.24.1, babel-types@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" dependencies: babel-runtime "^6.22.0" esutils "^2.0.2" lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.16.1: - version "6.17.1" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" +babylon@^6.13.0, babylon@^6.16.1, babylon@^6.17.2: + version "6.17.3" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.3.tgz#1327d709950b558f204e5352587fd0290f8d8e48" balanced-match@^0.4.1: version "0.4.2" @@ -893,8 +893,8 @@ beeper@^1.0.0: resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" big-integer@^1.6.7: - version "1.6.22" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.22.tgz#487c95fce886022ea48ff5f19e388932df46dd2e" + version "1.6.23" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.23.tgz#e85d508220c74e3f43a4ce72eed51f3da4db94d1" body-parser@~1.13.3: version "1.13.3" @@ -968,10 +968,6 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" -buffer-shims@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - 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" @@ -1367,6 +1363,10 @@ dom-walk@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" +double-ended-queue@^2.1.0-0: + version "2.1.0-0" + resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" + duplexer2@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" @@ -1409,8 +1409,8 @@ errorhandler@~1.4.2: escape-html "~1.0.3" es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.21" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.21.tgz#19a725f9e51d0300bbc1e8e821109fd9daf55925" + version "0.10.23" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.23.tgz#7578b51be974207a5487821b56538c224e4e7b38" dependencies: es6-iterator "2" es6-symbol "~3.1" @@ -1522,8 +1522,8 @@ eslint-plugin-babel@^4.1.1: resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.1.1.tgz#ef285c87039b67beb3bbd227f5b0eed4fb376b87" eslint-plugin-flowtype@^2.30.3: - version "2.33.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.33.0.tgz#b2783814ed2ddcf729953b8f65ff73c90cabee4b" + version "2.34.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.34.0.tgz#b9875f314652e5081623c9d2b18a346bbb759c09" dependencies: lodash "^4.15.0" @@ -1921,8 +1921,8 @@ global@^4.3.0: process "~0.5.1" globals@^9.0.0, globals@^9.2.0: - version "9.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" globby@^5.0.0: version "5.0.0" @@ -2180,8 +2180,8 @@ is-ci@^1.0.9: ci-info "^1.0.0" is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" is-equal-shallow@^0.1.3: version "0.1.3" @@ -2228,12 +2228,18 @@ is-my-json-valid@^2.10.0: jsonpointer "^4.0.0" xtend "^4.0.0" -is-number@^2.0.2, is-number@^2.1.0: +is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + 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" @@ -2314,65 +2320,65 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-api@^1.1.0-alpha.1: - version "1.1.8" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e" + version "1.1.9" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.9.tgz#2827920d380d4286d857d57a2968a841db8a7ec8" dependencies: async "^2.1.4" fileset "^2.0.2" - istanbul-lib-coverage "^1.1.0" - istanbul-lib-hook "^1.0.6" - istanbul-lib-instrument "^1.7.1" - istanbul-lib-report "^1.1.0" - istanbul-lib-source-maps "^1.2.0" - istanbul-reports "^1.1.0" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.0.7" + istanbul-lib-instrument "^1.7.2" + istanbul-lib-report "^1.1.1" + istanbul-lib-source-maps "^1.2.1" + istanbul-reports "^1.1.1" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" +istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" -istanbul-lib-hook@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f" +istanbul-lib-hook@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" +istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz#6014b03d3470fb77638d5802508c255c06312e56" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" babylon "^6.13.0" - istanbul-lib-coverage "^1.1.0" + istanbul-lib-coverage "^1.1.1" semver "^5.3.0" -istanbul-lib-report@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770" +istanbul-lib-report@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" dependencies: - istanbul-lib-coverage "^1.1.0" + istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e" +istanbul-lib-source-maps@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" dependencies: debug "^2.6.3" - istanbul-lib-coverage "^1.1.0" + istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66" +istanbul-reports@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e" dependencies: handlebars "^4.0.3" @@ -2519,8 +2525,8 @@ jest-resolve@^19.0.2: resolve "^1.2.0" jest-runtime@^19.0.2: - version "19.0.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-19.0.3.tgz#a163354ace46910ee33f0282b6bff6b0b87d4330" + version "19.0.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-19.0.4.tgz#f167d9f1347752f2027361067926485349fcc245" dependencies: babel-core "^6.0.0" babel-jest "^19.0.0" @@ -2578,12 +2584,6 @@ jest@19.0.2: dependencies: jest-cli "^19.0.2" -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" - joi@^6.6.1: version "6.10.1" resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06" @@ -2695,6 +2695,12 @@ kind-of@^3.0.2: dependencies: is-buffer "^1.1.5" +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -2789,10 +2795,6 @@ lodash.escape@^3.0.0: dependencies: lodash._root "^3.0.0" -lodash.functions@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.functions/-/lodash.functions-4.3.0.tgz#ba02495b06fad31a95026a59b5a6404626190bc2" - lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -2801,10 +2803,6 @@ lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -2813,10 +2811,6 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" -lodash.omit@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" - lodash.pad@^4.1.0: version "4.5.1" resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" @@ -2877,8 +2871,8 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 js-tokens "^3.0.0" lru-cache@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + version "4.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.0.tgz#59be49a683b8d986a939f1ca60fdb6989f4b2046" dependencies: pseudomap "^1.0.1" yallist "^2.0.0" @@ -3038,8 +3032,8 @@ negotiator@0.6.1: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" node-fetch@^1.0.1, node-fetch@^1.3.3: - version "1.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.0.tgz#3ff6c56544f9b7fb00682338bb55ee6f54a8a0ef" + version "1.7.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.1.tgz#899cb3d0a3c92f952c47f1b876f4c8aeabd400d5" dependencies: encoding "^0.1.11" is-stream "^1.0.1" @@ -3369,11 +3363,11 @@ random-bytes@~1.0.0: resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" + is-number "^3.0.0" + kind-of "^4.0.0" range-parser@~1.0.3: version "1.0.3" @@ -3396,8 +3390,8 @@ react-deep-force-update@^1.0.0: resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.0.1.tgz#f911b5be1d2a6fe387507dd6e9a767aa2924b4c7" react-devtools-core@^2.0.8: - version "2.1.9" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-2.1.9.tgz#825e0582b7f8587cbf56bb5ef1ea94d8b158543e" + version "2.3.3" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-2.3.3.tgz#3a950e6f20f2c8e67d0419e428c8500e7d8bf347" dependencies: shell-quote "^1.6.1" ws "^2.0.3" @@ -3590,14 +3584,14 @@ read-pkg@^1.0.0: path-type "^1.0.0" readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2: - version "2.2.9" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" + version "2.2.11" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.11.tgz#0796b31f8d7688007ff0b93a8088d34aa17c0f72" dependencies: - buffer-shims "~1.0.0" core-util-is "~1.0.0" inherits "~2.0.1" isarray "~1.0.0" process-nextick-args "~1.0.6" + safe-buffer "~5.0.1" string_decoder "~1.0.0" util-deprecate "~1.0.1" @@ -3674,8 +3668,8 @@ regjsparser@^0.1.4: jsesc "~0.5.0" remove-trailing-separator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + version "1.0.2" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511" repeat-element@^1.1.2: version "1.1.2" @@ -3799,7 +3793,11 @@ rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" -safe-buffer@^5.0.1, safe-buffer@~5.0.1: +safe-buffer@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.0.tgz#fe4c8460397f9eaaaa58e73be46273408a45e223" + +safe-buffer@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" @@ -3902,8 +3900,8 @@ shell-quote@1.6.1, shell-quote@^1.6.1: jsonify "~0.0.0" shelljs@^0.7.5: - version "0.7.7" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" + version "0.7.8" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -3984,8 +3982,8 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -3994,7 +3992,6 @@ sshpk@^1.7.0: optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" jsbn "~0.1.0" tweetnacl "~0.14.0" @@ -4046,10 +4043,10 @@ string_decoder@~0.10.x: resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" string_decoder@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98" + version "1.0.2" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.2.tgz#b29e1f4e1125fa97a10382b8a533737b7491e179" dependencies: - safe-buffer "^5.0.1" + safe-buffer "~5.0.1" stringstream@~0.0.4: version "0.0.5" @@ -4117,9 +4114,9 @@ test-exclude@^3.3.0: read-pkg-up "^1.0.1" require-main-filename "^1.0.1" -test-exclude@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.0.tgz#04ca70b7390dd38c98d4a003a173806ca7991c91" +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" dependencies: arrify "^1.0.1" micromatch "^2.3.11" @@ -4132,8 +4129,10 @@ text-table@~0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" throat@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" + version "3.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.1.0.tgz#ef22d8855963b3fdc626d043508f24c4cdf7d3c3" + dependencies: + double-ended-queue "^2.1.0-0" through2@^2.0.0: version "2.0.3" From 4b737709314e27d9ee94c86cc7e8d36b22d94541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Sat, 10 Jun 2017 14:36:40 +0200 Subject: [PATCH 42/50] fix(DefaultRenderer): filter extra scenes --- modules/DefaultRenderer.js | 62 +++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/modules/DefaultRenderer.js b/modules/DefaultRenderer.js index 5f76586..676b186 100644 --- a/modules/DefaultRenderer.js +++ b/modules/DefaultRenderer.js @@ -62,27 +62,47 @@ class DefaultRenderer extends React.Component { }) } - renderView = (ownProps: SceneRendererProps): React$Element => ( - this.getScreenOptions(navigationScreen, ownProps), - getComponentForRouteName: routeName => this.getSceenComponent(routeName, ownProps), - }} - navigation={{ - goBack: this.props.onNavigateBack, - state: this.props.navigationState, - dispatch: (action) => { - if (action.type === 'Navigation/BACK') { - this.props.onNavigateBack() - } - return false - }, - }} - /> - ) + renderView = (ownProps: SceneRendererProps): React$Element => { + // Filter scenes + // Fix > https://github.com/LeoLeBras/react-router-navigation/issues/23 + const scenes = ownProps.scenes.reduce((acc, scene) => { + if (acc.find(({ index }) => scene.index === index)) { + const indexOf = acc.findIndex(({ index }) => scene.index === index) + return [ + ...acc.slice(0, indexOf), + scene, + ] + } + return [...acc, scene] + }, []) + // Return + return ( + { + return this.getScreenOptions(navigationScreen, { ...ownProps, scenes }) + }, + getComponentForRouteName: (routeName) => { + return this.getSceenComponent(routeName, { ...ownProps, scenes }) + }, + }} + navigation={{ + goBack: this.props.onNavigateBack, + state: this.props.navigationState, + dispatch: (action) => { + if (action.type === 'Navigation/BACK') { + this.props.onNavigateBack() + } + return false + }, + }} + /> + ) + } render(): React$Element { const { navigationState } = this.props From 5c26652d9c10f9dfb8f9a5fdba34643493208346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Sat, 10 Jun 2017 14:51:53 +0200 Subject: [PATCH 43/50] refactor(examples): clean Basic app --- examples/Basic/src/index.js | 272 ++++++++++++++++++------------------ 1 file changed, 137 insertions(+), 135 deletions(-) diff --git a/examples/Basic/src/index.js b/examples/Basic/src/index.js index 2c96c96..a41de26 100644 --- a/examples/Basic/src/index.js +++ b/examples/Basic/src/index.js @@ -1,5 +1,5 @@ import React, { Component } from 'react' -import { StatusBar, StyleSheet, View, TouchableOpacity, Button, Text } from 'react-native' +import { StatusBar, StyleSheet, View, TouchableOpacity, Text } from 'react-native' import { Switch, Route, Redirect } from 'react-router' import { NativeRouter, Link, DeepLinking } from 'react-router-native' import { Navigation, Card, Tabs, Tab } from 'react-router-navigation' @@ -35,143 +35,145 @@ class App extends Component { render() { return ( - - - - ( - - - Push a new scene - - { - this.setState({ - navigation: { - navBarStyle: { backgroundColor: PRIMARY_COLOR }, - titleStyle: { color: 'white' }, - barStyle: 'light-content', - backButtonTintColor: 'white', - }, - }) - }} - > - Change navbar style - - - )} - /> - ( - - - Push tabs - - { - this.setState(prevState => ({ - card: { - ...prevState.card, - navBarStyle: { backgroundColor: SECONDARY_COLOR }, - }, - })) - }} - > - Change navbar style - - { - this.setState(prevState => ({ - card: { - ...prevState.card, - title: 'New title !', - }, - })) - }} - > - Change title - - - )} - title={this.state.card.title || 'Yolo'} - /> - ( - - } - /> - ( - + + + + + ( + + + Push a new scene + + { + this.setState({ + navigation: { + navBarStyle: { backgroundColor: PRIMARY_COLOR }, + titleStyle: { color: 'white' }, + barStyle: 'light-content', + backButtonTintColor: 'white', + }, + }) + }} > - ( - - One - - )} - /> - ( - - Two - - )} - /> - ( - - Three - - )} - /> - - )} - /> - - )} - /> - - + Change navbar style + + + )} + /> + ( + + + Push tabs + + { + this.setState(prevState => ({ + card: { + ...prevState.card, + navBarStyle: { backgroundColor: SECONDARY_COLOR }, + titleStyle: { color: 'white' }, + barStyle: 'light-content', + backButtonTintColor: 'white', + }, + })) + }} + > + Change navbar style + + { + this.setState(prevState => ({ + card: { + ...prevState.card, + title: 'New title !', + }, + })) + }} + > + Change title + + + )} + title={this.state.card.title || 'Yolo'} + /> + (console.log(location), + + } + /> + ( + + ( + + One + + )} + /> + ( + + Two + + )} + /> + ( + + Three + + )} + /> + + )} + /> + + )} + /> + + + + ) } } -export default () => ( - - - - - -) +export default App From 5c51dda8d30b27703f71d30e6e8cada512142120 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Sat, 10 Jun 2017 14:52:36 +0200 Subject: [PATCH 44/50] fix(Navigation): some fixes --- modules/NavBar.js | 1 - modules/SceneView.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/NavBar.js b/modules/NavBar.js index 664a309..cac4ee9 100644 --- a/modules/NavBar.js +++ b/modules/NavBar.js @@ -39,7 +39,6 @@ class NavBar extends React.Component { // Return default component return ( { this.state = { match, location } } - componentDidMount(): void { + componentWillMount(): void { // Listen history events const { history } = this.props this.unlisten = history.listen(this.onListenHistory) From 5998061b3fc33300d087fba01c2b5586a3d580cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Sun, 11 Jun 2017 22:33:52 +0200 Subject: [PATCH 45/50] refactor(TabBarBottom): remove alignTabBarContent method --- modules/TabBarBottom.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/modules/TabBarBottom.js b/modules/TabBarBottom.js index 3741a8f..d5f1367 100644 --- a/modules/TabBarBottom.js +++ b/modules/TabBarBottom.js @@ -59,13 +59,6 @@ class TabBarBottom extends React.Component { tabActiveTintColor: '#3478f6', } - // Align tab icon & label - alignTabBarContent = (): Object => { - const { label, renderTabIcon } = this.props - if (label && renderTabIcon) return { justifyContent: 'flex-end' } - return { justifyContent: 'center' } - } - // Disable indicator renderIndicator = (): ?React$Element => { return null @@ -106,10 +99,15 @@ class TabBarBottom extends React.Component { } render(): React$Element { + const { label, renderTabIcon } = this.props return ( // $FlowFixMe null} From 84d792efd0a49daf0f2f19e73cff43be87e0aa60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Sun, 11 Jun 2017 23:52:51 +0200 Subject: [PATCH 46/50] fix(CardStack): fix #24 --- modules/CardStack.js | 74 +++++++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 22 deletions(-) diff --git a/modules/CardStack.js b/modules/CardStack.js index 8a405e7..70dd43a 100755 --- a/modules/CardStack.js +++ b/modules/CardStack.js @@ -6,12 +6,37 @@ import React from 'react' import { BackHandler } from 'react-native' import { matchPath } from 'react-router' import { StateUtils } from 'react-navigation' -import type { RouterHistory } from 'react-router' +import type { RouterHistory, Location } from 'react-router' import type { CardsRendererProps, NavigationState, Card } from './TypeDefinitions' import * as StackUtils from './StackUtils' import * as HistoryUtils from './HistoryUtils' +const buildNavigationState = ( + location: Location, + entries: Array, + cards: Array, +): NavigationState<{}> => { + return entries.reduce((state, entry) => { + const card = cards.find(({ path, exact, strict }) => { + return matchPath(entry.pathname, { path, exact, strict }) + }) + if (!card || !card.path) return { index: -1, routes: [] } + const route = StackUtils.getRoute(cards, entry) + if (!route) return { index: -1, routes: [] } + return { + index: matchPath(location.pathname, card) + ? state.routes.length + : state.index, + routes: [ + ...state.routes, + route, + ], + } + }, { index: -1, routes: [] }) +} + type State = { + key: number, navigationState: NavigationState<{}>, cards: Array, } @@ -38,25 +63,11 @@ class CardStack extends React.PureComponent { if (!cards) throw new Error('No initial route found') if (!entries || index === undefined) throw new Error('No history entries found') // Build navigation state - const navigationState = entries.reduce((state, entry) => { - const card = cards.find(({ path, exact, strict }) => { - return matchPath(entry.pathname, { path, exact, strict }) - }) - if (!card || !card.path) return state - const route = StackUtils.getRoute(cards, entry) - if (!route) return state - return { - index: matchPath(location.pathname, card) - ? state.routes.length - : state.index, - routes: [ - ...state.routes, - route, - ], - } - }, { index: -1, routes: [] }) + const navigationState = buildNavigationState(location, entries, cards) + // Set key + const key = 0 // Save everything in component state - this.state = { navigationState, cards } + this.state = { navigationState, cards, key } } // Listen hardware BackHandler event + history event @@ -74,10 +85,29 @@ class CardStack extends React.PureComponent { // Update cards componentWillReceiveProps(nextProps: Props): void { - const { children } = nextProps - const { cards } = this.state + const { children, history: { entries, location } } = nextProps + const { cards, navigationState } = this.state + // Rebuild cards ({ + key: prevState.key + 1, + cards: newCards, + navigationState: newNavigationState, + })) + } else { + // Update state + this.setState({ cards: nextCards }) + } } // Update navigation state From 2454dfa58cf457a860b98472d367f443e8838b03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Mon, 12 Jun 2017 00:07:59 +0200 Subject: [PATCH 47/50] feat(Navigation): add configureTransition prop --- docs/NAVIGATION.md | 1 + modules/DefaultRenderer.js | 1 + modules/TypeDefinitions.js | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/docs/NAVIGATION.md b/docs/NAVIGATION.md index 4034129..b0a550a 100644 --- a/docs/NAVIGATION.md +++ b/docs/NAVIGATION.md @@ -46,6 +46,7 @@ const App = () => ( * **onTransitionStart** ```?Function``` function invoked when the card transition animation is about to start * **onTransitionEnd** ```?Function``` function invoked once the card transition animation completes * **cardStyle** ```?StyleSheet``` override style for the card component +* **configureTransition** ```?Function``` function which customize animation #### `````` props * [```... ``` props](https://reacttraining.com/react-router/native/api/Route) diff --git a/modules/DefaultRenderer.js b/modules/DefaultRenderer.js index 676b186..ab05f7e 100644 --- a/modules/DefaultRenderer.js +++ b/modules/DefaultRenderer.js @@ -109,6 +109,7 @@ class DefaultRenderer extends React.Component { return ( NavigationTransitionSpec, onTransitionStart?: Function, onTransitionEnd?: Function, } From 4b33e89300b03c21e2fd53092c520cb954d5b0d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Mon, 12 Jun 2017 00:41:15 +0200 Subject: [PATCH 48/50] fix(Navigation): fix options --- examples/Basic/src/index.js | 5 ++++- modules/StackUtils.js | 13 ++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/examples/Basic/src/index.js b/examples/Basic/src/index.js index a41de26..5f82387 100644 --- a/examples/Basic/src/index.js +++ b/examples/Basic/src/index.js @@ -88,11 +88,14 @@ class App extends Component { style={styles.button} onPress={() => { this.setState(prevState => ({ + navigation: { + ...prevState.navigation, + barStyle: 'light-content', + }, card: { ...prevState.card, navBarStyle: { backgroundColor: SECONDARY_COLOR }, titleStyle: { color: 'white' }, - barStyle: 'light-content', backButtonTintColor: 'white', }, })) diff --git a/modules/StackUtils.js b/modules/StackUtils.js index 4b59639..b100f88 100644 --- a/modules/StackUtils.js +++ b/modules/StackUtils.js @@ -124,5 +124,16 @@ export const renderSubView = ( (scene && scene.route) || route || routes[index], ) if (!item) return null - return render({ ...props, ...item }, props) + return render({ + ...Object.keys(props).reduce((acc, key) => { + const value = props[key] + if (!value) return acc + return { ...acc, [key]: value } + }, {}), + ...Object.keys(item).reduce((acc, key) => { + const value = item[key] + if (!value) return acc + return { ...acc, [key]: value } + }, {}), + }, props) } From 0e2d05423b0dc51dbc2d4e732ab33709016aa729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Mon, 12 Jun 2017 00:45:21 +0200 Subject: [PATCH 49/50] fix(StackUtils): renderSubView filters only undefined values --- modules/StackUtils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/StackUtils.js b/modules/StackUtils.js index b100f88..cb3a7b3 100644 --- a/modules/StackUtils.js +++ b/modules/StackUtils.js @@ -127,12 +127,12 @@ export const renderSubView = ( return render({ ...Object.keys(props).reduce((acc, key) => { const value = props[key] - if (!value) return acc + if (value === undefined) return acc return { ...acc, [key]: value } }, {}), ...Object.keys(item).reduce((acc, key) => { const value = item[key] - if (!value) return acc + if (value === undefined) return acc return { ...acc, [key]: value } }, {}), }, props) From 37ab50f3b0316b6692f79ee97aadc5d70c4e9e43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20LE=20BRAS?= Date: Mon, 12 Jun 2017 00:46:17 +0200 Subject: [PATCH 50/50] chore(npm): release v1.0.0-rc.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e83e277..7dc0bef 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "react-router-navigation", "description": "A complete navigation library for React Native", - "version": "1.0.0-rc", + "version": "1.0.0-rc.2", "main": "index.js", "keywords": [ "react-native",