diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..7c75347 --- /dev/null +++ b/.babelrc @@ -0,0 +1,8 @@ +{ + "presets": ["react-native"], + "env": { + "production": { + "plugins": ["ignite-ignore-reactotron"] + } + } +} diff --git a/.buckconfig b/.buckconfig new file mode 100644 index 0000000..934256c --- /dev/null +++ b/.buckconfig @@ -0,0 +1,6 @@ + +[android] + target = Google Inc.:Google APIs:23 + +[maven_repositories] + central = https://repo1.maven.org/maven2 diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..8305f06 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true + + +[*.gradle] +indent_size = 4 \ No newline at end of file diff --git a/.flowconfig b/.flowconfig new file mode 100644 index 0000000..694b720 --- /dev/null +++ b/.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-5]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(4[0-5]\\|[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.45.0 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..2161b4a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +*.pbxproj -text +*.bat text eol=crlf \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..10be197 --- /dev/null +++ b/.gitignore @@ -0,0 +1,53 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# BUCK +buck-out/ +\.buckd/ +*.keystore + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots diff --git a/.watchmanconfig b/.watchmanconfig new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/.watchmanconfig @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/App/Components/AlertMessage.js b/App/Components/AlertMessage.js new file mode 100644 index 0000000..6768610 --- /dev/null +++ b/App/Components/AlertMessage.js @@ -0,0 +1,33 @@ +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import { View, Text } from 'react-native' +import styles from './Styles/AlertMessageStyles' + +export default class AlertMessage extends Component { + static defaultProps = { show: true } + + static propTypes = { + title: PropTypes.string, + icon: PropTypes.string, + style: PropTypes.object, + show: PropTypes.bool + } + + render () { + let messageComponent = null + if (this.props.show) { + const { title } = this.props + return ( + + + {title && title.toUpperCase()} + + + ) + } + + return messageComponent + } +} diff --git a/App/Components/DrawerButton.js b/App/Components/DrawerButton.js new file mode 100644 index 0000000..e8ea3f2 --- /dev/null +++ b/App/Components/DrawerButton.js @@ -0,0 +1,35 @@ +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import { Text, TouchableOpacity } from 'react-native' +import styles from './Styles/DrawerButtonStyles' +import ExamplesRegistry from '../Services/ExamplesRegistry' + +// Note that this file (App/Components/DrawerButton) needs to be +// imported in your app somewhere, otherwise your component won't be +// compiled and added to the examples dev screen. + +// Ignore in coverage report +/* istanbul ignore next */ +ExamplesRegistry.addComponentExample('Drawer Button', () => + window.alert('Your drawers are showing')} + /> +) + +class DrawerButton extends Component { + static propTypes = { + text: PropTypes.string, + onPress: PropTypes.func + } + + render () { + return ( + + {this.props.text} + + ) + } +} + +export default DrawerButton diff --git a/App/Components/FullButton.js b/App/Components/FullButton.js new file mode 100644 index 0000000..79da568 --- /dev/null +++ b/App/Components/FullButton.js @@ -0,0 +1,34 @@ +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import { TouchableOpacity, Text } from 'react-native' +import styles from './Styles/FullButtonStyles' +import ExamplesRegistry from '../Services/ExamplesRegistry' + +// Note that this file (App/Components/FullButton) needs to be +// imported in your app somewhere, otherwise your component won't be +// compiled and added to the examples dev screen. + +// Ignore in coverage report +/* istanbul ignore next */ +ExamplesRegistry.addComponentExample('Full Button', () => + window.alert('Full Button Pressed!')} + /> +) + +export default class FullButton extends Component { + static propTypes = { + text: PropTypes.string, + onPress: PropTypes.func, + styles: PropTypes.object + } + + render () { + return ( + + {this.props.text && this.props.text.toUpperCase()} + + ) + } +} diff --git a/App/Components/README.md b/App/Components/README.md new file mode 100644 index 0000000..d672a1b --- /dev/null +++ b/App/Components/README.md @@ -0,0 +1,2 @@ +### Components Folder +All components are stored and organized here diff --git a/App/Components/RoundedButton.js b/App/Components/RoundedButton.js new file mode 100644 index 0000000..757d446 --- /dev/null +++ b/App/Components/RoundedButton.js @@ -0,0 +1,40 @@ +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import { TouchableOpacity, Text } from 'react-native' +import styles from './Styles/RoundedButtonStyles' +import ExamplesRegistry from '../Services/ExamplesRegistry' + +// Note that this file (App/Components/RoundedButton) needs to be +// imported in your app somewhere, otherwise your component won't be +// compiled and added to the examples dev screen. + +// Ignore in coverage report +/* istanbul ignore next */ +ExamplesRegistry.addComponentExample('Rounded Button', () => + window.alert('Rounded Button Pressed!')} + /> +) + +export default class RoundedButton extends Component { + static propTypes = { + onPress: PropTypes.func, + text: PropTypes.string, + children: PropTypes.string, + navigator: PropTypes.object + } + + getText () { + const buttonText = this.props.text || this.props.children || '' + return buttonText.toUpperCase() + } + + render () { + return ( + + {this.getText()} + + ) + } +} diff --git a/App/Components/SearchBar.js b/App/Components/SearchBar.js new file mode 100644 index 0000000..e4aa7cd --- /dev/null +++ b/App/Components/SearchBar.js @@ -0,0 +1,42 @@ +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import { View, Text, TextInput, TouchableOpacity } from 'react-native' +import styles from './Styles/SearchBarStyles' +import { Colors, Metrics } from '../Themes/' +import Icon from 'react-native-vector-icons/FontAwesome' + +export default class SearchBar extends Component { + static propTypes = { + onSearch: PropTypes.func.isRequired, + onCancel: PropTypes.func.isRequired, + searchTerm: PropTypes.string + } + + render () { + const { onSearch, onCancel, searchTerm } = this.props + const onSubmitEditing = () => onSearch(searchTerm) + return ( + + + + + Cancel + + + ) + } +} diff --git a/App/Components/Styles/AlertMessageStyles.js b/App/Components/Styles/AlertMessageStyles.js new file mode 100644 index 0000000..f47a541 --- /dev/null +++ b/App/Components/Styles/AlertMessageStyles.js @@ -0,0 +1,25 @@ +import { StyleSheet } from 'react-native' +import { Colors, Metrics, Fonts } from '../../Themes/' + +export default StyleSheet.create({ + container: { + justifyContent: 'center', + marginVertical: Metrics.section + }, + contentContainer: { + alignSelf: 'center', + alignItems: 'center' + }, + message: { + marginTop: Metrics.baseMargin, + marginHorizontal: Metrics.baseMargin, + textAlign: 'center', + fontFamily: Fonts.type.base, + fontSize: Fonts.size.regular, + fontWeight: 'bold', + color: Colors.steel + }, + icon: { + color: Colors.steel + } +}) diff --git a/App/Components/Styles/DrawerButtonStyles.js b/App/Components/Styles/DrawerButtonStyles.js new file mode 100644 index 0000000..5227e84 --- /dev/null +++ b/App/Components/Styles/DrawerButtonStyles.js @@ -0,0 +1,9 @@ +import { Metrics, Colors, Fonts } from '../../Themes' + +export default { + text: { + ...Fonts.style.h5, + color: Colors.snow, + marginVertical: Metrics.baseMargin + } +} diff --git a/App/Components/Styles/FullButtonStyles.js b/App/Components/Styles/FullButtonStyles.js new file mode 100644 index 0000000..495270f --- /dev/null +++ b/App/Components/Styles/FullButtonStyles.js @@ -0,0 +1,20 @@ +import { StyleSheet } from 'react-native' +import { Fonts, Colors } from '../../Themes/' + +export default StyleSheet.create({ + button: { + marginVertical: 5, + borderTopColor: Colors.fire, + borderBottomColor: Colors.bloodOrange, + borderTopWidth: 1, + borderBottomWidth: 1, + backgroundColor: Colors.ember + }, + buttonText: { + margin: 18, + textAlign: 'center', + color: Colors.snow, + fontSize: Fonts.size.medium, + fontFamily: Fonts.type.bold + } +}) diff --git a/App/Components/Styles/README.md b/App/Components/Styles/README.md new file mode 100644 index 0000000..861f85e --- /dev/null +++ b/App/Components/Styles/README.md @@ -0,0 +1,2 @@ +### Styles Folder +Component styles are separated from functionality. diff --git a/App/Components/Styles/RoundedButtonStyles.js b/App/Components/Styles/RoundedButtonStyles.js new file mode 100644 index 0000000..88c4d3f --- /dev/null +++ b/App/Components/Styles/RoundedButtonStyles.js @@ -0,0 +1,20 @@ +import { StyleSheet } from 'react-native' +import { Fonts, Colors, Metrics } from '../../Themes/' + +export default StyleSheet.create({ + button: { + height: 45, + borderRadius: 5, + marginHorizontal: Metrics.section, + marginVertical: Metrics.baseMargin, + backgroundColor: Colors.fire, + justifyContent: 'center' + }, + buttonText: { + color: Colors.snow, + textAlign: 'center', + fontWeight: 'bold', + fontSize: Fonts.size.medium, + marginVertical: Metrics.baseMargin + } +}) diff --git a/App/Components/Styles/SearchBarStyles.js b/App/Components/Styles/SearchBarStyles.js new file mode 100644 index 0000000..9bc05f9 --- /dev/null +++ b/App/Components/Styles/SearchBarStyles.js @@ -0,0 +1,43 @@ +import {StyleSheet} from 'react-native' +import { Fonts, Colors, Metrics } from '../../Themes/' + +export default StyleSheet.create({ + container: { + flex: 1, + marginTop: Metrics.smallMargin, + backgroundColor: Colors.transparent, + flexDirection: 'row', + width: Metrics.screenWidth - Metrics.baseMargin + }, + searchInput: { + flex: 5, + height: Metrics.searchBarHeight, + alignSelf: 'center', + padding: Metrics.smallMargin, + textAlign: 'left', + fontFamily: Fonts.type.base, + fontSize: Fonts.size.instructions, + borderRadius: 5, + borderWidth: 1, + borderColor: Colors.snow, + paddingLeft: 30, + color: Colors.snow, + flexDirection: 'row' + }, + searchIcon: { + left: Metrics.doubleBaseMargin, + alignSelf: 'center', + color: Colors.snow, + backgroundColor: Colors.transparent + }, + cancelButton: { + alignItems: 'center', + justifyContent: 'center', + marginHorizontal: Metrics.baseMargin + }, + buttonLabel: { + color: Colors.snow, + fontFamily: Fonts.type.base, + fontSize: Fonts.size.regular + } +}) diff --git a/App/Config/AppConfig.js b/App/Config/AppConfig.js new file mode 100644 index 0000000..e317517 --- /dev/null +++ b/App/Config/AppConfig.js @@ -0,0 +1,8 @@ +// Simple React Native specific changes + +import '../I18n/I18n' + +export default { + // font scaling override - RN default is on + allowTextFontScaling: true +} diff --git a/App/Config/DebugConfig.js b/App/Config/DebugConfig.js new file mode 100644 index 0000000..5fcbb2b --- /dev/null +++ b/App/Config/DebugConfig.js @@ -0,0 +1,9 @@ +export default { + showDevScreens: __DEV__, + useFixtures: false, + ezLogin: false, + yellowBox: __DEV__, + reduxLogging: __DEV__, + includeExamples: __DEV__, + useReactotron: __DEV__ +} diff --git a/App/Config/README.md b/App/Config/README.md new file mode 100644 index 0000000..186f426 --- /dev/null +++ b/App/Config/README.md @@ -0,0 +1,7 @@ +### Config Folder +All application specific configuration falls in this folder. + +`AppConfig.js` - production values. +`DebugConfig.js` - development-wide globals. +`ReactotronConfig.js` - Reactotron client settings. +`ReduxPersist.js` - rehydrate Redux state. diff --git a/App/Config/ReactotronConfig.js b/App/Config/ReactotronConfig.js new file mode 100644 index 0000000..dbc88b6 --- /dev/null +++ b/App/Config/ReactotronConfig.js @@ -0,0 +1,22 @@ +import Config from '../Config/DebugConfig' +import Immutable from 'seamless-immutable' +import Reactotron from 'reactotron-react-native' +import { reactotronRedux as reduxPlugin } from 'reactotron-redux' +import sagaPlugin from 'reactotron-redux-saga' + +if (Config.useReactotron) { + // https://github.com/infinitered/reactotron for more options! + Reactotron + .configure({ name: 'Ignite App' }) + .useReactNative() + .use(reduxPlugin({ onRestore: Immutable })) + .use(sagaPlugin()) + .connect() + + // Let's clear Reactotron on every time we load the app + Reactotron.clear() + + // Totally hacky, but this allows you to not both importing reactotron-react-native + // on every file. This is just DEV mode, so no big deal. + console.tron = Reactotron +} diff --git a/App/Config/ReduxPersist.js b/App/Config/ReduxPersist.js new file mode 100644 index 0000000..f496344 --- /dev/null +++ b/App/Config/ReduxPersist.js @@ -0,0 +1,17 @@ +import immutablePersistenceTransform from '../Services/ImmutablePersistenceTransform' +import { AsyncStorage } from 'react-native' + +// More info here: https://shift.infinite.red/shipping-persistant-reducers-7341691232b1 +const REDUX_PERSIST = { + active: false, + reducerVersion: '1.0', + storeConfig: { + storage: AsyncStorage, + blacklist: ['login', 'search', 'nav'], // reducer keys that you do NOT want stored to persistence here + // whitelist: [], Optionally, just specify the keys you DO want stored to + // persistence. An empty array means 'don't store any reducers' -> infinitered/ignite#409 + transforms: [immutablePersistenceTransform] + } +} + +export default REDUX_PERSIST diff --git a/App/Config/index.js b/App/Config/index.js new file mode 100644 index 0000000..298d750 --- /dev/null +++ b/App/Config/index.js @@ -0,0 +1,12 @@ +import { Text } from 'react-native' +import DebugConfig from './DebugConfig' +import AppConfig from './AppConfig' + +// Allow/disallow font-scaling in app +Text.defaultProps.allowFontScaling = AppConfig.allowTextFontScaling + +if (__DEV__) { + // If ReactNative's yellow box warnings are too much, it is possible to turn + // it off, but the healthier approach is to fix the warnings. =) + console.disableYellowBox = !DebugConfig.yellowBox +} diff --git a/App/Containers/App.js b/App/Containers/App.js new file mode 100644 index 0000000..a123eee --- /dev/null +++ b/App/Containers/App.js @@ -0,0 +1,33 @@ +import '../Config' +import DebugConfig from '../Config/DebugConfig' +import React, { Component } from 'react' +import { Provider } from 'react-redux' +import RootContainer from './RootContainer' +import createStore from '../Redux' + +// create our store +const store = createStore() + +/** + * Provides an entry point into our application. Both index.ios.js and index.android.js + * call this component first. + * + * We create our Redux store here, put it into a provider and then bring in our + * RootContainer. + * + * We separate like this to play nice with React Native's hot reloading. + */ +class App extends Component { + render () { + return ( + + + + ) + } +} + +// allow reactotron overlay for fast design in dev mode +export default DebugConfig.useReactotron + ? console.tron.overlay(App) + : App diff --git a/App/Containers/LaunchScreen.js b/App/Containers/LaunchScreen.js new file mode 100644 index 0000000..eafedfb --- /dev/null +++ b/App/Containers/LaunchScreen.js @@ -0,0 +1,32 @@ +import React, { Component } from 'react' +import { ScrollView, Text, Image, View } from 'react-native' +import DevscreensButton from '../../ignite/DevScreens/DevscreensButton.js' + +import { Images } from '../Themes' + +// Styles +import styles from './Styles/LaunchScreenStyles' + +export default class LaunchScreen extends Component { + render () { + return ( + + + + + + + + + + + This probably isn't what your app is going to look like. Unless your designer handed you this screen and, in that case, congrats! You're ready to ship. For everyone else, this is where you'll see a live preview of your fully functioning app using Ignite. + + + + + + + ) + } +} diff --git a/App/Containers/README.md b/App/Containers/README.md new file mode 100644 index 0000000..66c3fef --- /dev/null +++ b/App/Containers/README.md @@ -0,0 +1,11 @@ +### Containers Folder +A container is what they call a "Smart Component" in Redux. It is a component +which knows about Redux. They are usually used as "Screens". + +Also located in here are 2 special containers: `App.js` and `RootContainer.js`. + +`App.js` is first component loaded after `index.ios.js` or `index.android.js`. The purpose of this file is to setup Redux or any other non-visual "global" modules. Having Redux setup here helps with the hot-reloading process in React Native during development as it won't try to reload your sagas and reducers should your colors change (for example). + +`RootContainer.js` is the first visual component in the app. It is the ancestor of all other screens and components. + +You'll probably find you'll have great mileage in Ignite apps without even touching these 2 files. They, of course, belong to you, so when you're ready to add something non-visual like Firebase or something visual like an overlay, you have spots to place these additions. diff --git a/App/Containers/RootContainer.js b/App/Containers/RootContainer.js new file mode 100644 index 0000000..b6481b0 --- /dev/null +++ b/App/Containers/RootContainer.js @@ -0,0 +1,34 @@ +import React, { Component } from 'react' +import { View, StatusBar } from 'react-native' +import ReduxNavigation from '../Navigation/ReduxNavigation' +import { connect } from 'react-redux' +import StartupActions from '../Redux/StartupRedux' +import ReduxPersist from '../Config/ReduxPersist' + +// Styles +import styles from './Styles/RootContainerStyles' + +class RootContainer extends Component { + componentDidMount () { + // if redux persist is not active fire startup action + if (!ReduxPersist.active) { + this.props.startup() + } + } + + render () { + return ( + + + + + ) + } +} + +// wraps dispatch to create nicer functions to call within our component +const mapDispatchToProps = (dispatch) => ({ + startup: () => dispatch(StartupActions.startup()) +}) + +export default connect(null, mapDispatchToProps)(RootContainer) diff --git a/App/Containers/Styles/LaunchScreenStyles.js b/App/Containers/Styles/LaunchScreenStyles.js new file mode 100644 index 0000000..c8aff02 --- /dev/null +++ b/App/Containers/Styles/LaunchScreenStyles.js @@ -0,0 +1,18 @@ +import { StyleSheet } from 'react-native' +import { Metrics, ApplicationStyles } from '../../Themes/' + +export default StyleSheet.create({ + ...ApplicationStyles.screen, + container: { + paddingBottom: Metrics.baseMargin + }, + logo: { + marginTop: Metrics.doubleSection, + height: Metrics.images.logo, + width: Metrics.images.logo, + resizeMode: 'contain' + }, + centered: { + alignItems: 'center' + } +}) diff --git a/App/Containers/Styles/README.md b/App/Containers/Styles/README.md new file mode 100644 index 0000000..576b9a5 --- /dev/null +++ b/App/Containers/Styles/README.md @@ -0,0 +1,2 @@ +### Styles Folder +Container styles are separated from functionality. diff --git a/App/Containers/Styles/RootContainerStyles.js b/App/Containers/Styles/RootContainerStyles.js new file mode 100644 index 0000000..53bc176 --- /dev/null +++ b/App/Containers/Styles/RootContainerStyles.js @@ -0,0 +1,24 @@ +import {StyleSheet} from 'react-native' +import {Fonts, Metrics, Colors} from '../../Themes/' + +export default StyleSheet.create({ + applicationView: { + flex: 1 + }, + container: { + flex: 1, + justifyContent: 'center', + backgroundColor: Colors.background + }, + welcome: { + fontSize: 20, + textAlign: 'center', + fontFamily: Fonts.type.base, + margin: Metrics.baseMargin + }, + myImage: { + width: 200, + height: 200, + alignSelf: 'center' + } +}) diff --git a/App/Fixtures/README.md b/App/Fixtures/README.md new file mode 100644 index 0000000..77ca148 --- /dev/null +++ b/App/Fixtures/README.md @@ -0,0 +1,7 @@ +### Fixtures folder +All key API responses are housed here. + +These API responses can be used for several reasons. _E.G._: +* To bypass logins when building any screen of the application +* To quickly test API parsing in unit tests +* To separate Network from Data concerns while coding diff --git a/App/Fixtures/gantman.json b/App/Fixtures/gantman.json new file mode 100644 index 0000000..317fd4b --- /dev/null +++ b/App/Fixtures/gantman.json @@ -0,0 +1,146 @@ +{ + "total_count": 7, + "incomplete_results": false, + "items": [ + { + "login": "GantMan", + "id": 997157, + "avatar_url": "https://avatars.githubusercontent.com/u/997157?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/GantMan", + "html_url": "https://github.com/GantMan", + "followers_url": "https://api.github.com/users/GantMan/followers", + "following_url": "https://api.github.com/users/GantMan/following{/other_user}", + "gists_url": "https://api.github.com/users/GantMan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/GantMan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/GantMan/subscriptions", + "organizations_url": "https://api.github.com/users/GantMan/orgs", + "repos_url": "https://api.github.com/users/GantMan/repos", + "events_url": "https://api.github.com/users/GantMan/events{/privacy}", + "received_events_url": "https://api.github.com/users/GantMan/received_events", + "type": "User", + "site_admin": false, + "score": 122.12115 + }, + { + "login": "vlad-G", + "id": 13520880, + "avatar_url": "https://avatars.githubusercontent.com/u/13520880?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/vlad-G", + "html_url": "https://github.com/vlad-G", + "followers_url": "https://api.github.com/users/vlad-G/followers", + "following_url": "https://api.github.com/users/vlad-G/following{/other_user}", + "gists_url": "https://api.github.com/users/vlad-G/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vlad-G/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vlad-G/subscriptions", + "organizations_url": "https://api.github.com/users/vlad-G/orgs", + "repos_url": "https://api.github.com/users/vlad-G/repos", + "events_url": "https://api.github.com/users/vlad-G/events{/privacy}", + "received_events_url": "https://api.github.com/users/vlad-G/received_events", + "type": "User", + "site_admin": false, + "score": 12.69848 + }, + { + "login": "gantmani", + "id": 3034094, + "avatar_url": "https://avatars.githubusercontent.com/u/3034094?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gantmani", + "html_url": "https://github.com/gantmani", + "followers_url": "https://api.github.com/users/gantmani/followers", + "following_url": "https://api.github.com/users/gantmani/following{/other_user}", + "gists_url": "https://api.github.com/users/gantmani/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gantmani/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gantmani/subscriptions", + "organizations_url": "https://api.github.com/users/gantmani/orgs", + "repos_url": "https://api.github.com/users/gantmani/repos", + "events_url": "https://api.github.com/users/gantmani/events{/privacy}", + "received_events_url": "https://api.github.com/users/gantmani/received_events", + "type": "User", + "site_admin": false, + "score": 11.641713 + }, + { + "login": "sgantman", + "id": 5911526, + "avatar_url": "https://avatars.githubusercontent.com/u/5911526?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sgantman", + "html_url": "https://github.com/sgantman", + "followers_url": "https://api.github.com/users/sgantman/followers", + "following_url": "https://api.github.com/users/sgantman/following{/other_user}", + "gists_url": "https://api.github.com/users/sgantman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sgantman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sgantman/subscriptions", + "organizations_url": "https://api.github.com/users/sgantman/orgs", + "repos_url": "https://api.github.com/users/sgantman/repos", + "events_url": "https://api.github.com/users/sgantman/events{/privacy}", + "received_events_url": "https://api.github.com/users/sgantman/received_events", + "type": "User", + "site_admin": false, + "score": 7.926345 + }, + { + "login": "michaelgantman", + "id": 16693070, + "avatar_url": "https://avatars.githubusercontent.com/u/16693070?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/michaelgantman", + "html_url": "https://github.com/michaelgantman", + "followers_url": "https://api.github.com/users/michaelgantman/followers", + "following_url": "https://api.github.com/users/michaelgantman/following{/other_user}", + "gists_url": "https://api.github.com/users/michaelgantman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/michaelgantman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/michaelgantman/subscriptions", + "organizations_url": "https://api.github.com/users/michaelgantman/orgs", + "repos_url": "https://api.github.com/users/michaelgantman/repos", + "events_url": "https://api.github.com/users/michaelgantman/events{/privacy}", + "received_events_url": "https://api.github.com/users/michaelgantman/received_events", + "type": "User", + "site_admin": false, + "score": 7.926345 + }, + { + "login": "gantmanis", + "id": 19141249, + "avatar_url": "https://avatars.githubusercontent.com/u/19141249?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gantmanis", + "html_url": "https://github.com/gantmanis", + "followers_url": "https://api.github.com/users/gantmanis/followers", + "following_url": "https://api.github.com/users/gantmanis/following{/other_user}", + "gists_url": "https://api.github.com/users/gantmanis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gantmanis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gantmanis/subscriptions", + "organizations_url": "https://api.github.com/users/gantmanis/orgs", + "repos_url": "https://api.github.com/users/gantmanis/repos", + "events_url": "https://api.github.com/users/gantmanis/events{/privacy}", + "received_events_url": "https://api.github.com/users/gantmanis/received_events", + "type": "User", + "site_admin": false, + "score": 7.8813524 + }, + { + "login": "Gantman2014", + "id": 7669410, + "avatar_url": "https://avatars.githubusercontent.com/u/7669410?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Gantman2014", + "html_url": "https://github.com/Gantman2014", + "followers_url": "https://api.github.com/users/Gantman2014/followers", + "following_url": "https://api.github.com/users/Gantman2014/following{/other_user}", + "gists_url": "https://api.github.com/users/Gantman2014/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Gantman2014/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Gantman2014/subscriptions", + "organizations_url": "https://api.github.com/users/Gantman2014/orgs", + "repos_url": "https://api.github.com/users/Gantman2014/repos", + "events_url": "https://api.github.com/users/Gantman2014/events{/privacy}", + "received_events_url": "https://api.github.com/users/Gantman2014/received_events", + "type": "User", + "site_admin": false, + "score": 7.8813524 + } + ] +} \ No newline at end of file diff --git a/App/Fixtures/rateLimit.json b/App/Fixtures/rateLimit.json new file mode 100644 index 0000000..cb66095 --- /dev/null +++ b/App/Fixtures/rateLimit.json @@ -0,0 +1,19 @@ +{ + "resources": { + "core": { + "limit": 60, + "remaining": 42, + "reset": 1488126913 + }, + "search": { + "limit": 10, + "remaining": 9, + "reset": 1488126003 + } + }, + "rate": { + "limit": 60, + "remaining": 42, + "reset": 1488126913 + } +} \ No newline at end of file diff --git a/App/Fixtures/root.json b/App/Fixtures/root.json new file mode 100644 index 0000000..43e3b72 --- /dev/null +++ b/App/Fixtures/root.json @@ -0,0 +1,33 @@ +{ + "current_user_url": "https://api.github.com/user", + "current_user_authorizations_html_url": "https://github.com/settings/connections/applications{/client_id}", + "authorizations_url": "https://api.github.com/authorizations", + "code_search_url": "https://api.github.com/search/code?q={query}{&page,per_page,sort,order}", + "commit_search_url": "https://api.github.com/search/commits?q={query}{&page,per_page,sort,order}", + "emails_url": "https://api.github.com/user/emails", + "emojis_url": "https://api.github.com/emojis", + "events_url": "https://api.github.com/events", + "feeds_url": "https://api.github.com/feeds", + "followers_url": "https://api.github.com/user/followers", + "following_url": "https://api.github.com/user/following{/target}", + "gists_url": "https://api.github.com/gists{/gist_id}", + "hub_url": "https://api.github.com/hub", + "issue_search_url": "https://api.github.com/search/issues?q={query}{&page,per_page,sort,order}", + "issues_url": "https://api.github.com/issues", + "keys_url": "https://api.github.com/user/keys", + "notifications_url": "https://api.github.com/notifications", + "organization_repositories_url": "https://api.github.com/orgs/{org}/repos{?type,page,per_page,sort}", + "organization_url": "https://api.github.com/orgs/{org}", + "public_gists_url": "https://api.github.com/gists/public", + "rate_limit_url": "https://api.github.com/rate_limit", + "repository_url": "https://api.github.com/repos/{owner}/{repo}", + "repository_search_url": "https://api.github.com/search/repositories?q={query}{&page,per_page,sort,order}", + "current_user_repositories_url": "https://api.github.com/user/repos{?type,page,per_page,sort}", + "starred_url": "https://api.github.com/user/starred{/owner}{/repo}", + "starred_gists_url": "https://api.github.com/gists/starred", + "team_url": "https://api.github.com/teams", + "user_url": "https://api.github.com/users/{user}", + "user_organizations_url": "https://api.github.com/user/orgs", + "user_repositories_url": "https://api.github.com/users/{user}/repos{?type,page,per_page,sort}", + "user_search_url": "https://api.github.com/search/users?q={query}{&page,per_page,sort,order}" +} \ No newline at end of file diff --git a/App/Fixtures/skellock.json b/App/Fixtures/skellock.json new file mode 100644 index 0000000..c8915c3 --- /dev/null +++ b/App/Fixtures/skellock.json @@ -0,0 +1,26 @@ +{ + "total_count": 1, + "incomplete_results": false, + "items": [ + { + "login": "skellock", + "id": 68273, + "avatar_url": "https://avatars.githubusercontent.com/u/68273?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/skellock", + "html_url": "https://github.com/skellock", + "followers_url": "https://api.github.com/users/skellock/followers", + "following_url": "https://api.github.com/users/skellock/following{/other_user}", + "gists_url": "https://api.github.com/users/skellock/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skellock/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skellock/subscriptions", + "organizations_url": "https://api.github.com/users/skellock/orgs", + "repos_url": "https://api.github.com/users/skellock/repos", + "events_url": "https://api.github.com/users/skellock/events{/privacy}", + "received_events_url": "https://api.github.com/users/skellock/received_events", + "type": "User", + "site_admin": false, + "score": 107.22611 + } + ] +} \ No newline at end of file diff --git a/App/I18n/I18n.js b/App/I18n/I18n.js new file mode 100644 index 0000000..4cc6ddc --- /dev/null +++ b/App/I18n/I18n.js @@ -0,0 +1,151 @@ +// @flow + +import I18n from 'react-native-i18n' + +// Enable fallbacks if you want `en-US` and `en-GB` to fallback to `en` +I18n.fallbacks = true + +// English language is the main language for fall back: +I18n.translations = { + en: require('./languages/english.json') +} + +let languageCode = I18n.locale.substr(0, 2) + +// All other translations for the app goes to the respective language file: +switch (languageCode) { + case 'af': + I18n.translations.af = require('./languages/af.json') + break + case 'am': + I18n.translations.am = require('./languages/am.json') + break + case 'ar': + I18n.translations.ar = require('./languages/ar.json') + break + case 'bg': + I18n.translations.bg = require('./languages/bg.json') + break + case 'ca': + I18n.translations.ca = require('./languages/ca.json') + break + case 'cs': + I18n.translations.cs = require('./languages/cs.json') + break + case 'da': + I18n.translations.da = require('./languages/da.json') + break + case 'de': + I18n.translations.de = require('./languages/de.json') + break + case 'el': + I18n.translations.el = require('./languages/el.json') + break + case 'es': + I18n.translations.es = require('./languages/es.json') + break + case 'et': + I18n.translations.et = require('./languages/et.json') + break + case 'fi': + let addCode = I18n.locale.substr(0, 3) + if (addCode === 'fil') { + I18n.translations.fil = require('./languages/fil.json') + } else { + I18n.translations.fi = require('./languages/fi.json') + } + break + case 'fr': + I18n.translations.fr = require('./languages/fr.json') + break + case 'he': + I18n.translations.he = require('./languages/he.json') + break + case 'hi': + I18n.translations.hi = require('./languages/hi.json') + break + case 'hr': + I18n.translations.hr = require('./languages/hr.json') + break + case 'hu': + I18n.translations.hu = require('./languages/hu.json') + break + case 'in': + I18n.translations.in = require('./languages/id.json') + break + case 'id': + I18n.translations.id = require('./languages/id.json') + break + case 'it': + I18n.translations.it = require('./languages/it.json') + break + case 'ja': + I18n.translations.ja = require('./languages/ja.json') + break + case 'ko': + I18n.translations.ko = require('./languages/ko.json') + break + case 'lt': + I18n.translations.lt = require('./languages/lt.json') + break + case 'lv': + I18n.translations.lv = require('./languages/lv.json') + break + case 'ms': + I18n.translations.ms = require('./languages/ms.json') + break + case 'nb': + I18n.translations.nb = require('./languages/nb.json') + break + case 'nl': + I18n.translations.nl = require('./languages/nl.json') + break + case 'no': + I18n.translations.no = require('./languages/no.json') + break + case 'pl': + I18n.translations.pl = require('./languages/pl.json') + break + case 'pt': + I18n.translations.pt = require('./languages/pt.json') + break + case 'ro': + I18n.translations.ro = require('./languages/ro.json') + break + case 'ru': + I18n.translations.ru = require('./languages/ru.json') + break + case 'sl': + I18n.translations.sl = require('./languages/sl.json') + break + case 'sk': + I18n.translations.sk = require('./languages/sk.json') + break + case 'sr': + I18n.translations.sr = require('./languages/sr.json') + break + case 'sv': + I18n.translations.sv = require('./languages/sv.json') + break + case 'sw': + I18n.translations.sw = require('./languages/sw.json') + break + case 'th': + I18n.translations.th = require('./languages/th.json') + break + case 'tr': + I18n.translations.tr = require('./languages/tr.json') + break + case 'uk': + I18n.translations.uk = require('./languages/uk.json') + break + case 'vi': + I18n.translations.vi = require('./languages/vi.json') + break + case 'zh': + I18n.translations.zh = require('./languages/zh.json') + break + case 'zu': + I18n.translations.zu = require('./languages/zu.json') + break +} diff --git a/App/I18n/README.md b/App/I18n/README.md new file mode 100644 index 0000000..c0d0adf --- /dev/null +++ b/App/I18n/README.md @@ -0,0 +1,23 @@ +# Idea + +Shipping app with localization for all available languages. The main idea here is to minimize the memory required of other languages that is not used by the platform. + +For example if the phone is localized in French, then this will only load the French and English translations into memory and ignore the 30+ other languages available. + +English translation is set as default fallback in case some translations are not available in the chosen language. + +# Installation + +Run `ignite add i18n`. + +# Usage + +TODO: Real usage example. + + import I18n from 'react-native-i18n'; + + render() { + ... + { I18n.t('welcome') } + ... + } diff --git a/App/I18n/languages/af.json b/App/I18n/languages/af.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/af.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/am.json b/App/I18n/languages/am.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/am.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/ar.json b/App/I18n/languages/ar.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/ar.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/bg.json b/App/I18n/languages/bg.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/bg.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/ca.json b/App/I18n/languages/ca.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/ca.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/cs.json b/App/I18n/languages/cs.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/cs.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/da.json b/App/I18n/languages/da.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/da.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/de.json b/App/I18n/languages/de.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/de.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/el.json b/App/I18n/languages/el.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/el.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/english.json b/App/I18n/languages/english.json new file mode 100644 index 0000000..ee41d6d --- /dev/null +++ b/App/I18n/languages/english.json @@ -0,0 +1,26 @@ +{ + "signIn": "Sign In", + "logOut": "Log Out", + "loginLogoutExampleTitle": "Login/Logout Redux + Sagas Example", + "progressiveImageComponent": "Progressive Image Component", + "api": "API", + "locale": "I18n Locale", + "rnVectorIcons": "RN Vector Icons", + "loginWithFacebook": "Login with Facebook", + "rni18n": "RN i18n", + "igniteGenerated": "Ignite Generate Screens", + "forgotPassword": "Forgot Password", + "username": "Username", + "password": "Password", + "cancel": "Cancel", + "welcome": "Welcome", + "login": "Login", + "tempIndicator": "F", + "componentExamples": "Component Examples", + "usageExamples": "Usage Examples", + "apiTesting": "API Testing", + "themeSettings": "Theme Settings", + "deviceDetails": "Device Details", + "noItems": "No Items", + "search": "Search" +} diff --git a/App/I18n/languages/es.json b/App/I18n/languages/es.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/es.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/et.json b/App/I18n/languages/et.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/et.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/fi.json b/App/I18n/languages/fi.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/fi.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/fil.json b/App/I18n/languages/fil.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/fil.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/fr.json b/App/I18n/languages/fr.json new file mode 100644 index 0000000..97e3876 --- /dev/null +++ b/App/I18n/languages/fr.json @@ -0,0 +1,25 @@ +{ + "signIn": "Se connecter", + "logOut": "Se déconnecter", + "loginLogoutExampleTitle": "Connexion / Déconnexion Redux + Sagas Exemple", + "progressiveImageComponent": "Composant Image Progressive", + "api": "Mon Dieu! Une API pour vous!", + "locale": "I18n Paramètres régionaux", + "rnVectorIcons": "RN icônes vectorielles", + "loginWithFacebook": "Se connecter avec Facebook", + "rni18n": "RN i18n", + "igniteGenerated": "Ignite Générer des Écrans", + "forgotPassword": "Mot de passe oublié", + "username": "Nom d'utilisateur", + "password": "Mot de passe", + "cancel": "Annuler", + "welcome": "Bienvenue", + "login": "S'identifier", + "tempIndicator": "C", + "componentExamples": "Exemples de Composants", + "usageExamples": "Exemples d'utilisation", + "apiTesting": "API Testing", + "themeSettings": "Réglage des thèmes", + "deviceDetails": "Détails du périphérique", + "noItems": "Aucun" +} diff --git a/App/I18n/languages/he.json b/App/I18n/languages/he.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/he.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/hi.json b/App/I18n/languages/hi.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/hi.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/hr.json b/App/I18n/languages/hr.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/hr.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/hu.json b/App/I18n/languages/hu.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/hu.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/id.json b/App/I18n/languages/id.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/id.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/it.json b/App/I18n/languages/it.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/it.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/ja.json b/App/I18n/languages/ja.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/ja.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/ko.json b/App/I18n/languages/ko.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/ko.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/lt.json b/App/I18n/languages/lt.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/lt.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/lv.json b/App/I18n/languages/lv.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/lv.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/ms.json b/App/I18n/languages/ms.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/ms.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/nb.json b/App/I18n/languages/nb.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/nb.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/nl.json b/App/I18n/languages/nl.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/nl.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/no.json b/App/I18n/languages/no.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/no.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/pl.json b/App/I18n/languages/pl.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/pl.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/pt.json b/App/I18n/languages/pt.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/pt.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/ro.json b/App/I18n/languages/ro.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/ro.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/ru.json b/App/I18n/languages/ru.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/ru.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/sk.json b/App/I18n/languages/sk.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/sk.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/sl.json b/App/I18n/languages/sl.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/sl.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/sr.json b/App/I18n/languages/sr.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/sr.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/sv.json b/App/I18n/languages/sv.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/sv.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/sw.json b/App/I18n/languages/sw.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/sw.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/th.json b/App/I18n/languages/th.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/th.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/tr.json b/App/I18n/languages/tr.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/tr.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/uk.json b/App/I18n/languages/uk.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/uk.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/vi.json b/App/I18n/languages/vi.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/vi.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/zh.json b/App/I18n/languages/zh.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/zh.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/languages/zu.json b/App/I18n/languages/zu.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/App/I18n/languages/zu.json @@ -0,0 +1 @@ +{} diff --git a/App/I18n/platform_languages.txt b/App/I18n/platform_languages.txt new file mode 100644 index 0000000..4b54ce3 --- /dev/null +++ b/App/I18n/platform_languages.txt @@ -0,0 +1,54 @@ +Android: iOS: +-------------- ------------- +Afrikaans af +Amharic am + Arabic ar +Bulgarian bg +Catalan ca Catalan ca +Chinese (Hong Kong) zh-HK Chinese (Hong Kong) zh-HK +Chinese (PRC) zh-CN Chinese (Simplified) zh-Hans +Chinese (Taiwan) zh-TW Chinese (Traditional) zh-Hant +Croatian hr Croatian hr +Czech cs Czech cs +Danish da Danish da +Dutch nl Dutch nl +English (US) en-US English en +English (AU) en-AU English (Australian) en-AU +English (UK) en-GB English (British) en-GB + English (Canadian) en-CA + English (Indian) en-IN +Estonian et +Filipino fil +Finnish fi Finnish fi +French (Canada) fr-CA French (Canadian) fr-CA +French (France) fr-FR French fr +German de German de +Greek el Greek el + Hebrew he +Hindi hi Hindi hi +Hungarian hu Hungarian hu +Indonesian id / in Indonesian id +Italian it Italian it +Japanese ja Japanese ja +Korean ko Korean ko +Latvian lv Malay ms +Lithuanian lt +Malay ms +Norwegian no + Norwegian (Bokmal) nb +Polish pl Polish pl +Portuguese (Brazil) pt-BR Portuguese (Brazil) pt-BR +Portuguese (Portugal) pt-PT Portuguese pt +Romanian ro Romanian ro +Russian ru Russian ru +Serbian sr +Slovak sk Slovak sk +Slovenian sl +Spanish (Latin America) es-419 Spanish (Mexico) es-M +Spanish (Spain) es-ES Spanish es +Swahili sw +Swedish sv Swedish sv +Thai th Thai th +Turkish tr Turkish tr +Ukrainian uk Ukrainian uk +Zulu zu Vietnamese vi diff --git a/App/Images/BG.png b/App/Images/BG.png new file mode 100644 index 0000000..393ae63 Binary files /dev/null and b/App/Images/BG.png differ diff --git a/App/Images/Icons/back-button@2x.png b/App/Images/Icons/back-button@2x.png new file mode 100644 index 0000000..6255e5b Binary files /dev/null and b/App/Images/Icons/back-button@2x.png differ diff --git a/App/Images/Icons/chevron-right@2x.png b/App/Images/Icons/chevron-right@2x.png new file mode 100644 index 0000000..2ca020f Binary files /dev/null and b/App/Images/Icons/chevron-right@2x.png differ diff --git a/App/Images/Icons/close-button.png b/App/Images/Icons/close-button.png new file mode 100644 index 0000000..af1b1ba Binary files /dev/null and b/App/Images/Icons/close-button.png differ diff --git a/App/Images/Icons/close-button@2x.png b/App/Images/Icons/close-button@2x.png new file mode 100644 index 0000000..0a044cf Binary files /dev/null and b/App/Images/Icons/close-button@2x.png differ diff --git a/App/Images/Icons/close-button@3x.png b/App/Images/Icons/close-button@3x.png new file mode 100644 index 0000000..4d4cd30 Binary files /dev/null and b/App/Images/Icons/close-button@3x.png differ diff --git a/App/Images/Icons/faq-icon.png b/App/Images/Icons/faq-icon.png new file mode 100644 index 0000000..6d1cf2d Binary files /dev/null and b/App/Images/Icons/faq-icon.png differ diff --git a/App/Images/Icons/faq-icon@2x.png b/App/Images/Icons/faq-icon@2x.png new file mode 100644 index 0000000..851c6e7 Binary files /dev/null and b/App/Images/Icons/faq-icon@2x.png differ diff --git a/App/Images/Icons/faq-icon@3x.png b/App/Images/Icons/faq-icon@3x.png new file mode 100644 index 0000000..0f9909e Binary files /dev/null and b/App/Images/Icons/faq-icon@3x.png differ diff --git a/App/Images/Icons/hamburger@2x.png b/App/Images/Icons/hamburger@2x.png new file mode 100644 index 0000000..e10854d Binary files /dev/null and b/App/Images/Icons/hamburger@2x.png differ diff --git a/App/Images/Icons/icon-api-testing@2x.png b/App/Images/Icons/icon-api-testing@2x.png new file mode 100644 index 0000000..9a04c2b Binary files /dev/null and b/App/Images/Icons/icon-api-testing@2x.png differ diff --git a/App/Images/Icons/icon-components@2x.png b/App/Images/Icons/icon-components@2x.png new file mode 100644 index 0000000..2ad61fc Binary files /dev/null and b/App/Images/Icons/icon-components@2x.png differ diff --git a/App/Images/Icons/icon-device-information@2x.png b/App/Images/Icons/icon-device-information@2x.png new file mode 100644 index 0000000..01e3899 Binary files /dev/null and b/App/Images/Icons/icon-device-information@2x.png differ diff --git a/App/Images/Icons/icon-home@2x.png b/App/Images/Icons/icon-home@2x.png new file mode 100644 index 0000000..17afa70 Binary files /dev/null and b/App/Images/Icons/icon-home@2x.png differ diff --git a/App/Images/Icons/icon-theme@2x.png b/App/Images/Icons/icon-theme@2x.png new file mode 100644 index 0000000..d5e1b2e Binary files /dev/null and b/App/Images/Icons/icon-theme@2x.png differ diff --git a/App/Images/Icons/icon-usage-examples@2x.png b/App/Images/Icons/icon-usage-examples@2x.png new file mode 100644 index 0000000..90d2c70 Binary files /dev/null and b/App/Images/Icons/icon-usage-examples@2x.png differ diff --git a/App/Images/README.md b/App/Images/README.md new file mode 100644 index 0000000..c58a79a --- /dev/null +++ b/App/Images/README.md @@ -0,0 +1,2 @@ +### Images folder +Holds all images for the applications. \ No newline at end of file diff --git a/App/Images/button-bg@2x.png b/App/Images/button-bg@2x.png new file mode 100644 index 0000000..4f52715 Binary files /dev/null and b/App/Images/button-bg@2x.png differ diff --git a/App/Images/ignite-logo-transparent.png b/App/Images/ignite-logo-transparent.png new file mode 100644 index 0000000..123ce39 Binary files /dev/null and b/App/Images/ignite-logo-transparent.png differ diff --git a/App/Images/ignite_logo.png b/App/Images/ignite_logo.png new file mode 100644 index 0000000..759f572 Binary files /dev/null and b/App/Images/ignite_logo.png differ diff --git a/App/Images/ir.png b/App/Images/ir.png new file mode 100644 index 0000000..3655284 Binary files /dev/null and b/App/Images/ir.png differ diff --git a/App/Images/launch-icon.png b/App/Images/launch-icon.png new file mode 100644 index 0000000..bf35f33 Binary files /dev/null and b/App/Images/launch-icon.png differ diff --git a/App/Images/launch-icon@2x.png b/App/Images/launch-icon@2x.png new file mode 100644 index 0000000..6922a38 Binary files /dev/null and b/App/Images/launch-icon@2x.png differ diff --git a/App/Images/launch-icon@3x.png b/App/Images/launch-icon@3x.png new file mode 100644 index 0000000..3d8d198 Binary files /dev/null and b/App/Images/launch-icon@3x.png differ diff --git a/App/Images/tile_bg.png b/App/Images/tile_bg.png new file mode 100644 index 0000000..bd95676 Binary files /dev/null and b/App/Images/tile_bg.png differ diff --git a/App/Images/top_logo.png b/App/Images/top_logo.png new file mode 100644 index 0000000..666d6c7 Binary files /dev/null and b/App/Images/top_logo.png differ diff --git a/App/Images/top_logo@2x.png b/App/Images/top_logo@2x.png new file mode 100644 index 0000000..7944c8f Binary files /dev/null and b/App/Images/top_logo@2x.png differ diff --git a/App/Images/top_logo@3x.png b/App/Images/top_logo@3x.png new file mode 100644 index 0000000..a016e25 Binary files /dev/null and b/App/Images/top_logo@3x.png differ diff --git a/App/Images/your-app.png b/App/Images/your-app.png new file mode 100644 index 0000000..f30c0fa Binary files /dev/null and b/App/Images/your-app.png differ diff --git a/App/Images/your-app@2x.png b/App/Images/your-app@2x.png new file mode 100644 index 0000000..00242c8 Binary files /dev/null and b/App/Images/your-app@2x.png differ diff --git a/App/Images/your-app@3x.png b/App/Images/your-app@3x.png new file mode 100644 index 0000000..5ae8acd Binary files /dev/null and b/App/Images/your-app@3x.png differ diff --git a/App/Lib/README.md b/App/Lib/README.md new file mode 100644 index 0000000..e84b039 --- /dev/null +++ b/App/Lib/README.md @@ -0,0 +1,5 @@ +# Lib + +At first glance, this could appear to be a "miscellaneous" folder, but we recommend that you treat this as proving ground for components that could be reusable outside your project. + +Maybe you're writing a set of utilities that you could use outside your project, but they're not quite ready or battle tested. This folder would be a great place to put them. They ideally be pure functions have no dependencies on other things in your App folder. diff --git a/App/Navigation/AppNavigation.js b/App/Navigation/AppNavigation.js new file mode 100644 index 0000000..7ee551e --- /dev/null +++ b/App/Navigation/AppNavigation.js @@ -0,0 +1,18 @@ +import { StackNavigator } from 'react-navigation' +import LaunchScreen from '../Containers/LaunchScreen' + +import styles from './Styles/NavigationStyles' + +// Manifest of possible screens +const PrimaryNav = StackNavigator({ + LaunchScreen: { screen: LaunchScreen } +}, { + // Default config for all screens + headerMode: 'none', + initialRouteName: 'LaunchScreen', + navigationOptions: { + headerStyle: styles.header + } +}) + +export default PrimaryNav diff --git a/App/Navigation/ReduxNavigation.js b/App/Navigation/ReduxNavigation.js new file mode 100644 index 0000000..0692f53 --- /dev/null +++ b/App/Navigation/ReduxNavigation.js @@ -0,0 +1,18 @@ +import React from 'react' +import * as ReactNavigation from 'react-navigation' +import { connect } from 'react-redux' +import AppNavigation from './AppNavigation' + +// here is our redux-aware our smart component +function ReduxNavigation (props) { + const { dispatch, nav } = props + const navigation = ReactNavigation.addNavigationHelpers({ + dispatch, + state: nav + }) + + return +} + +const mapStateToProps = state => ({ nav: state.nav }) +export default connect(mapStateToProps)(ReduxNavigation) diff --git a/App/Navigation/Styles/NavigationStyles.js b/App/Navigation/Styles/NavigationStyles.js new file mode 100644 index 0000000..e338485 --- /dev/null +++ b/App/Navigation/Styles/NavigationStyles.js @@ -0,0 +1,8 @@ +import { StyleSheet } from 'react-native' +import { Colors } from '../../Themes/' + +export default StyleSheet.create({ + header: { + backgroundColor: Colors.backgroundColor + } +}) diff --git a/App/Redux/CreateStore.js b/App/Redux/CreateStore.js new file mode 100644 index 0000000..fc1a7db --- /dev/null +++ b/App/Redux/CreateStore.js @@ -0,0 +1,49 @@ +import { createStore, applyMiddleware, compose } from 'redux' +import { autoRehydrate } from 'redux-persist' +import Config from '../Config/DebugConfig' +import createSagaMiddleware from 'redux-saga' +import RehydrationServices from '../Services/RehydrationServices' +import ReduxPersist from '../Config/ReduxPersist' +import ScreenTracking from './ScreenTrackingMiddleware' + +// creates the store +export default (rootReducer, rootSaga) => { + /* ------------- Redux Configuration ------------- */ + + const middleware = [] + const enhancers = [] + + /* ------------- Analytics Middleware ------------- */ + middleware.push(ScreenTracking) + + /* ------------- Saga Middleware ------------- */ + + const sagaMonitor = Config.useReactotron ? console.tron.createSagaMonitor() : null + const sagaMiddleware = createSagaMiddleware({ sagaMonitor }) + middleware.push(sagaMiddleware) + + /* ------------- Assemble Middleware ------------- */ + + enhancers.push(applyMiddleware(...middleware)) + + /* ------------- AutoRehydrate Enhancer ------------- */ + + // add the autoRehydrate enhancer + if (ReduxPersist.active) { + enhancers.push(autoRehydrate()) + } + + // if Reactotron is enabled (default for __DEV__), we'll create the store through Reactotron + const createAppropriateStore = Config.useReactotron ? console.tron.createStore : createStore + const store = createAppropriateStore(rootReducer, compose(...enhancers)) + + // configure persistStore and check reducer version number + if (ReduxPersist.active) { + RehydrationServices.updateReducers(store) + } + + // kick off root saga + sagaMiddleware.run(rootSaga) + + return store +} diff --git a/App/Redux/GithubRedux.js b/App/Redux/GithubRedux.js new file mode 100644 index 0000000..78ae4ca --- /dev/null +++ b/App/Redux/GithubRedux.js @@ -0,0 +1,46 @@ +import { createReducer, createActions } from 'reduxsauce' +import Immutable from 'seamless-immutable' + +/* ------------- Types and Action Creators ------------- */ + +const { Types, Creators } = createActions({ + userRequest: ['username'], + userSuccess: ['avatar'], + userFailure: null +}) + +export const GithubTypes = Types +export default Creators + +/* ------------- Initial State ------------- */ + +export const INITIAL_STATE = Immutable({ + avatar: null, + fetching: null, + error: null, + username: null +}) + +/* ------------- Reducers ------------- */ + +// request the avatar for a user +export const request = (state, { username }) => + state.merge({ fetching: true, username, avatar: null }) + +// successful avatar lookup +export const success = (state, action) => { + const { avatar } = action + return state.merge({ fetching: false, error: null, avatar }) +} + +// failed to get the avatar +export const failure = (state) => + state.merge({ fetching: false, error: true, avatar: null }) + +/* ------------- Hookup Reducers To Types ------------- */ + +export const reducer = createReducer(INITIAL_STATE, { + [Types.USER_REQUEST]: request, + [Types.USER_SUCCESS]: success, + [Types.USER_FAILURE]: failure +}) diff --git a/App/Redux/NavigationRedux.js b/App/Redux/NavigationRedux.js new file mode 100644 index 0000000..604b650 --- /dev/null +++ b/App/Redux/NavigationRedux.js @@ -0,0 +1,6 @@ +import AppNavigation from '../Navigation/AppNavigation' + +export const reducer = (state, action) => { + const newState = AppNavigation.router.getStateForAction(action, state) + return newState || state +} diff --git a/App/Redux/ScreenTrackingMiddleware.js b/App/Redux/ScreenTrackingMiddleware.js new file mode 100644 index 0000000..b4524dd --- /dev/null +++ b/App/Redux/ScreenTrackingMiddleware.js @@ -0,0 +1,38 @@ +import { NavigationActions } from 'react-navigation' + +// gets the current screen from navigation state +const getCurrentRouteName = (navigationState) => { + if (!navigationState) { + return null + } + const route = navigationState.routes[navigationState.index] + // dive into nested navigators + if (route.routes) { + return getCurrentRouteName(route) + } + return route.routeName +} + +const screenTracking = ({ getState }) => next => (action) => { + if ( + action.type !== NavigationActions.NAVIGATE && + action.type !== NavigationActions.BACK + ) { + return next(action) + } + + const currentScreen = getCurrentRouteName(getState().nav) + const result = next(action) + const nextScreen = getCurrentRouteName(getState().nav) + if (nextScreen !== currentScreen) { + try { + console.tron.log(`NAVIGATING ${currentScreen} to ${nextScreen}`) + // Example: Analytics.trackEvent('user_navigation', {currentScreen, nextScreen}) + } catch (e) { + console.tron.log(e) + } + } + return result +} + +export default screenTracking diff --git a/App/Redux/SearchRedux.js b/App/Redux/SearchRedux.js new file mode 100644 index 0000000..9b6afc9 --- /dev/null +++ b/App/Redux/SearchRedux.js @@ -0,0 +1,50 @@ +import { createReducer, createActions } from 'reduxsauce' +import Immutable from 'seamless-immutable' +import { filter } from 'ramda' +import { startsWith } from 'ramdasauce' + +const LIST_DATA = ['sausage', 'blubber', 'pencil', 'cloud', 'moon', 'water', 'computer', 'school', + 'network', 'hammer', 'walking', 'violently', 'mediocre', 'literature', 'chair', 'two', 'window', + 'cords', 'musical', 'zebra', 'xylophone', 'penguin', 'home', 'dog', 'final', 'ink', 'teacher', 'fun', + 'website', 'banana', 'uncle', 'softly', 'mega', 'ten', 'awesome', 'attatch', 'blue', 'internet', 'bottle', + 'tight', 'zone', 'tomato', 'prison', 'hydro', 'cleaning', 'telivision', 'send', 'frog', 'cup', 'book', + 'zooming', 'falling', 'evily', 'gamer', 'lid', 'juice', 'moniter', 'captain', 'bonding', 'loudly', 'thudding', + 'guitar', 'shaving', 'hair', 'soccer', 'water', 'racket', 'table', 'late', 'media', 'desktop', 'flipper', + 'club', 'flying', 'smooth', 'monster', 'purple', 'guardian', 'bold', 'hyperlink', 'presentation', 'world', 'national', + 'comment', 'element', 'magic', 'lion', 'sand', 'crust', 'toast', 'jam', 'hunter', 'forest', 'foraging', + 'silently', 'tawesomated', 'joshing', 'pong', 'RANDOM', 'WORD' +] + +/* ------------- Types and Action Creators ------------- */ + +const { Types, Creators } = createActions({ + search: ['searchTerm'], + cancelSearch: null +}) + +export const TemperatureTypes = Types +export default Creators + +/* ------------- Initial State ------------- */ + +export const INITIAL_STATE = Immutable({ + searchTerm: '', + searching: false, + results: LIST_DATA +}) + +/* ------------- Reducers ------------- */ + +export const performSearch = (state, { searchTerm }) => { + const results = filter(startsWith(searchTerm), LIST_DATA) + return state.merge({ searching: true, searchTerm, results }) +} + +export const cancelSearch = (state) => INITIAL_STATE + +/* ------------- Hookup Reducers To Types ------------- */ + +export const reducer = createReducer(INITIAL_STATE, { + [Types.SEARCH]: performSearch, + [Types.CANCEL_SEARCH]: cancelSearch +}) diff --git a/App/Redux/StartupRedux.js b/App/Redux/StartupRedux.js new file mode 100644 index 0000000..7c2ebe9 --- /dev/null +++ b/App/Redux/StartupRedux.js @@ -0,0 +1,10 @@ +import { createActions } from 'reduxsauce' + +/* ------------- Types and Action Creators ------------- */ + +const { Types, Creators } = createActions({ + startup: null +}) + +export const StartupTypes = Types +export default Creators diff --git a/App/Redux/index.js b/App/Redux/index.js new file mode 100644 index 0000000..01efe8f --- /dev/null +++ b/App/Redux/index.js @@ -0,0 +1,14 @@ +import { combineReducers } from 'redux' +import configureStore from './CreateStore' +import rootSaga from '../Sagas/' + +export default () => { + /* ------------- Assemble The Reducers ------------- */ + const rootReducer = combineReducers({ + nav: require('./NavigationRedux').reducer, + github: require('./GithubRedux').reducer, + search: require('./SearchRedux').reducer + }) + + return configureStore(rootReducer, rootSaga) +} diff --git a/App/Sagas/GithubSagas.js b/App/Sagas/GithubSagas.js new file mode 100644 index 0000000..2b562c3 --- /dev/null +++ b/App/Sagas/GithubSagas.js @@ -0,0 +1,18 @@ +import { call, put } from 'redux-saga/effects' +import { path } from 'ramda' +import GithubActions from '../Redux/GithubRedux' + +export function * getUserAvatar (api, action) { + const { username } = action + // make the call to the api + const response = yield call(api.getUser, username) + + if (response.ok) { + const firstUser = path(['data', 'items'], response)[0] + const avatar = firstUser.avatar_url + // do data conversion here if needed + yield put(GithubActions.userSuccess(avatar)) + } else { + yield put(GithubActions.userFailure()) + } +} diff --git a/App/Sagas/StartupSagas.js b/App/Sagas/StartupSagas.js new file mode 100644 index 0000000..8cc37ae --- /dev/null +++ b/App/Sagas/StartupSagas.js @@ -0,0 +1,40 @@ +import { put, select } from 'redux-saga/effects' +import GithubActions from '../Redux/GithubRedux' +import { is } from 'ramda' + +// exported to make available for tests +export const selectAvatar = (state) => state.github.avatar + +// process STARTUP actions +export function * startup (action) { + if (__DEV__ && console.tron) { + // straight-up string logging + console.tron.log('Hello, I\'m an example of how to log via Reactotron.') + + // logging an object for better clarity + console.tron.log({ + message: 'pass objects for better logging', + someGeneratorFunction: selectAvatar + }) + + // fully customized! + const subObject = { a: 1, b: [1, 2, 3], c: true } + subObject.circularDependency = subObject // osnap! + console.tron.display({ + name: '🔥 IGNITE 🔥', + preview: 'You should totally expand this', + value: { + '💃': 'Welcome to the future!', + subObject, + someInlineFunction: () => true, + someGeneratorFunction: startup, + someNormalFunction: selectAvatar + } + }) + } + const avatar = yield select(selectAvatar) + // only get if we don't have it yet + if (!is(String, avatar)) { + yield put(GithubActions.userRequest('GantMan')) + } +} diff --git a/App/Sagas/index.js b/App/Sagas/index.js new file mode 100644 index 0000000..18a9fd1 --- /dev/null +++ b/App/Sagas/index.js @@ -0,0 +1,32 @@ +import { takeLatest } from 'redux-saga/effects' +import API from '../Services/Api' +import FixtureAPI from '../Services/FixtureApi' +import DebugConfig from '../Config/DebugConfig' + +/* ------------- Types ------------- */ + +import { StartupTypes } from '../Redux/StartupRedux' +import { GithubTypes } from '../Redux/GithubRedux' + +/* ------------- Sagas ------------- */ + +import { startup } from './StartupSagas' +import { getUserAvatar } from './GithubSagas' + +/* ------------- API ------------- */ + +// The API we use is only used from Sagas, so we create it here and pass along +// to the sagas which need it. +const api = DebugConfig.useFixtures ? FixtureAPI : API.create() + +/* ------------- Connect Types To Sagas ------------- */ + +export default function * root () { + yield [ + // some sagas only receive an action + takeLatest(StartupTypes.STARTUP, startup), + + // some sagas receive extra parameters in addition to an action + takeLatest(GithubTypes.USER_REQUEST, getUserAvatar, api) + ] +} diff --git a/App/Services/Api.js b/App/Services/Api.js new file mode 100644 index 0000000..fab9a49 --- /dev/null +++ b/App/Services/Api.js @@ -0,0 +1,64 @@ +// a library to wrap and simplify api calls +import apisauce from 'apisauce' + +// our "constructor" +const create = (baseURL = 'https://api.github.com/') => { + // ------ + // STEP 1 + // ------ + // + // Create and configure an apisauce-based api object. + // + const api = apisauce.create({ + // base URL is read from the "constructor" + baseURL, + // here are some default headers + headers: { + 'Cache-Control': 'no-cache' + }, + // 10 second timeout... + timeout: 10000 + }) + + // ------ + // STEP 2 + // ------ + // + // Define some functions that call the api. The goal is to provide + // a thin wrapper of the api layer providing nicer feeling functions + // rather than "get", "post" and friends. + // + // I generally don't like wrapping the output at this level because + // sometimes specific actions need to be take on `403` or `401`, etc. + // + // Since we can't hide from that, we embrace it by getting out of the + // way at this level. + // + const getRoot = () => api.get('') + const getRate = () => api.get('rate_limit') + const getUser = (username) => api.get('search/users', {q: username}) + + // ------ + // STEP 3 + // ------ + // + // Return back a collection of functions that we would consider our + // interface. Most of the time it'll be just the list of all the + // methods in step 2. + // + // Notice we're not returning back the `api` created in step 1? That's + // because it is scoped privately. This is one way to create truly + // private scoped goodies in JavaScript. + // + return { + // a list of the API functions from step 2 + getRoot, + getRate, + getUser + } +} + +// let's return back our create method as the default. +export default { + create +} diff --git a/App/Services/ExamplesRegistry.js b/App/Services/ExamplesRegistry.js new file mode 100644 index 0000000..ab26016 --- /dev/null +++ b/App/Services/ExamplesRegistry.js @@ -0,0 +1,45 @@ +import React from 'react' +import { Text, View } from 'react-native' +import R from 'ramda' +import { ApplicationStyles } from '../Themes' +import DebugConfig from '../Config/DebugConfig' +let globalComponentExamplesRegistry = [] +let globalPluginExamplesRegistry = [] + +export const addComponentExample = (title, usage = () => {}) => { if (DebugConfig.includeExamples) globalComponentExamplesRegistry.push({title, usage}) } // eslint-disable-line + +export const addPluginExample = (title, usage = () => {}) => { if (DebugConfig.includeExamples) globalPluginExamplesRegistry.push({title, usage}) } // eslint-disable-line + +const renderComponentExample = (example) => { + return ( + + + {example.title} + + {example.usage.call()} + + ) +} + +const renderPluginExample = (example) => { + return ( + + + {example.title} + + {example.usage.call()} + + ) +} + +export const renderComponentExamples = () => R.map(renderComponentExample, globalComponentExamplesRegistry) + +export const renderPluginExamples = () => R.map(renderPluginExample, globalPluginExamplesRegistry) + +// Default for readability +export default { + renderComponentExamples, + addComponentExample, + renderPluginExamples, + addPluginExample +} diff --git a/App/Services/FixtureApi.js b/App/Services/FixtureApi.js new file mode 100644 index 0000000..82f1675 --- /dev/null +++ b/App/Services/FixtureApi.js @@ -0,0 +1,24 @@ +export default { + // Functions return fixtures + getRoot: () => { + return { + ok: true, + data: require('../Fixtures/root.json') + } + }, + getRate: () => { + return { + ok: true, + data: require('../Fixtures/rateLimit.json') + } + }, + getUser: (username) => { + // This fixture only supports gantman or else returns skellock + const gantmanData = require('../Fixtures/gantman.json') + const skellockData = require('../Fixtures/skellock.json') + return { + ok: true, + data: username.toLowerCase() === 'gantman' ? gantmanData : skellockData + } + } +} diff --git a/App/Services/ImmutablePersistenceTransform.js b/App/Services/ImmutablePersistenceTransform.js new file mode 100644 index 0000000..a90de4c --- /dev/null +++ b/App/Services/ImmutablePersistenceTransform.js @@ -0,0 +1,26 @@ +import R from 'ramda' +import Immutable from 'seamless-immutable' + +// is this object already Immutable? +const isImmutable = R.has('asMutable') + +// change this Immutable object into a JS object +const convertToJs = (state) => state.asMutable({deep: true}) + +// optionally convert this object into a JS object if it is Immutable +const fromImmutable = R.when(isImmutable, convertToJs) + +// convert this JS object into an Immutable object +const toImmutable = (raw) => Immutable(raw) + +// the transform interface that redux-persist is expecting +export default { + out: (state) => { + // console.log({ retrieving: state }) + return toImmutable(state) + }, + in: (raw) => { + // console.log({ storing: raw }) + return fromImmutable(raw) + } +} diff --git a/App/Services/RehydrationServices.js b/App/Services/RehydrationServices.js new file mode 100644 index 0000000..db2698d --- /dev/null +++ b/App/Services/RehydrationServices.js @@ -0,0 +1,38 @@ +import ReduxPersist from '../Config/ReduxPersist' +import { AsyncStorage } from 'react-native' +import { persistStore } from 'redux-persist' +import StartupActions from '../Redux/StartupRedux' +import DebugConfig from '../Config/DebugConfig' + +const updateReducers = (store: Object) => { + const reducerVersion = ReduxPersist.reducerVersion + const config = ReduxPersist.storeConfig + const startup = () => store.dispatch(StartupActions.startup()) + + // Check to ensure latest reducer version + AsyncStorage.getItem('reducerVersion').then((localVersion) => { + if (localVersion !== reducerVersion) { + if (DebugConfig.useReactotron) { + console.tron.display({ + name: 'PURGE', + value: { + 'Old Version:': localVersion, + 'New Version:': reducerVersion + }, + preview: 'Reducer Version Change Detected', + important: true + }) + } + // Purge store + persistStore(store, config, startup).purge() + AsyncStorage.setItem('reducerVersion', reducerVersion) + } else { + persistStore(store, config, startup) + } + }).catch(() => { + persistStore(store, config, startup) + AsyncStorage.setItem('reducerVersion', reducerVersion) + }) +} + +export default {updateReducers} diff --git a/App/Themes/ApplicationStyles.js b/App/Themes/ApplicationStyles.js new file mode 100644 index 0000000..176e214 --- /dev/null +++ b/App/Themes/ApplicationStyles.js @@ -0,0 +1,80 @@ +import Fonts from './Fonts' +import Metrics from './Metrics' +import Colors from './Colors' + +// This file is for a reusable grouping of Theme items. +// Similar to an XML fragment layout in Android + +const ApplicationStyles = { + screen: { + mainContainer: { + flex: 1, + backgroundColor: Colors.transparent + }, + backgroundImage: { + position: 'absolute', + top: 0, + left: 0, + bottom: 0, + right: 0 + }, + container: { + flex: 1, + paddingTop: Metrics.baseMargin, + backgroundColor: Colors.transparent + }, + section: { + margin: Metrics.section, + padding: Metrics.baseMargin + }, + sectionText: { + ...Fonts.style.normal, + paddingVertical: Metrics.doubleBaseMargin, + color: Colors.snow, + marginVertical: Metrics.smallMargin, + textAlign: 'center' + }, + subtitle: { + color: Colors.snow, + padding: Metrics.smallMargin, + marginBottom: Metrics.smallMargin, + marginHorizontal: Metrics.smallMargin + }, + titleText: { + ...Fonts.style.h2, + fontSize: 14, + color: Colors.text + } + }, + darkLabelContainer: { + padding: Metrics.smallMargin, + paddingBottom: Metrics.doubleBaseMargin, + borderBottomColor: Colors.border, + borderBottomWidth: 1, + marginBottom: Metrics.baseMargin + }, + darkLabel: { + fontFamily: Fonts.type.bold, + color: Colors.snow + }, + groupContainer: { + margin: Metrics.smallMargin, + flexDirection: 'row', + justifyContent: 'space-around', + alignItems: 'center' + }, + sectionTitle: { + ...Fonts.style.h4, + color: Colors.coal, + backgroundColor: Colors.ricePaper, + padding: Metrics.smallMargin, + marginTop: Metrics.smallMargin, + marginHorizontal: Metrics.baseMargin, + borderWidth: 1, + borderColor: Colors.ember, + alignItems: 'center', + textAlign: 'center' + } +} + +export default ApplicationStyles diff --git a/App/Themes/Colors.js b/App/Themes/Colors.js new file mode 100644 index 0000000..017caba --- /dev/null +++ b/App/Themes/Colors.js @@ -0,0 +1,27 @@ +const colors = { + background: '#1F0808', + clear: 'rgba(0,0,0,0)', + facebook: '#3b5998', + transparent: 'rgba(0,0,0,0)', + silver: '#F7F7F7', + steel: '#CCCCCC', + error: 'rgba(200, 0, 0, 0.8)', + ricePaper: 'rgba(255,255,255, 0.75)', + frost: '#D8D8D8', + cloud: 'rgba(200,200,200, 0.35)', + windowTint: 'rgba(0, 0, 0, 0.4)', + panther: '#161616', + charcoal: '#595959', + coal: '#2d2d2d', + bloodOrange: '#fb5f26', + snow: 'white', + ember: 'rgba(164, 0, 48, 0.5)', + fire: '#e73536', + drawer: 'rgba(30, 30, 29, 0.95)', + eggplant: '#251a34', + border: '#483F53', + banner: '#5F3E63', + text: '#E0D7E5' +} + +export default colors diff --git a/App/Themes/Fonts.js b/App/Themes/Fonts.js new file mode 100644 index 0000000..6d4e70b --- /dev/null +++ b/App/Themes/Fonts.js @@ -0,0 +1,60 @@ +const type = { + base: 'Avenir-Book', + bold: 'Avenir-Black', + emphasis: 'HelveticaNeue-Italic' +} + +const size = { + h1: 38, + h2: 34, + h3: 30, + h4: 26, + h5: 20, + h6: 19, + input: 18, + regular: 17, + medium: 14, + small: 12, + tiny: 8.5 +} + +const style = { + h1: { + fontFamily: type.base, + fontSize: size.h1 + }, + h2: { + fontWeight: 'bold', + fontSize: size.h2 + }, + h3: { + fontFamily: type.emphasis, + fontSize: size.h3 + }, + h4: { + fontFamily: type.base, + fontSize: size.h4 + }, + h5: { + fontFamily: type.base, + fontSize: size.h5 + }, + h6: { + fontFamily: type.emphasis, + fontSize: size.h6 + }, + normal: { + fontFamily: type.base, + fontSize: size.regular + }, + description: { + fontFamily: type.base, + fontSize: size.medium + } +} + +export default { + type, + size, + style +} diff --git a/App/Themes/Images.js b/App/Themes/Images.js new file mode 100644 index 0000000..83026e7 --- /dev/null +++ b/App/Themes/Images.js @@ -0,0 +1,25 @@ +// leave off @2x/@3x +const images = { + logo: require('../Images/ir.png'), + clearLogo: require('../Images/top_logo.png'), + launch: require('../Images/launch-icon.png'), + ready: require('../Images/your-app.png'), + ignite: require('../Images/ignite_logo.png'), + igniteClear: require('../Images/ignite-logo-transparent.png'), + tileBg: require('../Images/tile_bg.png'), + background: require('../Images/BG.png'), + buttonBackground: require('../Images/button-bg.png'), + api: require('../Images/Icons/icon-api-testing.png'), + components: require('../Images/Icons/icon-components.png'), + deviceInfo: require('../Images/Icons/icon-device-information.png'), + faq: require('../Images/Icons/faq-icon.png'), + home: require('../Images/Icons/icon-home.png'), + theme: require('../Images/Icons/icon-theme.png'), + usageExamples: require('../Images/Icons/icon-usage-examples.png'), + chevronRight: require('../Images/Icons/chevron-right.png'), + hamburger: require('../Images/Icons/hamburger.png'), + backButton: require('../Images/Icons/back-button.png'), + closeButton: require('../Images/Icons/close-button.png') +} + +export default images diff --git a/App/Themes/Metrics.js b/App/Themes/Metrics.js new file mode 100644 index 0000000..889eb41 --- /dev/null +++ b/App/Themes/Metrics.js @@ -0,0 +1,35 @@ +import {Dimensions, Platform} from 'react-native' + +const { width, height } = Dimensions.get('window') + +// Used via Metrics.baseMargin +const metrics = { + marginHorizontal: 10, + marginVertical: 10, + section: 25, + baseMargin: 10, + doubleBaseMargin: 20, + smallMargin: 5, + doubleSection: 50, + horizontalLineHeight: 1, + searchBarHeight: 30, + screenWidth: width < height ? width : height, + screenHeight: width < height ? height : width, + navBarHeight: (Platform.OS === 'ios') ? 64 : 54, + buttonRadius: 4, + icons: { + tiny: 15, + small: 20, + medium: 30, + large: 45, + xl: 50 + }, + images: { + small: 20, + medium: 40, + large: 60, + logo: 200 + } +} + +export default metrics diff --git a/App/Themes/README.md b/App/Themes/README.md new file mode 100644 index 0000000..99dccd5 --- /dev/null +++ b/App/Themes/README.md @@ -0,0 +1,8 @@ +### Themes Folder +Application specific themes +* Base Styles +* Fonts +* Metrics +* Colors + +etc. diff --git a/App/Themes/index.js b/App/Themes/index.js new file mode 100644 index 0000000..e29e527 --- /dev/null +++ b/App/Themes/index.js @@ -0,0 +1,7 @@ +import Colors from './Colors' +import Fonts from './Fonts' +import Metrics from './Metrics' +import Images from './Images' +import ApplicationStyles from './ApplicationStyles' + +export { Colors, Fonts, Images, Metrics, ApplicationStyles } diff --git a/App/Transforms/ConvertFromKelvin.js b/App/Transforms/ConvertFromKelvin.js new file mode 100644 index 0000000..7f1f033 --- /dev/null +++ b/App/Transforms/ConvertFromKelvin.js @@ -0,0 +1,6 @@ +export default (kelvin: number) => { + const celsius = kelvin - 273.15 + const fahrenheit = (celsius * 1.8000) + 32 + + return Math.round(fahrenheit) +} diff --git a/App/Transforms/README.md b/App/Transforms/README.md new file mode 100644 index 0000000..9adeef2 --- /dev/null +++ b/App/Transforms/README.md @@ -0,0 +1,14 @@ +# Transforms + +A common pattern when working with APIs is to change data to play nice between your app & the API. + +We've found this to be the case in every project we've worked on. So much so that we're recommending that you create a folder dedicated to these transformations. + +Transforms are not necessarily a bad thing (although an API might have you transforming more than you'd like). + +For example, you may: + +* turn appropriate strings to date objects +* convert snake case to camel case +* normalize or denormalize things +* create lookup tables diff --git a/README.md b/README.md new file mode 100644 index 0000000..e014cd7 --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# SmartUniApp +[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](http://standardjs.com/) + +* Standard compliant React Native App Utilizing [Ignite](https://github.com/infinitered/ignite) + +## :arrow_up: How to Setup + +**Step 1:** git clone this repo: + +**Step 2:** cd to the cloned repo: + +**Step 3:** Install the Application with `yarn` or `npm i` + + +## :arrow_forward: How to Run App + +1. cd to the repo +2. Run Build for either OS + * for iOS + * run `react-native run-ios` + * for Android + * Run Genymotion + * run `react-native run-android` + +## :no_entry_sign: Standard Compliant + +[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) +This project adheres to Standard. Our CI enforces this, so we suggest you enable linting to keep your project compliant during development. + +**To Lint on Commit** + +This is implemented using [husky](https://github.com/typicode/husky). There is no additional setup needed. + +**Bypass Lint** + +If you have to bypass lint for a special commit that you will come back and clean (pushing something to a branch etc.) then you can bypass git hooks with adding `--no-verify` to your commit command. + +**Understanding Linting Errors** + +The linting rules are from JS Standard and React-Standard. [Regular JS errors can be found with descriptions here](http://eslint.org/docs/rules/), while [React errors and descriptions can be found here](https://github.com/yannickcr/eslint-plugin-react). + +## :closed_lock_with_key: Secrets + +This project uses [react-native-config](https://github.com/luggit/react-native-config) to expose config variables to your javascript code in React Native. You can store API keys +and other sensitive information in a `.env` file: + +``` +API_URL=https://myapi.com +GOOGLE_MAPS_API_KEY=abcdefgh +``` + +and access them from React Native like so: + +``` +import Secrets from 'react-native-config' + +Secrets.API_URL // 'https://myapi.com' +Secrets.GOOGLE_MAPS_API_KEY // 'abcdefgh' +``` + +The `.env` file is ignored by git keeping those secrets out of your repo. + diff --git a/Tests/Components/AlertMessageTest.js b/Tests/Components/AlertMessageTest.js new file mode 100644 index 0000000..df49672 --- /dev/null +++ b/Tests/Components/AlertMessageTest.js @@ -0,0 +1,19 @@ +import 'react-native' +import React from 'react' +import AlertMessage from '../../App/Components/AlertMessage' +import renderer from 'react-test-renderer' + +test('AlertMessage component renders correctly if show is true', () => { + const tree = renderer.create().toJSON() + expect(tree).toMatchSnapshot() +}) + +test('AlertMessage component does not render if show is false', () => { + const tree = renderer.create().toJSON() + expect(tree).toMatchSnapshot() +}) + +test('AlertMessage component renders correctly if backgroundColor prop is set', () => { + const tree = renderer.create().toJSON() + expect(tree).toMatchSnapshot() +}) diff --git a/Tests/Components/DrawerButtonTest.js b/Tests/Components/DrawerButtonTest.js new file mode 100644 index 0000000..02ccad3 --- /dev/null +++ b/Tests/Components/DrawerButtonTest.js @@ -0,0 +1,21 @@ +import 'react-native' +import React from 'react' +import DrawerButton from '../../App/Components/DrawerButton' +import { shallow } from 'enzyme' +import renderer from 'react-test-renderer' + +test('AlertMessage component renders correctly', () => { + const tree = renderer.create( {}} text='hi' />).toJSON() + expect(tree).toMatchSnapshot() +}) + +test('onPress', () => { + let i = 0 + const onPress = () => i++ + const wrapperPress = shallow() + + expect(wrapperPress.prop('onPress')).toBe(onPress) // uses the right handler + expect(i).toBe(0) + wrapperPress.simulate('press') + expect(i).toBe(1) +}) diff --git a/Tests/Components/FullButtonTest.js b/Tests/Components/FullButtonTest.js new file mode 100644 index 0000000..7696e20 --- /dev/null +++ b/Tests/Components/FullButtonTest.js @@ -0,0 +1,21 @@ +import 'react-native' +import React from 'react' +import FullButton from '../../App/Components/FullButton' +import { shallow } from 'enzyme' +import renderer from 'react-test-renderer' + +test('FullButton component renders correctly', () => { + const tree = renderer.create( {}} text='hi' />).toJSON() + expect(tree).toMatchSnapshot() +}) + +test('onPress', () => { + let i = 0 // i guess i could have used sinon here too... less is more i guess + const onPress = () => i++ + const wrapperPress = shallow() + + expect(wrapperPress.prop('onPress')).toBe(onPress) // uses the right handler + expect(i).toBe(0) + wrapperPress.simulate('press') + expect(i).toBe(1) +}) diff --git a/Tests/Components/RoundedButtonTest.js b/Tests/Components/RoundedButtonTest.js new file mode 100644 index 0000000..c48027c --- /dev/null +++ b/Tests/Components/RoundedButtonTest.js @@ -0,0 +1,26 @@ +import 'react-native' +import React from 'react' +import RoundedButton from '../../App/Components/RoundedButton' +import { shallow } from 'enzyme' +import renderer from 'react-test-renderer' + +test('RoundedButton component renders correctly', () => { + const tree = renderer.create( {}} text='howdy' />).toJSON() + expect(tree).toMatchSnapshot() +}) + +test('RoundedButton component with children renders correctly', () => { + const tree = renderer.create( {}}>Howdy).toJSON() + expect(tree).toMatchSnapshot() +}) + +test('onPress', () => { + let i = 0 // i guess i could have used sinon here too... less is more i guess + const onPress = () => i++ + const wrapperPress = shallow() + + expect(wrapperPress.prop('onPress')).toBe(onPress) // uses the right handler + expect(i).toBe(0) + wrapperPress.simulate('press') + expect(i).toBe(1) +}) diff --git a/Tests/Redux/GithubReduxTest.js b/Tests/Redux/GithubReduxTest.js new file mode 100644 index 0000000..4f3f13d --- /dev/null +++ b/Tests/Redux/GithubReduxTest.js @@ -0,0 +1,27 @@ +import Actions, { reducer, INITIAL_STATE } from '../../App/Redux/GithubRedux' + +test('request', () => { + const username = 'taco' + const state = reducer(INITIAL_STATE, Actions.userRequest(username)) + + expect(state.fetching).toBe(true) + expect(state.username).toBe(username) + expect(state.avatar).toBeNull() +}) + +test('success', () => { + const avatar = 'http://placekitten.com/200/300' + const state = reducer(INITIAL_STATE, Actions.userSuccess(avatar)) + + expect(state.fetching).toBe(false) + expect(state.avatar).toBe(avatar) + expect(state.error).toBeNull() +}) + +test('failure', () => { + const state = reducer(INITIAL_STATE, Actions.userFailure()) + + expect(state.fetching).toBe(false) + expect(state.error).toBe(true) + expect(state.avatar).toBeNull() +}) diff --git a/Tests/Sagas/GithubSagaTest.js b/Tests/Sagas/GithubSagaTest.js new file mode 100644 index 0000000..2c3bd2b --- /dev/null +++ b/Tests/Sagas/GithubSagaTest.js @@ -0,0 +1,35 @@ +import FixtureAPI from '../../App/Services/FixtureApi' +import { put, call } from 'redux-saga/effects' +import { getUserAvatar } from '../../App/Sagas/GithubSagas' +import GithubActions from '../../App/Redux/GithubRedux' +import { path } from 'ramda' + +const stepper = (fn) => (mock) => fn.next(mock).value + +test('first calls API', () => { + const step = stepper(getUserAvatar(FixtureAPI, {username: 'taco'})) + // first yield is API + expect(step()).toEqual(call(FixtureAPI.getUser, 'taco')) +}) + +test('success path', () => { + const response = FixtureAPI.getUser('taco') + const step = stepper(getUserAvatar(FixtureAPI, {username: 'taco'})) + // first step API + step() + // Second step successful return + const stepResponse = step(response) + // Get the avatar Url from the response + const firstUser = path(['data', 'items'], response)[0] + const avatar = firstUser.avatar_url + expect(stepResponse).toEqual(put(GithubActions.userSuccess(avatar))) +}) + +test('failure path', () => { + const response = {ok: false} + const step = stepper(getUserAvatar(FixtureAPI, {username: 'taco'})) + // first step API + step() + // Second step failed response + expect(step(response)).toEqual(put(GithubActions.userFailure())) +}) diff --git a/Tests/Sagas/StartupSagaTest.js b/Tests/Sagas/StartupSagaTest.js new file mode 100644 index 0000000..9393f90 --- /dev/null +++ b/Tests/Sagas/StartupSagaTest.js @@ -0,0 +1,12 @@ +import { select, put } from 'redux-saga/effects' +import { selectAvatar, startup } from '../../App/Sagas/StartupSagas' +import GithubActions from '../../App/Redux/GithubRedux' + +const stepper = (fn) => (mock) => fn.next(mock).value + +test('watches for the right action', () => { + const step = stepper(startup()) + GithubActions.userRequest('GantMan') + expect(step()).toEqual(select(selectAvatar)) + expect(step()).toEqual(put(GithubActions.userRequest('GantMan'))) +}) diff --git a/Tests/Services/FixtureAPITest.js b/Tests/Services/FixtureAPITest.js new file mode 100644 index 0000000..9b489e7 --- /dev/null +++ b/Tests/Services/FixtureAPITest.js @@ -0,0 +1,40 @@ +import API from '../../App/Services/Api' +import FixtureAPI from '../../App/Services/FixtureApi' +import R from 'ramda' + +test('All fixtures map to actual API', () => { + const fixtureKeys = R.keys(FixtureAPI).sort() + const apiKeys = R.keys(API.create()) + + const intersection = R.intersection(fixtureKeys, apiKeys).sort() + + // There is no difference between the intersection and all fixtures + expect(R.equals(fixtureKeys, intersection)).toBe(true) +}) + +test('FixtureAPI getRate returns the right file', () => { + const expectedFile = require('../../App/Fixtures/rateLimit.json') + + expect(FixtureAPI.getRate()).toEqual({ + ok: true, + data: expectedFile + }) +}) + +test('FixtureAPI getUser returns the right file for gantman', () => { + const expectedFile = require('../../App/Fixtures/gantman.json') + + expect(FixtureAPI.getUser('GantMan')).toEqual({ + ok: true, + data: expectedFile + }) +}) + +test('FixtureAPI getUser returns the right file for skellock as default', () => { + const expectedFile = require('../../App/Fixtures/skellock.json') + + expect(FixtureAPI.getUser('Whatever')).toEqual({ + ok: true, + data: expectedFile + }) +}) diff --git a/Tests/Setup.js b/Tests/Setup.js new file mode 100644 index 0000000..27883ec --- /dev/null +++ b/Tests/Setup.js @@ -0,0 +1,23 @@ +jest +.mock('react-native-device-info', () => { + return { isTablet: jest.fn(() => { return false }) } +}) +.mock('react-native-i18n', () => { + const english = require('../App/I18n/languages/english.json') + const keys = require('ramda') + const replace = require('ramda') + const forEach = require('ramda') + + return { + t: (key, replacements) => { + let value = english[key] + if (!value) return key + if (!replacements) return value + + forEach((r) => { + value = replace(`{{${r}}}`, replacements[r], value) + }, keys(replacements)) + return value + } + } +}) diff --git a/android/app/BUCK b/android/app/BUCK new file mode 100644 index 0000000..869c389 --- /dev/null +++ b/android/app/BUCK @@ -0,0 +1,65 @@ +# To learn about Buck see [Docs](https://buckbuild.com/). +# To run your application with Buck: +# - install Buck +# - `npm start` - to start the packager +# - `cd android` +# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` +# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck +# - `buck install -r android/app` - compile, install and run application +# + +lib_deps = [] + +for jarfile in glob(['libs/*.jar']): + name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')] + lib_deps.append(':' + name) + prebuilt_jar( + name = name, + binary_jar = jarfile, + ) + +for aarfile in glob(['libs/*.aar']): + name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')] + lib_deps.append(':' + name) + android_prebuilt_aar( + name = name, + aar = aarfile, + ) + +android_library( + name = "all-libs", + exported_deps = lib_deps, +) + +android_library( + name = "app-code", + srcs = glob([ + "src/main/java/**/*.java", + ]), + deps = [ + ":all-libs", + ":build_config", + ":res", + ], +) + +android_build_config( + name = "build_config", + package = "com.smartuniapp", +) + +android_resource( + name = "res", + package = "com.smartuniapp", + res = "src/main/res", +) + +android_binary( + name = "app", + keystore = "//android/keystores:debug", + manifest = "src/main/AndroidManifest.xml", + package_type = "debug", + deps = [ + ":app-code", + ], +) diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..1bc521d --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,149 @@ +apply plugin: "com.android.application" + +import com.android.build.OutputFile + +/** + * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets + * and bundleReleaseJsAndAssets). + * These basically call `react-native bundle` with the correct arguments during the Android build + * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the + * bundle directly from the development server. Below you can see all the possible configurations + * and their defaults. If you decide to add a configuration block, make sure to add it before the + * `apply from: "../../node_modules/react-native/react.gradle"` line. + * + * project.ext.react = [ + * // the name of the generated asset file containing your JS bundle + * bundleAssetName: "index.android.bundle", + * + * // the entry file for bundle generation + * entryFile: "index.android.js", + * + * // whether to bundle JS and assets in debug mode + * bundleInDebug: false, + * + * // whether to bundle JS and assets in release mode + * bundleInRelease: true, + * + * // whether to bundle JS and assets in another build variant (if configured). + * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants + * // The configuration property can be in the following formats + * // 'bundleIn${productFlavor}${buildType}' + * // 'bundleIn${buildType}' + * // bundleInFreeDebug: true, + * // bundleInPaidRelease: true, + * // bundleInBeta: true, + * + * // whether to disable dev mode in custom build variants (by default only disabled in release) + * // for example: to disable dev mode in the staging build type (if configured) + * devDisabledInStaging: true, + * // The configuration property can be in the following formats + * // 'devDisabledIn${productFlavor}${buildType}' + * // 'devDisabledIn${buildType}' + * + * // the root of your project, i.e. where "package.json" lives + * root: "../../", + * + * // where to put the JS bundle asset in debug mode + * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", + * + * // where to put the JS bundle asset in release mode + * jsBundleDirRelease: "$buildDir/intermediates/assets/release", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in debug mode + * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in release mode + * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", + * + * // by default the gradle tasks are skipped if none of the JS files or assets change; this means + * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to + * // date; if you have any other folders that you want to ignore for performance reasons (gradle + * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ + * // for example, you might want to remove it from here. + * inputExcludes: ["android/**", "ios/**"], + * + * // override which node gets called and with what additional arguments + * nodeExecutableAndArgs: ["node"], + * + * // supply additional arguments to the packager + * extraPackagerArgs: [] + * ] + */ + +apply from: "../../node_modules/react-native/react.gradle" + +/** + * Set this to true to create two separate APKs instead of one: + * - An APK that only works on ARM devices + * - An APK that only works on x86 devices + * The advantage is the size of the APK is reduced by about 4MB. + * Upload all the APKs to the Play Store and people will download + * the correct one based on the CPU architecture of their device. + */ +def enableSeparateBuildPerCPUArchitecture = false + +/** + * Run Proguard to shrink the Java bytecode in release builds. + */ +def enableProguardInReleaseBuilds = false + +android { + compileSdkVersion 23 + buildToolsVersion "23.0.1" + + defaultConfig { + applicationId "com.smartuniapp" + minSdkVersion 16 + targetSdkVersion 22 + versionCode 1 + versionName "1.0" + ndk { + abiFilters "armeabi-v7a", "x86" + } + } + splits { + abi { + reset() + enable enableSeparateBuildPerCPUArchitecture + universalApk false // If true, also generate a universal APK + include "armeabi-v7a", "x86" + } + } + buildTypes { + release { + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + } + } + // applicationVariants are e.g. debug, release + applicationVariants.all { variant -> + variant.outputs.each { output -> + // For each separate APK per architecture, set a unique version code as described here: + // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits + def versionCodes = ["armeabi-v7a":1, "x86":2] + def abi = output.getFilter(OutputFile.ABI) + if (abi != null) { // null for the universal-debug, universal-release variants + output.versionCodeOverride = + versionCodes.get(abi) * 1048576 + defaultConfig.versionCode + } + } + } +} + +dependencies { + compile project(':react-native-i18n') + compile project(':react-native-vector-icons') + compile project(':react-native-device-info') + compile fileTree(dir: "libs", include: ["*.jar"]) + compile "com.android.support:appcompat-v7:23.0.1" + compile "com.facebook.react:react-native:+" // From node_modules +} + +// Run this once to be able to run the application with BUCK +// puts all compile dependencies into folder libs for BUCK to use +task copyDownloadableDepsToLibs(type: Copy) { + from configurations.compile + into 'libs' +} diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro new file mode 100644 index 0000000..6e8516c --- /dev/null +++ b/android/app/proguard-rules.pro @@ -0,0 +1,70 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Disabling obfuscation is useful if you collect stack traces from production crashes +# (unless you are using a system that supports de-obfuscate the stack traces). +-dontobfuscate + +# React Native + +# Keep our interfaces so they can be used by other ProGuard rules. +# See http://sourceforge.net/p/proguard/bugs/466/ +-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip +-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters +-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip + +# Do not strip any method/class that is annotated with @DoNotStrip +-keep @com.facebook.proguard.annotations.DoNotStrip class * +-keep @com.facebook.common.internal.DoNotStrip class * +-keepclassmembers class * { + @com.facebook.proguard.annotations.DoNotStrip *; + @com.facebook.common.internal.DoNotStrip *; +} + +-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { + void set*(***); + *** get*(); +} + +-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } +-keep class * extends com.facebook.react.bridge.NativeModule { *; } +-keepclassmembers,includedescriptorclasses class * { native ; } +-keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; } +-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } +-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } + +-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 +-keepattributes *Annotation* +-keep class okhttp3.** { *; } +-keep interface okhttp3.** { *; } +-dontwarn okhttp3.** + +# okio + +-keep class sun.misc.Unsafe { *; } +-dontwarn java.nio.file.* +-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement +-dontwarn okio.** diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..9e7eab9 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/assets/fonts/Entypo.ttf b/android/app/src/main/assets/fonts/Entypo.ttf new file mode 100644 index 0000000..1c8f5e9 Binary files /dev/null and b/android/app/src/main/assets/fonts/Entypo.ttf differ diff --git a/android/app/src/main/assets/fonts/EvilIcons.ttf b/android/app/src/main/assets/fonts/EvilIcons.ttf new file mode 100644 index 0000000..b270f98 Binary files /dev/null and b/android/app/src/main/assets/fonts/EvilIcons.ttf differ diff --git a/android/app/src/main/assets/fonts/FontAwesome.ttf b/android/app/src/main/assets/fonts/FontAwesome.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/android/app/src/main/assets/fonts/FontAwesome.ttf differ diff --git a/android/app/src/main/assets/fonts/Foundation.ttf b/android/app/src/main/assets/fonts/Foundation.ttf new file mode 100644 index 0000000..6cce217 Binary files /dev/null and b/android/app/src/main/assets/fonts/Foundation.ttf differ diff --git a/android/app/src/main/assets/fonts/Ionicons.ttf b/android/app/src/main/assets/fonts/Ionicons.ttf new file mode 100644 index 0000000..307ad88 Binary files /dev/null and b/android/app/src/main/assets/fonts/Ionicons.ttf differ diff --git a/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf b/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf new file mode 100644 index 0000000..832a57b Binary files /dev/null and b/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf differ diff --git a/android/app/src/main/assets/fonts/MaterialIcons.ttf b/android/app/src/main/assets/fonts/MaterialIcons.ttf new file mode 100644 index 0000000..7015564 Binary files /dev/null and b/android/app/src/main/assets/fonts/MaterialIcons.ttf differ diff --git a/android/app/src/main/assets/fonts/Octicons.ttf b/android/app/src/main/assets/fonts/Octicons.ttf new file mode 100644 index 0000000..5b1f7d6 Binary files /dev/null and b/android/app/src/main/assets/fonts/Octicons.ttf differ diff --git a/android/app/src/main/assets/fonts/SimpleLineIcons.ttf b/android/app/src/main/assets/fonts/SimpleLineIcons.ttf new file mode 100644 index 0000000..6ecb686 Binary files /dev/null and b/android/app/src/main/assets/fonts/SimpleLineIcons.ttf differ diff --git a/android/app/src/main/assets/fonts/Zocial.ttf b/android/app/src/main/assets/fonts/Zocial.ttf new file mode 100644 index 0000000..e4ae46c Binary files /dev/null and b/android/app/src/main/assets/fonts/Zocial.ttf differ diff --git a/android/app/src/main/java/com/smartuniapp/MainActivity.java b/android/app/src/main/java/com/smartuniapp/MainActivity.java new file mode 100644 index 0000000..07c1e08 --- /dev/null +++ b/android/app/src/main/java/com/smartuniapp/MainActivity.java @@ -0,0 +1,15 @@ +package com.smartuniapp; + +import com.facebook.react.ReactActivity; + +public class MainActivity extends ReactActivity { + + /** + * Returns the name of the main component registered from JavaScript. + * This is used to schedule rendering of the component. + */ + @Override + protected String getMainComponentName() { + return "SmartUniApp"; + } +} diff --git a/android/app/src/main/java/com/smartuniapp/MainApplication.java b/android/app/src/main/java/com/smartuniapp/MainApplication.java new file mode 100644 index 0000000..7db47e6 --- /dev/null +++ b/android/app/src/main/java/com/smartuniapp/MainApplication.java @@ -0,0 +1,46 @@ +package com.smartuniapp; + +import android.app.Application; + +import com.facebook.react.ReactApplication; +import com.i18n.reactnativei18n.ReactNativeI18n; +import com.oblador.vectoricons.VectorIconsPackage; +import com.learnium.RNDeviceInfo.RNDeviceInfo; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.react.shell.MainReactPackage; +import com.facebook.soloader.SoLoader; + +import java.util.Arrays; +import java.util.List; + +public class MainApplication extends Application implements ReactApplication { + + private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + return Arrays.asList( + new MainReactPackage(), + new ReactNativeI18n(), + new VectorIconsPackage(), + new RNDeviceInfo() + ); + } + }; + + @Override + public ReactNativeHost getReactNativeHost() { + return mReactNativeHost; + } + + @Override + public void onCreate() { + super.onCreate(); + SoLoader.init(this, /* native exopackage */ false); + } +} diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..cde69bc Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..c133a0c Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..bfa42f0 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..324e72c Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..93a2690 --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + SmartUniApp + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..319eb0c --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..eed9972 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,24 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + jcenter() + } + dependencies { + 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 + } +} + +allprojects { + repositories { + mavenLocal() + jcenter() + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" + } + } +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..1fd964e --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,20 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +android.useDeprecatedNdk=true diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..b5166da Binary files /dev/null and b/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..dbdc05d --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/android/gradlew b/android/gradlew new file mode 100755 index 0000000..91a7e26 --- /dev/null +++ b/android/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 0000000..8a0b282 --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/keystores/BUCK b/android/keystores/BUCK new file mode 100644 index 0000000..88e4c31 --- /dev/null +++ b/android/keystores/BUCK @@ -0,0 +1,8 @@ +keystore( + name = "debug", + properties = "debug.keystore.properties", + store = "debug.keystore", + visibility = [ + "PUBLIC", + ], +) diff --git a/android/keystores/debug.keystore.properties b/android/keystores/debug.keystore.properties new file mode 100644 index 0000000..121bfb4 --- /dev/null +++ b/android/keystores/debug.keystore.properties @@ -0,0 +1,4 @@ +key.store=debug.keystore +key.alias=androiddebugkey +key.store.password=android +key.alias.password=android diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..75194be --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,9 @@ +rootProject.name = 'SmartUniApp' +include ':react-native-i18n' +project(':react-native-i18n').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-i18n/android') +include ':react-native-vector-icons' +project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') +include ':react-native-device-info' +project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android') + +include ':app' diff --git a/app.json b/app.json new file mode 100644 index 0000000..44ec601 --- /dev/null +++ b/app.json @@ -0,0 +1,4 @@ +{ + "name": "SmartUniApp", + "displayName": "SmartUniApp" +} \ No newline at end of file diff --git a/ignite/DevScreens/APITestingScreen.js b/ignite/DevScreens/APITestingScreen.js new file mode 100755 index 0000000..b44656e --- /dev/null +++ b/ignite/DevScreens/APITestingScreen.js @@ -0,0 +1,131 @@ +import React from 'react' +import { ScrollView, View, Text, TouchableOpacity, Image } from 'react-native' +import { Metrics, Images } from './DevTheme' +import FullButton from '../../App/Components/FullButton' + +// For API +import API from '../../App/Services/Api' +import FJSON from 'format-json' + +// Styles +import styles from './Styles/APITestingScreenStyles' + +// API buttons here: +const endpoints = [ + { label: 'Github Root', endpoint: 'getRoot' }, + { label: 'Github Rate Limit', endpoint: 'getRate' }, + { label: 'Search User (gantman)', endpoint: 'getUser', args: ['gantman'] }, + { label: 'Search User (skellock)', endpoint: 'getUser', args: ['skellock'] } +] + +export default class APITestingScreen extends React.Component { + api = {} + + constructor (props) { + super(props) + this.state = { + visibleHeight: Metrics.screenHeight + } + + this.api = API.create() + } + + showResult (response, title = 'Response') { + this.refs.container.scrollTo({x: 0, y: 0, animated: true}) + if (response.ok) { + this.refs.result.setState({message: FJSON.plain(response.data), title: title}) + } else { + this.refs.result.setState({message: `${response.problem} - ${response.status}`, title: title}) + } + } + + tryEndpoint (apiEndpoint) { + const { label, endpoint, args = [''] } = apiEndpoint + this.api[endpoint].apply(this, args).then((result) => { + this.showResult(result, label || `${endpoint}(${args.join(', ')})`) + }) + } + + renderButton (apiEndpoint) { + const { label, endpoint, args = [''] } = apiEndpoint + return ( + + ) + } + + renderButtons () { + return endpoints.map((endpoint) => this.renderButton(endpoint)) + } + + render () { + return ( + + + this.props.navigation.goBack()} style={{ + position: 'absolute', + paddingTop: 30, + paddingHorizontal: 5, + zIndex: 10 + }}> + + + + + + API + + + + Testing API with Postman or APIary.io verifies the server works. + The API Test screen is the next step; a simple in-app way to verify and debug your in-app API functions. + + + Create new endpoints in Services/Api.js then add example uses to endpoints array in Containers/APITestingScreen.js + + + {this.renderButtons()} + + + + ) + } +} + +class APIResult extends React.Component { + constructor (props) { + super(props) + this.state = { + message: false, + title: false + } + } + + onApiPress = () => { + this.setState({message: false}) + } + + renderView () { + return ( + + + {this.state.title} Response: + + {this.state.message} + + + + ) + } + + render () { + let messageView = null + if (this.state.message) { + return this.renderView() + } + + return messageView + } +} diff --git a/ignite/DevScreens/ButtonBox.js b/ignite/DevScreens/ButtonBox.js new file mode 100755 index 0000000..ccdd70c --- /dev/null +++ b/ignite/DevScreens/ButtonBox.js @@ -0,0 +1,21 @@ +import React, { PropTypes } from 'react' +import { TouchableOpacity, Text, Image } from 'react-native' +import styles from './Styles/ButtonBoxStyles' + +export default class ButtonBox extends React.Component { + static propTypes = { + onPress: PropTypes.func, + image: PropTypes.number, + style: PropTypes.oneOfType([PropTypes.object, PropTypes.number]), + text: PropTypes.string + } + + render () { + return ( + + + {this.props.text} + + ) + } +} diff --git a/ignite/DevScreens/ComponentExamplesScreen.js b/ignite/DevScreens/ComponentExamplesScreen.js new file mode 100755 index 0000000..55c76a7 --- /dev/null +++ b/ignite/DevScreens/ComponentExamplesScreen.js @@ -0,0 +1,57 @@ +// An All Components Screen is a great way to dev and quick-test components +import React from 'react' +import { Platform, View, ScrollView, Text, Image, TouchableOpacity } from 'react-native' +import { Images } from './DevTheme' +import styles from './Styles/ComponentExamplesScreenStyles' + +// Examples Render Engine +import ExamplesRegistry from '../../App/Services/ExamplesRegistry' + +class ComponentExamplesScreen extends React.Component { + renderAndroidWarning () { + if (Platform.OS === 'android') { + return ( + + Android only: Animations are slow? You are probably running the app in debug mode. + It will run more smoothly once your app will be built. + + ) + } + return null + } + + render () { + return ( + + + this.props.navigation.goBack()} style={{ + position: 'absolute', + paddingTop: 30, + paddingHorizontal: 5, + zIndex: 10 + }}> + + + + + + Components + + + {this.renderAndroidWarning()} + + Sometimes called a 'Style Guide', or 'Pattern Library', Examples Screen is filled with usage examples + of fundamental components for a given application. Use this merge-friendly way for your team + to show/use/test components. Examples are registered inside each component's file for quick changes and usage identification. + + + + {ExamplesRegistry.renderComponentExamples()} + + + + ) + } +} + +export default ComponentExamplesScreen diff --git a/ignite/DevScreens/DevTheme/ApplicationStyles.js b/ignite/DevScreens/DevTheme/ApplicationStyles.js new file mode 100644 index 0000000..91d576b --- /dev/null +++ b/ignite/DevScreens/DevTheme/ApplicationStyles.js @@ -0,0 +1,68 @@ +import Fonts from './Fonts' +import Metrics from './Metrics' +import Colors from './Colors' + +// This file is for a reusable grouping of Theme items. +// Similar to an XML fragment layout in Android + +const ApplicationStyles = { + screen: { + mainContainer: { + flex: 1, + backgroundColor: Colors.transparent + }, + backgroundImage: { + position: 'absolute', + top: 0, + left: 0, + bottom: 0, + right: 0 + }, + container: { + flex: 1, + paddingTop: Metrics.baseMargin, + backgroundColor: Colors.transparent + }, + section: { + margin: Metrics.section, + padding: Metrics.baseMargin + }, + sectionText: { + ...Fonts.normal, + paddingVertical: Metrics.doubleBaseMargin, + color: Colors.snow, + marginVertical: Metrics.smallMargin, + textAlign: 'center' + }, + subtitle: { + color: Colors.snow, + padding: Metrics.smallMargin, + marginBottom: Metrics.smallMargin, + marginHorizontal: Metrics.smallMargin + }, + titleText: { + ...Fonts.style.h2, + fontSize: 14, + color: Colors.text + } + }, + darkLabelContainer: { + padding: Metrics.smallMargin, + paddingBottom: Metrics.doubleBaseMargin, + borderBottomColor: Colors.border, + borderBottomWidth: 1, + marginBottom: Metrics.baseMargin + }, + darkLabel: { + fontFamily: Fonts.type.bold, + color: Colors.snow + }, + groupContainer: { + margin: Metrics.smallMargin, + flexDirection: 'row', + justifyContent: 'space-around', + alignItems: 'center' + } +} + +export default ApplicationStyles diff --git a/ignite/DevScreens/DevTheme/Colors.js b/ignite/DevScreens/DevTheme/Colors.js new file mode 100644 index 0000000..440f98a --- /dev/null +++ b/ignite/DevScreens/DevTheme/Colors.js @@ -0,0 +1,17 @@ +const colors = { + transparent: 'rgba(0,0,0,0)', + background: '#3e243f', + silver: '#F7F7F7', + frost: '#D8D8D8', + windowTint: 'rgba(0, 0, 0, 0.4)', + panther: '#161616', + charcoal: '#595959', + snow: 'white', + ember: 'rgba(164, 0, 48, 0.5)', + fire: '#ff3832', + eggplant: '#251a34', + border: '#483F53', + text: '#E0D7E5' +} + +export default colors diff --git a/ignite/DevScreens/DevTheme/Fonts.js b/ignite/DevScreens/DevTheme/Fonts.js new file mode 100644 index 0000000..6d4e70b --- /dev/null +++ b/ignite/DevScreens/DevTheme/Fonts.js @@ -0,0 +1,60 @@ +const type = { + base: 'Avenir-Book', + bold: 'Avenir-Black', + emphasis: 'HelveticaNeue-Italic' +} + +const size = { + h1: 38, + h2: 34, + h3: 30, + h4: 26, + h5: 20, + h6: 19, + input: 18, + regular: 17, + medium: 14, + small: 12, + tiny: 8.5 +} + +const style = { + h1: { + fontFamily: type.base, + fontSize: size.h1 + }, + h2: { + fontWeight: 'bold', + fontSize: size.h2 + }, + h3: { + fontFamily: type.emphasis, + fontSize: size.h3 + }, + h4: { + fontFamily: type.base, + fontSize: size.h4 + }, + h5: { + fontFamily: type.base, + fontSize: size.h5 + }, + h6: { + fontFamily: type.emphasis, + fontSize: size.h6 + }, + normal: { + fontFamily: type.base, + fontSize: size.regular + }, + description: { + fontFamily: type.base, + fontSize: size.medium + } +} + +export default { + type, + size, + style +} diff --git a/ignite/DevScreens/DevTheme/Images.js b/ignite/DevScreens/DevTheme/Images.js new file mode 100644 index 0000000..e57c879 --- /dev/null +++ b/ignite/DevScreens/DevTheme/Images.js @@ -0,0 +1,19 @@ +// leave off @2x/@3x +const images = { + igniteClear: require('../Images/ignite-logo-transparent.png'), + tileBg: require('../Images/tile_bg.png'), + background: require('../Images/BG.png'), + api: require('../Images/Icons/icon-api-testing.png'), + components: require('../Images/Icons/icon-components.png'), + deviceInfo: require('../Images/Icons/icon-device-information.png'), + faq: require('../Images/Icons/faq-icon.png'), + home: require('../Images/Icons/icon-home.png'), + theme: require('../Images/Icons/icon-theme.png'), + usageExamples: require('../Images/Icons/icon-usage-examples.png'), + chevronRight: require('../Images/Icons/chevron-right.png'), + hamburger: require('../Images/Icons/hamburger.png'), + backButton: require('../Images/Icons/back-button.png'), + closeButton: require('../Images/Icons/close-button.png') +} + +export default images diff --git a/ignite/DevScreens/DevTheme/Metrics.js b/ignite/DevScreens/DevTheme/Metrics.js new file mode 100644 index 0000000..24c738d --- /dev/null +++ b/ignite/DevScreens/DevTheme/Metrics.js @@ -0,0 +1,23 @@ +import { Dimensions } from 'react-native' + +const { width, height } = Dimensions.get('window') + +// Used via Metrics.baseMargin +const metrics = { + section: 25, + baseMargin: 10, + doubleBaseMargin: 20, + smallMargin: 5, + doubleSection: 50, + screenWidth: width < height ? width : height, + screenHeight: width < height ? height : width, + icons: { + large: 45, + xl: 50 + }, + images: { + logo: 200 + } +} + +export default metrics diff --git a/ignite/DevScreens/DevTheme/README.md b/ignite/DevScreens/DevTheme/README.md new file mode 100644 index 0000000..df04c4e --- /dev/null +++ b/ignite/DevScreens/DevTheme/README.md @@ -0,0 +1,8 @@ +### DevTheme Folder +Dev Screens specific themes +* Base Styles +* Fonts +* Metrics +* Colors + +etc. diff --git a/ignite/DevScreens/DevTheme/index.js b/ignite/DevScreens/DevTheme/index.js new file mode 100644 index 0000000..e29e527 --- /dev/null +++ b/ignite/DevScreens/DevTheme/index.js @@ -0,0 +1,7 @@ +import Colors from './Colors' +import Fonts from './Fonts' +import Metrics from './Metrics' +import Images from './Images' +import ApplicationStyles from './ApplicationStyles' + +export { Colors, Fonts, Images, Metrics, ApplicationStyles } diff --git a/ignite/DevScreens/DeviceInfoScreen.js b/ignite/DevScreens/DeviceInfoScreen.js new file mode 100755 index 0000000..52de0dd --- /dev/null +++ b/ignite/DevScreens/DeviceInfoScreen.js @@ -0,0 +1,151 @@ +// An All Components Screen is a great way to dev and quick-test components +import React from 'react' +import { View, ScrollView, Text, Image, NetInfo, TouchableOpacity } from 'react-native' +import DeviceInfo from 'react-native-device-info' +import { Metrics, Images } from './DevTheme' +import styles from './Styles/DeviceInfoScreenStyles' + +const HARDWARE_DATA = [ + {title: 'Device Manufacturer', info: DeviceInfo.getManufacturer()}, + {title: 'Device Name', info: DeviceInfo.getDeviceName()}, + {title: 'Device Model', info: DeviceInfo.getModel()}, + {title: 'Device Unique ID', info: DeviceInfo.getUniqueID()}, + {title: 'Device Locale', info: DeviceInfo.getDeviceLocale()}, + {title: 'Device Country', info: DeviceInfo.getDeviceCountry()}, + {title: 'User Agent', info: DeviceInfo.getUserAgent()}, + {title: 'Screen Width', info: Metrics.screenWidth}, + {title: 'Screen Height', info: Metrics.screenHeight} +] + +const OS_DATA = [ + {title: 'Device System Name', info: DeviceInfo.getSystemName()}, + {title: 'Device ID', info: DeviceInfo.getDeviceId()}, + {title: 'Device Version', info: DeviceInfo.getSystemVersion()} +] + +const APP_DATA = [ + {title: 'Bundle Id', info: DeviceInfo.getBundleId()}, + {title: 'Build Number', info: DeviceInfo.getBuildNumber()}, + {title: 'App Version', info: DeviceInfo.getVersion()}, + {title: 'App Version (Readable)', info: DeviceInfo.getReadableVersion()} +] + +export default class DeviceInfoScreen extends React.Component { + constructor (props) { + super(props) + + this.state = { + isConnected: false, + connectionInfo: null, + connectionInfoHistory: [] + } + } + + componentDidMount () { + NetInfo.isConnected.addEventListener('change', this.setConnected) + NetInfo.isConnected.fetch().done(this.setConnected) + NetInfo.addEventListener('change', this.setConnectionInfo) + NetInfo.fetch().done(this.setConnectionInfo) + NetInfo.addEventListener('change', this.updateConnectionInfoHistory) + + // an example of how to display a custom Reactotron message + // console.tron.display({ + // name: 'SPECS', + // value: { + // hardware: fromPairs(map((o) => [o.title, o.info], HARDWARE_DATA)), + // os: fromPairs(map((o) => [o.title, o.info], OS_DATA)), + // app: fromPairs(map((o) => [o.title, o.info], APP_DATA)) + // }, + // preview: 'About this device...' + // }) + } + + componentWillUnmount () { + NetInfo.isConnected.removeEventListener('change', this.setConnected) + NetInfo.removeEventListener('change', this.setConnectionInfo) + NetInfo.removeEventListener('change', this.updateConnectionInfoHistory) + } + + setConnected = (isConnected) => { + this.setState({isConnected}) + } + + setConnectionInfo = (connectionInfo) => { + this.setState({connectionInfo}) + } + + updateConnectionInfoHistory = (connectionInfo) => { + const connectionInfoHistory = this.state.connectionInfoHistory.slice() + connectionInfoHistory.push(connectionInfo) + this.setState({connectionInfoHistory}) + } + + netInfo () { + return ([ + {title: 'Connection', info: (this.state.isConnected ? 'Online' : 'Offline')}, + {title: 'Connection Info', info: this.state.connectionInfo}, + {title: 'Connection Info History', info: JSON.stringify(this.state.connectionInfoHistory)} + ]) + } + + renderCard (cardTitle, rowData) { + return ( + + + {cardTitle.toUpperCase()} + + + {this.renderRows(rowData)} + + ) + } + + renderRows (rowData) { + return rowData.map((cell) => { + const {title, info} = cell + return ( + + + {title} + + + {info} + + + ) + }) + } + + render () { + return ( + + + this.props.navigation.goBack()} style={{ + position: 'absolute', + paddingTop: 30, + paddingHorizontal: 5, + zIndex: 10 + }}> + + + + + + Device Info + + + + Dedicated to identifying specifics of the device. All info useful for identifying outlying behaviour specific to a device. + + + + {this.renderCard('Device Hardware', HARDWARE_DATA)} + {this.renderCard('Device OS', OS_DATA)} + {this.renderCard('App Info', APP_DATA)} + {this.renderCard('Net Info', this.netInfo())} + + + + ) + } +} diff --git a/ignite/DevScreens/DevscreensButton.js b/ignite/DevScreens/DevscreensButton.js new file mode 100755 index 0000000..2ab02ad --- /dev/null +++ b/ignite/DevScreens/DevscreensButton.js @@ -0,0 +1,37 @@ +import React from 'react' +import { View, Modal } from 'react-native' +import DebugConfig from '../../App/Config/DebugConfig' +import RoundedButton from '../../App/Components/RoundedButton' +import PresentationScreen from './PresentationScreen' + +export default class DevscreensButton extends React.Component { + constructor (props) { + super(props) + this.state = { + showModal: false + } + } + + toggleModal = () => { + this.setState({ showModal: !this.state.showModal }) + } + + render () { + if (DebugConfig.showDevScreens) { + return ( + + + Open DevScreens + + + + + + ) + } else { + return + } + } +} diff --git a/ignite/DevScreens/FaqScreen.js b/ignite/DevScreens/FaqScreen.js new file mode 100644 index 0000000..c5df861 --- /dev/null +++ b/ignite/DevScreens/FaqScreen.js @@ -0,0 +1,59 @@ +// An All Components Screen is a great way to dev and quick-test components +import React from 'react' +import { View, ScrollView, Text, Image, TouchableOpacity } from 'react-native' +import { Images } from './DevTheme' +import styles from './Styles/FaqScreenStyles' + +class ComponentExamplesScreen extends React.Component { + render () { + return ( + + + this.props.navigation.goBack()} style={{ + position: 'absolute', + paddingTop: 30, + paddingHorizontal: 5, + zIndex: 10 + }}> + + + + + + FAQ + + + + Have questions? We direct you to answers. This is a small taste of where to get more information depending on what it is that you want to know. + + + + What are these screens? + We like to use these screens when we develop apps. They are optional and out of the way to help you along your app creation process. Each screen has an explanation of what it provides. More info can be found on our website http://infinite.red/ignite + + + Got Docs? + The GitHub page has a docs folder that can help you from beginner to expert! We'll be working to release some instructional video docs as well. + + + I don't see the answer to my question in docs + Besides our docs, we have a friendly community Slack. Get an invite from http://community.infinite.red and you'll find a community of people in the #ignite channel ready to help! + + + What can I customize? + Everything! We're open source with MIT license. We also make it easy to change whatever you like. Check on our guides for making your very own plugins and boilerplates with Ignite. + + + I love you + + We love you, too. Don't forget to tweet us 😘 + @infinite_red OR @ir_ignite + + + + + ) + } +} + +export default ComponentExamplesScreen diff --git a/ignite/DevScreens/Images/BG.png b/ignite/DevScreens/Images/BG.png new file mode 100644 index 0000000..393ae63 Binary files /dev/null and b/ignite/DevScreens/Images/BG.png differ diff --git a/ignite/DevScreens/Images/Icons/back-button@2x.png b/ignite/DevScreens/Images/Icons/back-button@2x.png new file mode 100644 index 0000000..6255e5b Binary files /dev/null and b/ignite/DevScreens/Images/Icons/back-button@2x.png differ diff --git a/ignite/DevScreens/Images/Icons/chevron-right@2x.png b/ignite/DevScreens/Images/Icons/chevron-right@2x.png new file mode 100644 index 0000000..2ca020f Binary files /dev/null and b/ignite/DevScreens/Images/Icons/chevron-right@2x.png differ diff --git a/ignite/DevScreens/Images/Icons/close-button.png b/ignite/DevScreens/Images/Icons/close-button.png new file mode 100644 index 0000000..af1b1ba Binary files /dev/null and b/ignite/DevScreens/Images/Icons/close-button.png differ diff --git a/ignite/DevScreens/Images/Icons/close-button@2x.png b/ignite/DevScreens/Images/Icons/close-button@2x.png new file mode 100644 index 0000000..0a044cf Binary files /dev/null and b/ignite/DevScreens/Images/Icons/close-button@2x.png differ diff --git a/ignite/DevScreens/Images/Icons/close-button@3x.png b/ignite/DevScreens/Images/Icons/close-button@3x.png new file mode 100644 index 0000000..4d4cd30 Binary files /dev/null and b/ignite/DevScreens/Images/Icons/close-button@3x.png differ diff --git a/ignite/DevScreens/Images/Icons/faq-icon.png b/ignite/DevScreens/Images/Icons/faq-icon.png new file mode 100644 index 0000000..6d1cf2d Binary files /dev/null and b/ignite/DevScreens/Images/Icons/faq-icon.png differ diff --git a/ignite/DevScreens/Images/Icons/faq-icon@2x.png b/ignite/DevScreens/Images/Icons/faq-icon@2x.png new file mode 100644 index 0000000..851c6e7 Binary files /dev/null and b/ignite/DevScreens/Images/Icons/faq-icon@2x.png differ diff --git a/ignite/DevScreens/Images/Icons/faq-icon@3x.png b/ignite/DevScreens/Images/Icons/faq-icon@3x.png new file mode 100644 index 0000000..0f9909e Binary files /dev/null and b/ignite/DevScreens/Images/Icons/faq-icon@3x.png differ diff --git a/ignite/DevScreens/Images/Icons/hamburger@2x.png b/ignite/DevScreens/Images/Icons/hamburger@2x.png new file mode 100644 index 0000000..e10854d Binary files /dev/null and b/ignite/DevScreens/Images/Icons/hamburger@2x.png differ diff --git a/ignite/DevScreens/Images/Icons/icon-api-testing@2x.png b/ignite/DevScreens/Images/Icons/icon-api-testing@2x.png new file mode 100644 index 0000000..9a04c2b Binary files /dev/null and b/ignite/DevScreens/Images/Icons/icon-api-testing@2x.png differ diff --git a/ignite/DevScreens/Images/Icons/icon-components@2x.png b/ignite/DevScreens/Images/Icons/icon-components@2x.png new file mode 100644 index 0000000..2ad61fc Binary files /dev/null and b/ignite/DevScreens/Images/Icons/icon-components@2x.png differ diff --git a/ignite/DevScreens/Images/Icons/icon-device-information@2x.png b/ignite/DevScreens/Images/Icons/icon-device-information@2x.png new file mode 100644 index 0000000..01e3899 Binary files /dev/null and b/ignite/DevScreens/Images/Icons/icon-device-information@2x.png differ diff --git a/ignite/DevScreens/Images/Icons/icon-home@2x.png b/ignite/DevScreens/Images/Icons/icon-home@2x.png new file mode 100644 index 0000000..17afa70 Binary files /dev/null and b/ignite/DevScreens/Images/Icons/icon-home@2x.png differ diff --git a/ignite/DevScreens/Images/Icons/icon-theme@2x.png b/ignite/DevScreens/Images/Icons/icon-theme@2x.png new file mode 100644 index 0000000..d5e1b2e Binary files /dev/null and b/ignite/DevScreens/Images/Icons/icon-theme@2x.png differ diff --git a/ignite/DevScreens/Images/Icons/icon-usage-examples@2x.png b/ignite/DevScreens/Images/Icons/icon-usage-examples@2x.png new file mode 100644 index 0000000..90d2c70 Binary files /dev/null and b/ignite/DevScreens/Images/Icons/icon-usage-examples@2x.png differ diff --git a/ignite/DevScreens/Images/README.md b/ignite/DevScreens/Images/README.md new file mode 100644 index 0000000..c58a79a --- /dev/null +++ b/ignite/DevScreens/Images/README.md @@ -0,0 +1,2 @@ +### Images folder +Holds all images for the applications. \ No newline at end of file diff --git a/ignite/DevScreens/Images/ignite-logo-transparent.png b/ignite/DevScreens/Images/ignite-logo-transparent.png new file mode 100644 index 0000000..123ce39 Binary files /dev/null and b/ignite/DevScreens/Images/ignite-logo-transparent.png differ diff --git a/ignite/DevScreens/Images/ignite_logo.png b/ignite/DevScreens/Images/ignite_logo.png new file mode 100644 index 0000000..759f572 Binary files /dev/null and b/ignite/DevScreens/Images/ignite_logo.png differ diff --git a/ignite/DevScreens/Images/tile_bg.png b/ignite/DevScreens/Images/tile_bg.png new file mode 100644 index 0000000..bd95676 Binary files /dev/null and b/ignite/DevScreens/Images/tile_bg.png differ diff --git a/ignite/DevScreens/PluginExamplesScreen.js b/ignite/DevScreens/PluginExamplesScreen.js new file mode 100755 index 0000000..02d175d --- /dev/null +++ b/ignite/DevScreens/PluginExamplesScreen.js @@ -0,0 +1,62 @@ +// Fair Warning: PluginExamples has a good bit of Ignite automation in editing. +// Though robust, if you should modify this file, review your changes with us +// As to not break the automated addition/subtractions. +import React from 'react' +import { View, ScrollView, Text, TouchableOpacity, Image } from 'react-native' +import { StackNavigator } from 'react-navigation' +import { Images } from './DevTheme' + +// Examples Render Engine +import ExamplesRegistry from '../../App/Services/ExamplesRegistry' +import '../Examples/Components/animatableExample.js' +import '../Examples/Components/i18nExample.js' +import '../Examples/Components/vectorExample.js' + +// Styles +import styles from './Styles/PluginExamplesScreenStyles' + +class PluginExamplesScreen extends React.Component { + render () { + return ( + + + this.props.navigation.goBack(null)} style={{ + position: 'absolute', + paddingTop: 30, + paddingHorizontal: 5, + zIndex: 10 + }}> + + + + + + Plugin Examples + + + + The Plugin Examples screen is a playground for 3rd party libs and logic proofs. + Items on this screen can be composed of multiple components working in concert. Functionality demos of libs and practices + + + + {ExamplesRegistry.renderPluginExamples()} + + + + + + ) + } +} + +export default StackNavigator({ + PluginExamplesScreen: {screen: PluginExamplesScreen} +}, { + cardStyle: { + opacity: 1, + backgroundColor: '#3e243f' + }, + headerMode: 'none', + initialRouteName: 'PluginExamplesScreen' +}) diff --git a/ignite/DevScreens/PresentationScreen.js b/ignite/DevScreens/PresentationScreen.js new file mode 100755 index 0000000..e8e7e21 --- /dev/null +++ b/ignite/DevScreens/PresentationScreen.js @@ -0,0 +1,110 @@ +import React from 'react' +import { ScrollView, Text, Image, View, TouchableOpacity } from 'react-native' +import { Images } from './DevTheme' +import ButtonBox from './ButtonBox' +import { StackNavigator } from 'react-navigation' +// Screens +import APITestingScreen from './APITestingScreen' +import ComponentExamplesScreen from './ComponentExamplesScreen' +import DeviceInfoScreen from './DeviceInfoScreen' +import PluginExamplesScreen from './PluginExamplesScreen' +import ThemeScreen from './ThemeScreen' +import FaqScreen from './FaqScreen' + +// Styles +import styles from './Styles/PresentationScreenStyles' + +class PresentationScreen extends React.Component { + openComponents = () => { + this.props.navigation.navigate('ComponentExamplesScreen') + } + + openUsage = () => { + this.props.navigation.navigate('PluginExamplesScreen') + } + + openApi = () => { + this.props.navigation.navigate('APITestingScreen') + } + + openTheme = () => { + this.props.navigation.navigate('ThemeScreen') + } + + openDevice = () => { + this.props.navigation.navigate('DeviceInfoScreen') + } + + openFaq = () => { + this.props.navigation.navigate('FaqScreen') + } + + render () { + return ( + + + + + + + + + + + + Default screens for development, debugging, and alpha testing + are available below. + + + + + + + + + + + + + + + + Made with ❤️ by Infinite Red + + + ) + } +} + +export default StackNavigator({ + PresentationScreen: {screen: PresentationScreen}, + APITestingScreen: {screen: APITestingScreen}, + ComponentExamplesScreen: {screen: ComponentExamplesScreen}, + DeviceInfoScreen: {screen: DeviceInfoScreen}, + PluginExamplesScreen: {screen: PluginExamplesScreen}, + ThemeScreen: {screen: ThemeScreen}, + FaqScreen: {screen: FaqScreen} +}, { + cardStyle: { + opacity: 1, + backgroundColor: '#3e243f' + }, + initialRouteName: 'PresentationScreen', + headerMode: 'none', + // Keeping this here for future when we can make + navigationOptions: { + header: { + left: ( + window.alert('pop')} > + ), + style: { + backgroundColor: '#3e243f' + } + } + } +}) diff --git a/ignite/DevScreens/Styles/APITestingScreenStyles.js b/ignite/DevScreens/Styles/APITestingScreenStyles.js new file mode 100755 index 0000000..cfbe60d --- /dev/null +++ b/ignite/DevScreens/Styles/APITestingScreenStyles.js @@ -0,0 +1,6 @@ +import { StyleSheet } from 'react-native' +import { ApplicationStyles } from '../DevTheme/' + +export default StyleSheet.create({ + ...ApplicationStyles.screen +}) diff --git a/ignite/DevScreens/Styles/ButtonBoxStyles.js b/ignite/DevScreens/Styles/ButtonBoxStyles.js new file mode 100755 index 0000000..db3cbea --- /dev/null +++ b/ignite/DevScreens/Styles/ButtonBoxStyles.js @@ -0,0 +1,22 @@ +import { StyleSheet } from 'react-native' +import { Colors, Metrics, Fonts } from '../DevTheme/' + +export default StyleSheet.create({ + container: { + width: Metrics.screenWidth / 2, + aspectRatio: 0.9, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: Colors.eggplant + }, + image: { + width: Metrics.icons.xl, + height: Metrics.icons.xl, + margin: Metrics.baseMargin + }, + label: { + ...Fonts.style.h2, + fontSize: 14, + color: Colors.text + } +}) diff --git a/ignite/DevScreens/Styles/ComponentExamplesScreenStyles.js b/ignite/DevScreens/Styles/ComponentExamplesScreenStyles.js new file mode 100755 index 0000000..5c7e416 --- /dev/null +++ b/ignite/DevScreens/Styles/ComponentExamplesScreenStyles.js @@ -0,0 +1,18 @@ +import { StyleSheet } from 'react-native' +import { Fonts, Colors, Metrics, ApplicationStyles } from '../DevTheme/' + +export default StyleSheet.create({ + ...ApplicationStyles.screen, + sectionText: { + ...Fonts.base, + color: Colors.text, + fontSize: 12, + lineHeight: Metrics.doubleBaseMargin + 5 + }, + mainContainer: { + paddingHorizontal: Metrics.doubleBaseMargin + }, + description: { + marginVertical: Metrics.doubleSection + } +}) diff --git a/ignite/DevScreens/Styles/DeviceInfoScreenStyles.js b/ignite/DevScreens/Styles/DeviceInfoScreenStyles.js new file mode 100755 index 0000000..c3092b6 --- /dev/null +++ b/ignite/DevScreens/Styles/DeviceInfoScreenStyles.js @@ -0,0 +1,61 @@ +import { StyleSheet } from 'react-native' +import { Colors, Metrics, Fonts, ApplicationStyles } from '../DevTheme/' + +export default StyleSheet.create({ + ...ApplicationStyles.screen, + sectionHeaderContainer: { + ...ApplicationStyles.darkLabelContainer + }, + sectionHeader: { + ...ApplicationStyles.darkLabel, + paddingTop: 50 + }, + cardTitle: { + alignSelf: 'center', + fontSize: Fonts.size.regular, + fontWeight: 'bold', + marginVertical: Metrics.baseMargin, + color: Colors.snow + }, + cardContainer: { + backgroundColor: Colors.ember, + borderColor: 'black', + borderWidth: 1, + borderRadius: 2, + shadowColor: Colors.panther, + shadowOffset: { + height: 7, + width: 7 + }, + shadowRadius: 2, + paddingBottom: Metrics.baseMargin, + margin: Metrics.baseMargin + }, + rowContainer: { + flexDirection: 'row', + borderColor: Colors.windowTint, + borderWidth: 0.5, + borderRadius: 2, + marginHorizontal: Metrics.baseMargin + }, + rowLabelContainer: { + flex: 1, + justifyContent: 'center', + backgroundColor: Colors.snow + }, + rowLabel: { + fontWeight: 'bold', + fontSize: Fonts.size.medium, + marginVertical: Metrics.baseMargin, + marginLeft: Metrics.baseMargin + }, + rowInfoContainer: { + flex: 2, + justifyContent: 'center', + backgroundColor: Colors.silver + }, + rowInfo: { + fontSize: Fonts.size.regular, + margin: Metrics.baseMargin + } +}) diff --git a/ignite/DevScreens/Styles/DevscreensButtonStyles.js b/ignite/DevScreens/Styles/DevscreensButtonStyles.js new file mode 100755 index 0000000..6d15869 --- /dev/null +++ b/ignite/DevScreens/Styles/DevscreensButtonStyles.js @@ -0,0 +1,22 @@ +import { StyleSheet } from 'react-native' +import { Colors, Metrics, Fonts } from '../DevTheme/' + +export default StyleSheet.create({ + container: { + width: Metrics.screenWidth / 2, + aspectRatio: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: Colors.eggplant + }, + hamburgerImage: { + width: Metrics.icons.large, + height: Metrics.icons.large, + marginHorizontal: 15 + }, + label: { + ...Fonts.style.h2, + fontSize: 14, + color: Colors.text + } +}) diff --git a/ignite/DevScreens/Styles/FaqScreenStyles.js b/ignite/DevScreens/Styles/FaqScreenStyles.js new file mode 100644 index 0000000..bc71ff8 --- /dev/null +++ b/ignite/DevScreens/Styles/FaqScreenStyles.js @@ -0,0 +1,28 @@ +import { StyleSheet } from 'react-native' +import { Fonts, Colors, Metrics, ApplicationStyles } from '../DevTheme/' + +export default StyleSheet.create({ + ...ApplicationStyles.screen, + sectionText: { + ...Fonts.base, + color: Colors.text, + fontSize: 12, + lineHeight: Metrics.doubleBaseMargin + 5 + }, + mainContainer: { + paddingHorizontal: Metrics.doubleBaseMargin + }, + description: { + marginVertical: Metrics.doubleSection + }, + sectionHeader: { + ...Fonts.style.h5, + color: Colors.fire + }, + sectionHeaderContainer: { + borderWidth: 1, + borderColor: Colors.border, + padding: Metrics.baseMargin, + marginVertical: 20 + } +}) diff --git a/ignite/DevScreens/Styles/PluginExamplesScreenStyles.js b/ignite/DevScreens/Styles/PluginExamplesScreenStyles.js new file mode 100755 index 0000000..cfbe60d --- /dev/null +++ b/ignite/DevScreens/Styles/PluginExamplesScreenStyles.js @@ -0,0 +1,6 @@ +import { StyleSheet } from 'react-native' +import { ApplicationStyles } from '../DevTheme/' + +export default StyleSheet.create({ + ...ApplicationStyles.screen +}) diff --git a/ignite/DevScreens/Styles/PresentationScreenStyles.js b/ignite/DevScreens/Styles/PresentationScreenStyles.js new file mode 100755 index 0000000..7bc838a --- /dev/null +++ b/ignite/DevScreens/Styles/PresentationScreenStyles.js @@ -0,0 +1,69 @@ +import { StyleSheet } from 'react-native' +import { Metrics, Colors, Fonts, ApplicationStyles } from '../DevTheme/' + +export default StyleSheet.create({ + ...ApplicationStyles.screen, + container: { + marginBottom: 36, + paddingTop: Metrics.section + }, + logo: { + height: Metrics.images.logo, + width: Metrics.images.logo, + resizeMode: 'contain', + marginTop: Metrics.doubleBaseMargin + }, + buttonsContainer: { + flexDirection: 'row', + flex: 1 + }, + centered: { + alignItems: 'center' + }, + componentButton: { + borderColor: Colors.border, + borderTopWidth: 1, + borderRightWidth: 1, + borderBottomWidth: 1 + }, + apiButton: { + borderColor: Colors.border, + borderRightWidth: 1, + borderBottomWidth: 1 + }, + usageButton: { + borderColor: Colors.border, + borderTopWidth: 1, + borderBottomWidth: 1 + }, + deviceButton: { + borderColor: Colors.border, + borderRightWidth: 1, + borderTopWidth: 1 + }, + sectionText: { + textAlign: 'center', + fontFamily: Fonts.base, + fontSize: 14, + marginHorizontal: Metrics.baseMargin, + lineHeight: 30, + marginVertical: Metrics.doubleBaseMargin, + color: Colors.text + }, + banner: { + position: 'absolute', + width: Metrics.screenWidth, + backgroundColor: Colors.banner, + justifyContent: 'center', + alignItems: 'center', + bottom: 0, + left: 0, + right: 0, + height: 36 + }, + bannerLabel: { + ...Fonts.style.h5, + fontSize: 12, + color: Colors.snow + } +}) diff --git a/ignite/DevScreens/Styles/ThemeScreenStyles.js b/ignite/DevScreens/Styles/ThemeScreenStyles.js new file mode 100755 index 0000000..77213d6 --- /dev/null +++ b/ignite/DevScreens/Styles/ThemeScreenStyles.js @@ -0,0 +1,56 @@ +import { StyleSheet } from 'react-native' +import { Colors, Metrics, ApplicationStyles } from '../DevTheme/' + +export default StyleSheet.create({ + ...ApplicationStyles.screen, + groupContainer: { + ...ApplicationStyles.groupContainer + }, + sectionHeaderContainer: { + ...ApplicationStyles.darkLabelContainer + }, + sectionHeader: { + ...ApplicationStyles.darkLabel + }, + colorsContainer: { + flexDirection: 'row', + flexWrap: 'wrap', + justifyContent: 'center' + }, + backgroundContainer: { + position: 'relative', + width: 102, + height: 102, + borderWidth: 1, + borderColor: Colors.frost + }, + backerImage: { + top: 0, + bottom: 0, + left: 0, + right: 0, + position: 'absolute', + resizeMode: 'stretch' + }, + colorContainer: { + height: 130, + padding: Metrics.smallMargin, + marginBottom: Metrics.smallMargin + }, + colorSquare: { + width: 100, + height: 100 + }, + colorName: { + width: 100, + height: Metrics.doubleBaseMargin, + lineHeight: Metrics.doubleBaseMargin, + color: Colors.charcoal, + textAlign: 'center' + }, + fontRow: { + padding: Metrics.smallMargin, + marginHorizontal: Metrics.smallMargin, + color: Colors.snow + } +}) diff --git a/ignite/DevScreens/ThemeScreen.js b/ignite/DevScreens/ThemeScreen.js new file mode 100644 index 0000000..a0c5425 --- /dev/null +++ b/ignite/DevScreens/ThemeScreen.js @@ -0,0 +1,94 @@ +import React from 'react' +import { View, ScrollView, Text, Image, TouchableOpacity } from 'react-native' +import { Colors, Fonts, Images } from './DevTheme' +import R from 'ramda' + +// Styles +import styles from './Styles/ThemeScreenStyles' + +// Colors +const colors = R.keys(Colors) +// Font Types +const types = R.keys(Fonts.type) +// Font Styles +const fontStyles = R.keys(Fonts.style) + +export default class ThemeScreen extends React.Component { + renderColor (color: string) { + return ( + + + + + + {color} + + ) + } + + renderColors () { + return colors.map((color) => this.renderColor(color)) + } + + renderFont (font: string) { + return ( + { + `${font}: ${Fonts.type[font]}` + } + ) + } + + renderFonts () { + return types.map((font) => this.renderFont(font)) + } + + renderStyle (fontStyle: string) { + return ({`This is ${fontStyle} style`}) + } + + renderStyles () { + return fontStyles.map((fontStyle) => this.renderStyle(fontStyle)) + } + + render () { + return ( + + + this.props.navigation.goBack()} style={{ + position: 'absolute', + paddingTop: 30, + paddingHorizontal: 5, + zIndex: 10 + }}> + + + + + + Themes + + + List of Theme specific settings. Auto-generated from Themes folder. + + + Colors + + + {this.renderColors()} + + + + Fonts + + {this.renderFonts()} + + + Styles + + {this.renderStyles()} + + + + ) + } +} diff --git a/ignite/Examples/Components/animatableExample.js b/ignite/Examples/Components/animatableExample.js new file mode 100644 index 0000000..c98bb8f --- /dev/null +++ b/ignite/Examples/Components/animatableExample.js @@ -0,0 +1,56 @@ +// @flow + +import React from 'react' +import { View, Text, StyleSheet } from 'react-native' +import ExamplesRegistry from '../../../App/Services/ExamplesRegistry' +import * as Animatable from 'react-native-animatable' + +// Example +ExamplesRegistry.addPluginExample('Animatable', () => + + + Faaaaaddddeeeeddd + + + Jelloo00000000 + + + puLsepuLsepuLse + + +) + +const styles = StyleSheet.create({ + button: { + margin: 10, + height: 50, + justifyContent: 'center', + alignItems: 'center' + }, + fadeInButton: { + backgroundColor: '#ff3b3a' + }, + fadeInButtonText: { + color: 'white' + }, + jelloButton: { + backgroundColor: 'white' + }, + pulseButton: { + backgroundColor: '#ffc700' + }, + pulseButtonText: { + color: 'white' + } +}) diff --git a/ignite/Examples/Components/i18nExample.js b/ignite/Examples/Components/i18nExample.js new file mode 100644 index 0000000..d4bc506 --- /dev/null +++ b/ignite/Examples/Components/i18nExample.js @@ -0,0 +1,13 @@ +// @flow + +import React from 'react' +import { View, Text } from 'react-native' +import ExamplesRegistry from '../../../App/Services/ExamplesRegistry' +import I18n from 'react-native-i18n' + +// Example +ExamplesRegistry.addPluginExample('I18n', () => + + Locale: {I18n.defaultLocale} + +) diff --git a/ignite/Examples/Components/vectorExample.js b/ignite/Examples/Components/vectorExample.js new file mode 100644 index 0000000..7e91632 --- /dev/null +++ b/ignite/Examples/Components/vectorExample.js @@ -0,0 +1,17 @@ +// @flow + +import React from 'react' +import { View } from 'react-native' +import ExamplesRegistry from '../../../App/Services/ExamplesRegistry' +import Icon from 'react-native-vector-icons/FontAwesome' + +// Example +ExamplesRegistry.addPluginExample('Vector Icons', () => + + + + + + + +) diff --git a/ignite/Examples/Containers/ignite-ir-boilerplate/GridExample.js b/ignite/Examples/Containers/ignite-ir-boilerplate/GridExample.js new file mode 100644 index 0000000..26accc1 --- /dev/null +++ b/ignite/Examples/Containers/ignite-ir-boilerplate/GridExample.js @@ -0,0 +1,123 @@ +import React, { Component } from 'react' +import { View, Text, ListView } from 'react-native' +import { connect } from 'react-redux' + +// For empty lists +// import AlertMessage from '../Components/AlertMessage' + +// Styles +import styles from './Styles/GridExampleStyle' + +class GridExample extends Component { + constructor (props) { + super(props) + // If you need scroll to bottom, consider http://bit.ly/2bMQ2BZ + + /* *********************************************************** + * STEP 1 + * This is an array of objects with the properties you desire + * Usually this should come from Redux mapStateToProps + *************************************************************/ + const dataObjects = [ + {title: 'First Title', description: 'First Description'}, + {title: 'Second Title', description: 'Second Description'}, + {title: 'Third Title', description: 'Third Description'}, + {title: 'Fourth Title', description: 'Fourth Description'}, + {title: 'Fifth Title', description: 'Fifth Description'}, + {title: 'Sixth Title', description: 'Sixth Description'}, + {title: 'Seventh Title', description: 'Seventh Description'} + ] + + /* *********************************************************** + * STEP 2 + * Teach datasource how to detect if rows are different + * Make this function fast! Perhaps something like: + * (r1, r2) => r1.id !== r2.id} + *************************************************************/ + const rowHasChanged = (r1, r2) => r1 !== r2 + + // DataSource configured + const ds = new ListView.DataSource({rowHasChanged}) + + // Datasource is always in state + this.state = { + dataSource: ds.cloneWithRows(dataObjects) + } + } + + /* *********************************************************** + * STEP 3 + * `_renderRow` function -How each cell/row should be rendered + * It's our best practice to place a single component here: + * + * e.g. + return + *************************************************************/ + _renderRow (rowData) { + return ( + + {rowData.title} + {rowData.description} + + ) + } + + /* *********************************************************** + * STEP 4 + * If your datasource is driven by Redux, you'll need to + * reset it when new data arrives. + * DO NOT! place `cloneWithRows` inside of render, since render + * is called very often, and should remain fast! Just replace + * state's datasource on newProps. + * + * e.g. + componentWillReceiveProps (newProps) { + if (newProps.someData) { + this.setState(prevState => ({ + dataSource: prevState.dataSource.cloneWithRows(newProps.someData) + })) + } + } + *************************************************************/ + + // Used for friendly AlertMessage + // returns true if the dataSource is empty + _noRowData () { + return this.state.dataSource.getRowCount() === 0 + } + + // Render a footer. + _renderFooter = () => { + return ( + - Footer - + ) + } + + render () { + return ( + + + + ) + } +} + +const mapStateToProps = (state) => { + return { + // ...redux state to props here + } +} + +const mapDispatchToProps = (dispatch) => { + return { + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(GridExample) diff --git a/ignite/Examples/Containers/ignite-ir-boilerplate/GridExampleStyle.js b/ignite/Examples/Containers/ignite-ir-boilerplate/GridExampleStyle.js new file mode 100644 index 0000000..ce645d0 --- /dev/null +++ b/ignite/Examples/Containers/ignite-ir-boilerplate/GridExampleStyle.js @@ -0,0 +1,37 @@ +import { StyleSheet } from 'react-native' +import { ApplicationStyles, Metrics, Colors } from '../../../../../DevScreens/DevTheme/' + +export default StyleSheet.create({ + ...ApplicationStyles.screen, + container: { + flex: 1, + marginTop: Metrics.navBarHeight, + backgroundColor: Colors.background + }, + row: { + width: 100, + height: 100, + justifyContent: 'center', + alignItems: 'center', + margin: Metrics.baseMargin, + backgroundColor: Colors.fire, + borderRadius: Metrics.smallMargin + }, + boldLabel: { + fontWeight: 'bold', + alignSelf: 'center', + color: Colors.snow, + textAlign: 'center', + marginBottom: Metrics.smallMargin + }, + label: { + alignSelf: 'center', + color: Colors.snow, + textAlign: 'center' + }, + listContent: { + justifyContent: 'space-around', + flexDirection: 'row', + flexWrap: 'wrap' + } +}) diff --git a/ignite/Examples/Containers/ignite-ir-boilerplate/RowExample.js b/ignite/Examples/Containers/ignite-ir-boilerplate/RowExample.js new file mode 100644 index 0000000..f3706b1 --- /dev/null +++ b/ignite/Examples/Containers/ignite-ir-boilerplate/RowExample.js @@ -0,0 +1,120 @@ +import React, { Component } from 'react' +import { View, Text, ListView } from 'react-native' +import { connect } from 'react-redux' + +// Styles +import styles from './Styles/RowExampleStyle' + +class RowExample extends Component { + constructor (props) { + super(props) + // If you need scroll to bottom, consider http://bit.ly/2bMQ2BZ + + /* *********************************************************** + * STEP 1 + * This is an array of objects with the properties you desire + * Usually this should come from Redux mapStateToProps + *************************************************************/ + const dataObjects = [ + {title: 'First Title', description: 'First Description'}, + {title: 'Second Title', description: 'Second Description'}, + {title: 'Third Title', description: 'Third Description'}, + {title: 'Fourth Title', description: 'Fourth Description'}, + {title: 'Fifth Title', description: 'Fifth Description'}, + {title: 'Sixth Title', description: 'Sixth Description'}, + {title: 'Seventh Title', description: 'Seventh Description'} + ] + + /* *********************************************************** + * STEP 2 + * Teach datasource how to detect if rows are different + * Make this function fast! Perhaps something like: + * (r1, r2) => r1.id !== r2.id} + *************************************************************/ + const rowHasChanged = (r1, r2) => r1 !== r2 + + // DataSource configured + const ds = new ListView.DataSource({rowHasChanged}) + + // Datasource is always in state + this.state = { + dataSource: ds.cloneWithRows(dataObjects) + } + } + + /* *********************************************************** + * STEP 3 + * `_renderRow` function -How each cell/row should be rendered + * It's our best practice to place a single component here: + * + * e.g. + return + *************************************************************/ + _renderRow (rowData) { + return ( + + {rowData.title} + {rowData.description} + + ) + } + + /* *********************************************************** + * STEP 4 + * If your datasource is driven by Redux, you'll need to + * reset it when new data arrives. + * DO NOT! place `cloneWithRows` inside of render, since render + * is called very often, and should remain fast! Just replace + * state's datasource on newProps. + * + * e.g. + componentWillReceiveProps (newProps) { + if (newProps.someData) { + this.setState(prevState => ({ + dataSource: prevState.dataSource.cloneWithRows(newProps.someData) + })) + } + } + *************************************************************/ + + // Used for friendly AlertMessage + // returns true if the dataSource is empty + _noRowData () { + return this.state.dataSource.getRowCount() === 0 + } + + // Render a footer. + _renderFooter = () => { + return ( + - Footer - + ) + } + + render () { + return ( + + + + ) + } +} + +const mapStateToProps = (state) => { + return { + // ...redux state to props here + } +} + +const mapDispatchToProps = (dispatch) => { + return { + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(RowExample) diff --git a/ignite/Examples/Containers/ignite-ir-boilerplate/RowExampleStyle.js b/ignite/Examples/Containers/ignite-ir-boilerplate/RowExampleStyle.js new file mode 100644 index 0000000..b1dcf0c --- /dev/null +++ b/ignite/Examples/Containers/ignite-ir-boilerplate/RowExampleStyle.js @@ -0,0 +1,31 @@ +import { StyleSheet } from 'react-native' +import { ApplicationStyles, Metrics, Colors } from '../../../../../DevScreens/DevTheme/' + +export default StyleSheet.create({ + ...ApplicationStyles.screen, + container: { + flex: 1, + marginTop: Metrics.navBarHeight, + backgroundColor: Colors.background + }, + row: { + flex: 1, + backgroundColor: Colors.fire, + marginVertical: Metrics.smallMargin, + justifyContent: 'center' + }, + boldLabel: { + fontWeight: 'bold', + alignSelf: 'center', + color: Colors.snow, + textAlign: 'center', + marginBottom: Metrics.smallMargin + }, + label: { + textAlign: 'center', + color: Colors.snow + }, + listContent: { + marginTop: Metrics.baseMargin + } +}) diff --git a/ignite/Examples/Containers/ignite-ir-boilerplate/SectionExample.js b/ignite/Examples/Containers/ignite-ir-boilerplate/SectionExample.js new file mode 100644 index 0000000..ff9eef4 --- /dev/null +++ b/ignite/Examples/Containers/ignite-ir-boilerplate/SectionExample.js @@ -0,0 +1,142 @@ +import React, { Component } from 'react' +import { View, ListView, Text } from 'react-native' +import { connect } from 'react-redux' + +// Styles +import styles from './Styles/SectionExampleStyle' + +class ListviewSectionsExample extends Component { + constructor (props) { + super(props) + + /* *********************************************************** + * STEP 1 + * This is an array of objects with the properties you desire + * Usually this should come from Redux mapStateToProps + *************************************************************/ + const dataObjects = { + first: [ + {title: 'First Title', description: 'First Description'}, + {title: 'Second Title', description: 'Second Description'}, + {title: 'Third Title', description: 'Third Description'}, + {title: 'Fourth Title', description: 'Fourth Description'}, + {title: 'Fifth Title', description: 'Fifth Description'}, + {title: 'Sixth Title', description: 'Sixth Description'}, + {title: 'Seventh Title', description: 'Seventh Description'}, + {title: 'Eighth Title', description: 'Eighth Description'}, + {title: 'Ninth Title', description: 'Ninth Description'}, + {title: 'Tenth Title', description: 'Tenth Description'} + ], + second: [ + {title: 'Eleventh Title', description: 'Eleventh Description'}, + {title: '12th Title', description: '12th Description'}, + {title: '13th Title', description: '13th Description'}, + {title: '14th Title', description: '14th Description'}, + {title: '15th Title', description: '15th Description'}, + {title: '16th Title', description: '16th Description'}, + {title: '17th Title', description: '17th Description'}, + {title: '18th Title', description: '18th Description'}, + {title: '19th Title', description: '19th Description'}, + {title: '20th Title', description: '20th Description'}, + {title: 'BLACKJACK!', description: 'BLACKJACK! Description'} + ] + } + /* *********************************************************** + * STEP 2 + * Teach datasource how to detect if rows are different + * Make this function fast! Perhaps something like: + * (r1, r2) => r1.id !== r2.id} + * The same goes for sectionHeaderHasChanged + *************************************************************/ + const rowHasChanged = (r1, r2) => r1 !== r2 + const sectionHeaderHasChanged = (s1, s2) => s1 !== s2 + + // DataSource configured + const ds = new ListView.DataSource({rowHasChanged, sectionHeaderHasChanged}) + + // Datasource is always in state + this.state = { + dataSource: ds.cloneWithRowsAndSections(dataObjects) + } + } + + /* *********************************************************** + * STEP 3 + * `_renderRow` function -How each cell/row should be rendered + * It's our best practice to place a single component here: + * + * e.g. + return + *************************************************************/ + _renderRow (rowData, sectionID) { + // You can condition on sectionID (key as string), for different cells + // in different sections + return ( + + Section {sectionID} - {rowData.title} + {rowData.description} + + ) + } + + /* *********************************************************** + * STEP 4 + * If your datasource is driven by Redux, you'll need to + * reset it when new data arrives. + * DO NOT! place `cloneWithRowsAndSections` inside of render, since render + * is called very often, and should remain fast! Just replace + * state's datasource on newProps. + * + * e.g. + componentWillReceiveProps (newProps) { + if (newProps.someData) { + this.setState(prevState => ({ + dataSource: prevState.dataSource.cloneWithRowsAndSections(newProps.someData) + })) + } + } + *************************************************************/ + + // Used for friendly AlertMessage + // returns true if the dataSource is empty + _noRowData () { + return this.state.dataSource.getRowCount() === 0 + } + + _renderHeader (data, sectionID) { + switch (sectionID) { + case 'first': + return First Section + default: + return Second Section + } + } + + render () { + return ( + + + + ) + } +} + +const mapStateToProps = (state) => { + return { + // ...redux state to props here + } +} + +const mapDispatchToProps = (dispatch) => { + return { + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(ListviewSectionsExample) diff --git a/ignite/Examples/Containers/ignite-ir-boilerplate/SectionExampleStyle.js b/ignite/Examples/Containers/ignite-ir-boilerplate/SectionExampleStyle.js new file mode 100644 index 0000000..b1dcf0c --- /dev/null +++ b/ignite/Examples/Containers/ignite-ir-boilerplate/SectionExampleStyle.js @@ -0,0 +1,31 @@ +import { StyleSheet } from 'react-native' +import { ApplicationStyles, Metrics, Colors } from '../../../../../DevScreens/DevTheme/' + +export default StyleSheet.create({ + ...ApplicationStyles.screen, + container: { + flex: 1, + marginTop: Metrics.navBarHeight, + backgroundColor: Colors.background + }, + row: { + flex: 1, + backgroundColor: Colors.fire, + marginVertical: Metrics.smallMargin, + justifyContent: 'center' + }, + boldLabel: { + fontWeight: 'bold', + alignSelf: 'center', + color: Colors.snow, + textAlign: 'center', + marginBottom: Metrics.smallMargin + }, + label: { + textAlign: 'center', + color: Colors.snow + }, + listContent: { + marginTop: Metrics.baseMargin + } +}) diff --git a/ignite/ignite.json b/ignite/ignite.json new file mode 100644 index 0000000..5e19975 --- /dev/null +++ b/ignite/ignite.json @@ -0,0 +1,13 @@ +{ + "createdWith": "2.0.0", + "examples": "classic", + "navigation": "react-navigation", + "generators": { + "component": "ignite-ir-boilerplate", + "container": "ignite-ir-boilerplate", + "listview": "ignite-ir-boilerplate", + "redux": "ignite-ir-boilerplate", + "saga": "ignite-ir-boilerplate", + "screen": "ignite-ir-boilerplate" + } +} \ No newline at end of file diff --git a/ignite/plugins/.gitkeep b/ignite/plugins/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/index.android.js b/index.android.js new file mode 100644 index 0000000..1413d43 --- /dev/null +++ b/index.android.js @@ -0,0 +1,5 @@ +import './App/Config/ReactotronConfig' +import { AppRegistry } from 'react-native' +import App from './App/Containers/App' + +AppRegistry.registerComponent('SmartUniApp', () => App) diff --git a/index.ios.js b/index.ios.js new file mode 100644 index 0000000..1413d43 --- /dev/null +++ b/index.ios.js @@ -0,0 +1,5 @@ +import './App/Config/ReactotronConfig' +import { AppRegistry } from 'react-native' +import App from './App/Containers/App' + +AppRegistry.registerComponent('SmartUniApp', () => App) diff --git a/ios/SmartUniApp-tvOS/Info.plist b/ios/SmartUniApp-tvOS/Info.plist new file mode 100644 index 0000000..2fb6a11 --- /dev/null +++ b/ios/SmartUniApp-tvOS/Info.plist @@ -0,0 +1,54 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + NSLocationWhenInUseUsageDescription + + NSAppTransportSecurity + + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + + diff --git a/ios/SmartUniApp-tvOSTests/Info.plist b/ios/SmartUniApp-tvOSTests/Info.plist new file mode 100644 index 0000000..886825c --- /dev/null +++ b/ios/SmartUniApp-tvOSTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/ios/SmartUniApp.xcodeproj/project.pbxproj b/ios/SmartUniApp.xcodeproj/project.pbxproj new file mode 100644 index 0000000..9c7f97c --- /dev/null +++ b/ios/SmartUniApp.xcodeproj/project.pbxproj @@ -0,0 +1,1413 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { +/* Begin PBXBuildFile section */ + 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; + 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; + 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; + 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; + 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; + 00E356F31AD99517003FC87E /* SmartUniAppTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* SmartUniAppTests.m */; }; + 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; + 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; + 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; + 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; + 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 */; }; + 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 */; }; + 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */; }; + 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */; }; + 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */; }; + 2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; }; + 2DCD954D1E0B4F2C00145EB5 /* SmartUniAppTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* SmartUniAppTests.m */; }; + 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; + 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; + A08522CD9B57469E9F882D7D /* libRNDeviceInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64197C88D9134A9C9D6EFC52 /* libRNDeviceInfo.a */; }; + EBD6893CA894429F833445E0 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 03058E4E9B4140D09B348194 /* libRNVectorIcons.a */; }; + 169C10152B904652A735465B /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7FCE1A1B99404F21A2528CAF /* Entypo.ttf */; }; + FEC385A1FE8641AC9BD933A3 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AB67ED10ACB34BD790E822AB /* EvilIcons.ttf */; }; + 9F996B1732C545588F999646 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EADFA6DA40BE4C5982853C39 /* FontAwesome.ttf */; }; + 34C5CE849C6A4B8E9D25CFCB /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A112BB6FF2AE4C0EA817A7C0 /* Foundation.ttf */; }; + F52A382F6BE14B09AEC568CA /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FDD6D7E5371B432DBF37C75E /* Ionicons.ttf */; }; + EE7C4F423AD241B7BB76B66C /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 070B90C52F044D00B14DD678 /* MaterialCommunityIcons.ttf */; }; + 6EDCF81EC7FE4A3A999C2CC7 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5F8135C93C2C42A6A94BBC64 /* MaterialIcons.ttf */; }; + 62992BC21D29489EAC549FBB /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CB755254DB484948A348FD92 /* Octicons.ttf */; }; + 1BDA1EFC8191486A8D8D752D /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DBD3093ECEB847F29E012192 /* SimpleLineIcons.ttf */; }; + 6E39691B94BA4F2BBE14AFD5 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 38638D2259D54FE5AE7865B5 /* Zocial.ttf */; }; + 4DC7A996F02046879F545093 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7104D8F49AA340AA8039C925 /* libReact.a */; }; + 124C110375E240DDB1BBBE47 /* libyoga.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EC63B17CADDE4AEBB9C412B7 /* libyoga.a */; }; + AE020FE96A4F4760BACCAE79 /* libcxxreact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DDB5ECFE4439411B83FD1875 /* libcxxreact.a */; }; + 5A41BA2A907B41BD957449D7 /* libjschelpers.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 180AF255007E4004ACAE6BC9 /* libjschelpers.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTActionSheet; + }; + 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTGeolocation; + }; + 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5115D1A9E6B3D00147676; + remoteInfo = RCTImage; + }; + 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B511DB1A9E6C8500147676; + remoteInfo = RCTNetwork; + }; + 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; + remoteInfo = RCTVibration; + }; + 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 13B07F861A680F5B00A75B9A; + remoteInfo = SmartUniApp; + }; + 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTSettings; + }; + 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3C86DF461ADF2C930047B81A; + remoteInfo = RCTWebSocket; + }; + 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; + remoteInfo = React; + }; + 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7; + remoteInfo = "SmartUniApp-tvOS"; + }; + 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; + remoteInfo = "RCTImage-tvOS"; + }; + 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28471D9B043800D4039D; + remoteInfo = "RCTLinking-tvOS"; + }; + 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28541D9B044C00D4039D; + remoteInfo = "RCTNetwork-tvOS"; + }; + 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28611D9B046600D4039D; + remoteInfo = "RCTSettings-tvOS"; + }; + 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A287B1D9B048500D4039D; + remoteInfo = "RCTText-tvOS"; + }; + 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28881D9B049200D4039D; + remoteInfo = "RCTWebSocket-tvOS"; + }; + 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28131D9B038B00D4039D; + remoteInfo = "React-tvOS"; + }; + 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C059A1DE3340900C268FA; + remoteInfo = yoga; + }; + 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C06751DE3340C00C268FA; + remoteInfo = "yoga-tvOS"; + }; + 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; + remoteInfo = cxxreact; + }; + 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; + remoteInfo = "cxxreact-tvOS"; + }; + 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4; + remoteInfo = jschelpers; + }; + 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4; + remoteInfo = "jschelpers-tvOS"; + }; + 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTAnimation; + }; + 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28201D9B03D100D4039D; + remoteInfo = "RCTAnimation-tvOS"; + }; + 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTLinking; + }; + 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5119B1A9E6C1200147676; + remoteInfo = RCTText; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; + 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; + 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; + 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; + 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; + 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; + 00E356EE1AD99517003FC87E /* SmartUniAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SmartUniAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 00E356F21AD99517003FC87E /* SmartUniAppTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SmartUniAppTests.m; sourceTree = ""; }; + 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; + 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* SmartUniApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SmartUniApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = SmartUniApp/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = SmartUniApp/AppDelegate.m; sourceTree = ""; }; + 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = SmartUniApp/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = SmartUniApp/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = SmartUniApp/main.m; sourceTree = ""; }; + 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; + 2D02E47B1E0B4A5D006451C7 /* SmartUniApp-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SmartUniApp-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2D02E4901E0B4A5D006451C7 /* SmartUniApp-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SmartUniApp-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; + 7C52E54718A643AA854D7173 /* RNDeviceInfo.xcodeproj */ = {isa = PBXFileReference; name = "RNDeviceInfo.xcodeproj"; path = "../node_modules/react-native-device-info/RNDeviceInfo.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; }; + 64197C88D9134A9C9D6EFC52 /* libRNDeviceInfo.a */ = {isa = PBXFileReference; name = "libRNDeviceInfo.a"; path = "libRNDeviceInfo.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; + 0FB21C232DEA4CE5B1F6F95C /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; name = "RNVectorIcons.xcodeproj"; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; }; + 03058E4E9B4140D09B348194 /* libRNVectorIcons.a */ = {isa = PBXFileReference; name = "libRNVectorIcons.a"; path = "libRNVectorIcons.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; + 7FCE1A1B99404F21A2528CAF /* Entypo.ttf */ = {isa = PBXFileReference; name = "Entypo.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + AB67ED10ACB34BD790E822AB /* EvilIcons.ttf */ = {isa = PBXFileReference; name = "EvilIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + EADFA6DA40BE4C5982853C39 /* FontAwesome.ttf */ = {isa = PBXFileReference; name = "FontAwesome.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + A112BB6FF2AE4C0EA817A7C0 /* Foundation.ttf */ = {isa = PBXFileReference; name = "Foundation.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + FDD6D7E5371B432DBF37C75E /* Ionicons.ttf */ = {isa = PBXFileReference; name = "Ionicons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 070B90C52F044D00B14DD678 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; name = "MaterialCommunityIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 5F8135C93C2C42A6A94BBC64 /* MaterialIcons.ttf */ = {isa = PBXFileReference; name = "MaterialIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + CB755254DB484948A348FD92 /* Octicons.ttf */ = {isa = PBXFileReference; name = "Octicons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + DBD3093ECEB847F29E012192 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; name = "SimpleLineIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 38638D2259D54FE5AE7865B5 /* Zocial.ttf */ = {isa = PBXFileReference; name = "Zocial.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + DCE8C318A59649B7BD5D8C3B /* RNI18n.xcodeproj */ = {isa = PBXFileReference; name = "RNI18n.xcodeproj"; path = "../node_modules/react-native-i18n/RNI18n.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; }; + 7104D8F49AA340AA8039C925 /* libReact.a */ = {isa = PBXFileReference; name = "libReact.a"; path = "libReact.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; + EC63B17CADDE4AEBB9C412B7 /* libyoga.a */ = {isa = PBXFileReference; name = "libyoga.a"; path = "libyoga.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; + DDB5ECFE4439411B83FD1875 /* libcxxreact.a */ = {isa = PBXFileReference; name = "libcxxreact.a"; path = "libcxxreact.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; + 180AF255007E4004ACAE6BC9 /* libjschelpers.a */ = {isa = PBXFileReference; name = "libjschelpers.a"; path = "libjschelpers.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 00E356EB1AD99517003FC87E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 146834051AC3E58100842450 /* libReact.a in Frameworks */, + 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, + 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, + 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, + 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, + 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, + 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, + 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, + 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, + 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, + 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, + A08522CD9B57469E9F882D7D /* libRNDeviceInfo.a in Frameworks */, + EBD6893CA894429F833445E0 /* libRNVectorIcons.a in Frameworks */, + 4DC7A996F02046879F545093 /* libReact.a in Frameworks */, + 124C110375E240DDB1BBBE47 /* libyoga.a in Frameworks */, + AE020FE96A4F4760BACCAE79 /* libcxxreact.a in Frameworks */, + 5A41BA2A907B41BD957449D7 /* libjschelpers.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4781E0B4A5D006451C7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */, + 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation-tvOS.a in Frameworks */, + 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */, + 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */, + 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */, + 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */, + 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */, + 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 00C302A81ABCB8CE00DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302B61ABCB90400DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302BC1ABCB91800DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302D41ABCB9D200DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302E01ABCB9EE00DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, + ); + name = Products; + sourceTree = ""; + }; + 00E356EF1AD99517003FC87E /* SmartUniAppTests */ = { + isa = PBXGroup; + children = ( + 00E356F21AD99517003FC87E /* SmartUniAppTests.m */, + 00E356F01AD99517003FC87E /* Supporting Files */, + ); + path = SmartUniAppTests; + sourceTree = ""; + }; + 00E356F01AD99517003FC87E /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 00E356F11AD99517003FC87E /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 139105B71AF99BAD00B5F7CC /* Products */ = { + isa = PBXGroup; + children = ( + 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 139FDEE71B06529A00C62182 /* Products */ = { + isa = PBXGroup; + children = ( + 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, + 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 13B07FAE1A68108700A75B9A /* SmartUniApp */ = { + isa = PBXGroup; + children = ( + 008F07F21AC5B25A0029DE68 /* main.jsbundle */, + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, + 13B07FB01A68108700A75B9A /* AppDelegate.m */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, + 13B07FB71A68108700A75B9A /* main.m */, + ); + name = SmartUniApp; + sourceTree = ""; + }; + 146834001AC3E56700842450 /* Products */ = { + isa = PBXGroup; + children = ( + 146834041AC3E56700842450 /* libReact.a */, + 3DAD3EA31DF850E9000B6D8A /* libReact.a */, + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */, + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */, + 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */, + 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */, + ); + name = Products; + sourceTree = ""; + }; + 5E91572E1DD0AC6500FF2AA8 /* Products */ = { + isa = PBXGroup; + children = ( + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 78C398B11ACF4ADC00677621 /* Products */ = { + isa = PBXGroup; + children = ( + 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, + 146833FF1AC3E56700842450 /* React.xcodeproj */, + 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, + 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, + 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, + 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, + 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, + 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, + 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, + 7C52E54718A643AA854D7173 /* RNDeviceInfo.xcodeproj */, + 0FB21C232DEA4CE5B1F6F95C /* RNVectorIcons.xcodeproj */, + DCE8C318A59649B7BD5D8C3B /* RNI18n.xcodeproj */, + ); + name = Libraries; + sourceTree = ""; + }; + 832341B11AAA6A8300B99B32 /* Products */ = { + isa = PBXGroup; + children = ( + 832341B51AAA6A8300B99B32 /* libRCTText.a */, + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* SmartUniApp */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 00E356EF1AD99517003FC87E /* SmartUniAppTests */, + 83CBBA001A601CBA00E9B192 /* Products */, + C27048CD83A84EEA904F7C7B /* Resources */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* SmartUniApp.app */, + 00E356EE1AD99517003FC87E /* SmartUniAppTests.xctest */, + 2D02E47B1E0B4A5D006451C7 /* SmartUniApp-tvOS.app */, + 2D02E4901E0B4A5D006451C7 /* SmartUniApp-tvOSTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + C27048CD83A84EEA904F7C7B /* Resources */ = { + isa = "PBXGroup"; + children = ( + 7FCE1A1B99404F21A2528CAF /* Entypo.ttf */, + AB67ED10ACB34BD790E822AB /* EvilIcons.ttf */, + EADFA6DA40BE4C5982853C39 /* FontAwesome.ttf */, + A112BB6FF2AE4C0EA817A7C0 /* Foundation.ttf */, + FDD6D7E5371B432DBF37C75E /* Ionicons.ttf */, + 070B90C52F044D00B14DD678 /* MaterialCommunityIcons.ttf */, + 5F8135C93C2C42A6A94BBC64 /* MaterialIcons.ttf */, + CB755254DB484948A348FD92 /* Octicons.ttf */, + DBD3093ECEB847F29E012192 /* SimpleLineIcons.ttf */, + 38638D2259D54FE5AE7865B5 /* Zocial.ttf */, + ); + name = Resources; + sourceTree = ""; + path = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 00E356ED1AD99517003FC87E /* SmartUniAppTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "SmartUniAppTests" */; + buildPhases = ( + 00E356EA1AD99517003FC87E /* Sources */, + 00E356EB1AD99517003FC87E /* Frameworks */, + 00E356EC1AD99517003FC87E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 00E356F51AD99517003FC87E /* PBXTargetDependency */, + ); + name = SmartUniAppTests; + productName = SmartUniAppTests; + productReference = 00E356EE1AD99517003FC87E /* SmartUniAppTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 13B07F861A680F5B00A75B9A /* SmartUniApp */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "SmartUniApp" */; + buildPhases = ( + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SmartUniApp; + productName = "Hello World"; + productReference = 13B07F961A680F5B00A75B9A /* SmartUniApp.app */; + productType = "com.apple.product-type.application"; + }; + 2D02E47A1E0B4A5D006451C7 /* SmartUniApp-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "SmartUniApp-tvOS" */; + buildPhases = ( + 2D02E4771E0B4A5D006451C7 /* Sources */, + 2D02E4781E0B4A5D006451C7 /* Frameworks */, + 2D02E4791E0B4A5D006451C7 /* Resources */, + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "SmartUniApp-tvOS"; + productName = "SmartUniApp-tvOS"; + productReference = 2D02E47B1E0B4A5D006451C7 /* SmartUniApp-tvOS.app */; + productType = "com.apple.product-type.application"; + }; + 2D02E48F1E0B4A5D006451C7 /* SmartUniApp-tvOSTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "SmartUniApp-tvOSTests" */; + buildPhases = ( + 2D02E48C1E0B4A5D006451C7 /* Sources */, + 2D02E48D1E0B4A5D006451C7 /* Frameworks */, + 2D02E48E1E0B4A5D006451C7 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */, + ); + name = "SmartUniApp-tvOSTests"; + productName = "SmartUniApp-tvOSTests"; + productReference = 2D02E4901E0B4A5D006451C7 /* SmartUniApp-tvOSTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 610; + ORGANIZATIONNAME = Facebook; + TargetAttributes = { + 00E356ED1AD99517003FC87E = { + CreatedOnToolsVersion = 6.2; + TestTargetID = 13B07F861A680F5B00A75B9A; + }; + 2D02E47A1E0B4A5D006451C7 = { + CreatedOnToolsVersion = 8.2.1; + ProvisioningStyle = Automatic; + }; + 2D02E48F1E0B4A5D006451C7 = { + CreatedOnToolsVersion = 8.2.1; + ProvisioningStyle = Automatic; + TestTargetID = 2D02E47A1E0B4A5D006451C7; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "SmartUniApp" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; + ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; + }, + { + ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */; + ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + }, + { + ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; + ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; + }, + { + ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; + ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + }, + { + ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; + ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + }, + { + ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; + ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + }, + { + ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; + ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + }, + { + ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; + ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + }, + { + ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; + ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; + }, + { + ProductGroup = 139FDEE71B06529A00C62182 /* Products */; + ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + }, + { + ProductGroup = 146834001AC3E56700842450 /* Products */; + ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* SmartUniApp */, + 00E356ED1AD99517003FC87E /* SmartUniAppTests */, + 2D02E47A1E0B4A5D006451C7 /* SmartUniApp-tvOS */, + 2D02E48F1E0B4A5D006451C7 /* SmartUniApp-tvOSTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTActionSheet.a; + remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTGeolocation.a; + remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTImage.a; + remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTNetwork.a; + remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTVibration.a; + remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTSettings.a; + remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTWebSocket.a; + remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 146834041AC3E56700842450 /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTImage-tvOS.a"; + remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTLinking-tvOS.a"; + remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTNetwork-tvOS.a"; + remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTSettings-tvOS.a"; + remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTText-tvOS.a"; + remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTWebSocket-tvOS.a"; + remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjschelpers.a; + remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjschelpers.a; + remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTAnimation.a; + remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTAnimation-tvOS.a"; + remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTLinking.a; + remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTText.a; + remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 00E356EC1AD99517003FC87E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, + 169C10152B904652A735465B /* Entypo.ttf in Resources */, + FEC385A1FE8641AC9BD933A3 /* EvilIcons.ttf in Resources */, + 9F996B1732C545588F999646 /* FontAwesome.ttf in Resources */, + 34C5CE849C6A4B8E9D25CFCB /* Foundation.ttf in Resources */, + F52A382F6BE14B09AEC568CA /* Ionicons.ttf in Resources */, + EE7C4F423AD241B7BB76B66C /* MaterialCommunityIcons.ttf in Resources */, + 6EDCF81EC7FE4A3A999C2CC7 /* MaterialIcons.ttf in Resources */, + 62992BC21D29489EAC549FBB /* Octicons.ttf in Resources */, + 1BDA1EFC8191486A8D8D752D /* SimpleLineIcons.ttf in Resources */, + 6E39691B94BA4F2BBE14AFD5 /* Zocial.ttf in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4791E0B4A5D006451C7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48E1E0B4A5D006451C7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh"; + }; + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native Code And Images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 00E356EA1AD99517003FC87E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 00E356F31AD99517003FC87E /* SmartUniAppTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, + 13B07FC11A68108700A75B9A /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4771E0B4A5D006451C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48C1E0B4A5D006451C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2DCD954D1E0B4F2C00145EB5 /* SmartUniAppTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 13B07F861A680F5B00A75B9A /* SmartUniApp */; + targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; + }; + 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2D02E47A1E0B4A5D006451C7 /* SmartUniApp-tvOS */; + targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 13B07FB21A68108700A75B9A /* Base */, + ); + name = LaunchScreen.xib; + path = SmartUniApp; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 00E356F61AD99517003FC87E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = SmartUniAppTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SmartUniApp.app/SmartUniApp"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-i18n/RNI18n", + ); + }; + name = Debug; + }; + 00E356F71AD99517003FC87E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + INFOPLIST_FILE = SmartUniAppTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SmartUniApp.app/SmartUniApp"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-i18n/RNI18n", + ); + }; + name = Release; + }; + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + INFOPLIST_FILE = SmartUniApp/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_NAME = SmartUniApp; + VERSIONING_SYSTEM = "apple-generic"; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-i18n/RNI18n", + ); + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = SmartUniApp/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_NAME = SmartUniApp; + VERSIONING_SYSTEM = "apple-generic"; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-i18n/RNI18n", + ); + }; + name = Release; + }; + 2D02E4971E0B4A5E006451C7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "SmartUniApp-tvOS/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.SmartUniApp-tvOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.2; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-i18n/RNI18n", + ); + }; + name = Debug; + }; + 2D02E4981E0B4A5E006451C7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "SmartUniApp-tvOS/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.SmartUniApp-tvOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.2; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-i18n/RNI18n", + ); + }; + name = Release; + }; + 2D02E4991E0B4A5E006451C7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "SmartUniApp-tvOSTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.SmartUniApp-tvOSTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SmartUniApp-tvOS.app/SmartUniApp-tvOS"; + TVOS_DEPLOYMENT_TARGET = 10.1; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + }; + name = Debug; + }; + 2D02E49A1E0B4A5E006451C7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "SmartUniApp-tvOSTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.SmartUniApp-tvOSTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SmartUniApp-tvOS.app/SmartUniApp-tvOS"; + TVOS_DEPLOYMENT_TARGET = 10.1; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "SmartUniAppTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00E356F61AD99517003FC87E /* Debug */, + 00E356F71AD99517003FC87E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "SmartUniApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "SmartUniApp-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2D02E4971E0B4A5E006451C7 /* Debug */, + 2D02E4981E0B4A5E006451C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "SmartUniApp-tvOSTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2D02E4991E0B4A5E006451C7 /* Debug */, + 2D02E49A1E0B4A5E006451C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "SmartUniApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/ios/SmartUniApp.xcodeproj/xcshareddata/xcschemes/SmartUniApp-tvOS.xcscheme b/ios/SmartUniApp.xcodeproj/xcshareddata/xcschemes/SmartUniApp-tvOS.xcscheme new file mode 100644 index 0000000..52d0ee0 --- /dev/null +++ b/ios/SmartUniApp.xcodeproj/xcshareddata/xcschemes/SmartUniApp-tvOS.xcscheme @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/SmartUniApp.xcodeproj/xcshareddata/xcschemes/SmartUniApp.xcscheme b/ios/SmartUniApp.xcodeproj/xcshareddata/xcschemes/SmartUniApp.xcscheme new file mode 100644 index 0000000..76d82db --- /dev/null +++ b/ios/SmartUniApp.xcodeproj/xcshareddata/xcschemes/SmartUniApp.xcscheme @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/SmartUniApp/AppDelegate.h b/ios/SmartUniApp/AppDelegate.h new file mode 100644 index 0000000..a9654d5 --- /dev/null +++ b/ios/SmartUniApp/AppDelegate.h @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@interface AppDelegate : UIResponder + +@property (nonatomic, strong) UIWindow *window; + +@end diff --git a/ios/SmartUniApp/AppDelegate.m b/ios/SmartUniApp/AppDelegate.m new file mode 100644 index 0000000..3037b08 --- /dev/null +++ b/ios/SmartUniApp/AppDelegate.m @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "AppDelegate.h" + +#import +#import + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + NSURL *jsCodeLocation; + + jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; + + RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation + moduleName:@"SmartUniApp" + initialProperties:nil + launchOptions:launchOptions]; + rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIViewController *rootViewController = [UIViewController new]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + return YES; +} + +@end diff --git a/ios/SmartUniApp/Base.lproj/LaunchScreen.xib b/ios/SmartUniApp/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..daa869f --- /dev/null +++ b/ios/SmartUniApp/Base.lproj/LaunchScreen.xib @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/SmartUniApp/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/SmartUniApp/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/ios/SmartUniApp/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/SmartUniApp/Info.plist b/ios/SmartUniApp/Info.plist new file mode 100644 index 0000000..ad8a6e3 --- /dev/null +++ b/ios/SmartUniApp/Info.plist @@ -0,0 +1,68 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + SmartUniApp + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + NSLocationWhenInUseUsageDescription + + NSAppTransportSecurity + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + UIAppFonts + + Entypo.ttf + EvilIcons.ttf + FontAwesome.ttf + Foundation.ttf + Ionicons.ttf + MaterialCommunityIcons.ttf + MaterialIcons.ttf + Octicons.ttf + SimpleLineIcons.ttf + Zocial.ttf + + + diff --git a/ios/SmartUniApp/main.m b/ios/SmartUniApp/main.m new file mode 100644 index 0000000..3d767fc --- /dev/null +++ b/ios/SmartUniApp/main.m @@ -0,0 +1,18 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/ios/SmartUniAppTests/Info.plist b/ios/SmartUniAppTests/Info.plist new file mode 100644 index 0000000..886825c --- /dev/null +++ b/ios/SmartUniAppTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/ios/SmartUniAppTests/SmartUniAppTests.m b/ios/SmartUniAppTests/SmartUniAppTests.m new file mode 100644 index 0000000..e355162 --- /dev/null +++ b/ios/SmartUniAppTests/SmartUniAppTests.m @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import + +#import +#import + +#define TIMEOUT_SECONDS 600 +#define TEXT_TO_LOOK_FOR @"Welcome to React Native!" + +@interface SmartUniAppTests : XCTestCase + +@end + +@implementation SmartUniAppTests + +- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test +{ + if (test(view)) { + return YES; + } + for (UIView *subview in [view subviews]) { + if ([self findSubviewInView:subview matching:test]) { + return YES; + } + } + return NO; +} + +- (void)testRendersWelcomeScreen +{ + UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; + NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; + BOOL foundElement = NO; + + __block NSString *redboxError = nil; + RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { + if (level >= RCTLogLevelError) { + redboxError = message; + } + }); + + while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { + [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + + foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { + if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { + return YES; + } + return NO; + }]; + } + + RCTSetLogFunction(RCTDefaultLogFunction); + + XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); + XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); +} + + +@end diff --git a/package.json b/package.json new file mode 100644 index 0000000..d5a1023 --- /dev/null +++ b/package.json @@ -0,0 +1,105 @@ +{ + "name": "SmartUniApp", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node node_modules/react-native/local-cli/cli.js start", + "test": "jest", + "clean": "rm -rf $TMPDIR/react-* && watchman watch-del-all && npm cache clean --force", + "clean:android": "cd android/ && ./gradlew clean && cd .. && react-native run-android", + "newclear": "rm -rf $TMPDIR/react-* && watchman watch-del-all && rm -rf ios/build && rm -rf node_modules/ && npm cache clean --force && npm i", + "test:watch": "jest --watch", + "updateSnapshot": "jest --updateSnapshot", + "coverage": "jest --coverage && open coverage/lcov-report/index.html || xdg-open coverage/lcov-report/index.html", + "android:build": "cd android && ./gradlew assembleRelease", + "android:install": "cd android && ./gradlew assembleRelease && ./gradlew installRelease", + "android:hockeyapp": "cd android && ./gradlew assembleRelease && puck -submit=auto app/build/outputs/apk/app-release.apk", + "android:devices": "$ANDROID_HOME/platform-tools/adb devices", + "android:logcat": "$ANDROID_HOME/platform-tools/adb logcat *:S ReactNative:V ReactNativeJS:V", + "android:shake": "$ANDROID_HOME/platform-tools/adb devices | grep '\\t' | awk '{print $1}' | sed 's/\\s//g' | xargs -I {} $ANDROID_HOME/platform-tools/adb -s {} shell input keyevent 82", + "precommit": "npm run git-hook", + "prepush": "npm run git-hook", + "git-hook": "npm run lint -s && npm run test -s", + "lint": "standard --verbose | snazzy", + "lintdiff": "git diff --name-only --cached --relative | grep '\\.js$' | xargs standard | snazzy", + "fixcode": "standard --fix" + }, + "dependencies": { + "apisauce": "^0.14.0", + "format-json": "^1.0.3", + "lodash": "^4.17.2", + "prop-types": "^15.5.10", + "querystringify": "0.0.4", + "ramda": "^0.24.1", + "react": "16.0.0-alpha.12", + "react-native": "0.45.1", + "react-native-animatable": "^1.2.3", + "react-native-config": "^0.2.1", + "react-native-device-info": "0.10.2", + "react-native-drawer": "^2.3.0", + "react-native-i18n": "1.0.0", + "react-native-vector-icons": "4.1.1", + "react-navigation": "1.0.0-beta.11", + "react-redux": "^5.0.2", + "redux": "^3.6.0", + "redux-persist": "^4.1.0", + "redux-saga": "^0.14.3", + "reduxsauce": "0.4.1", + "seamless-immutable": "^7.0.1" + }, + "devDependencies": { + "babel-eslint": "7.1.1", + "babel-jest": "20.0.3", + "babel-plugin-ignite-ignore-reactotron": "^0.3.0", + "babel-preset-es2015": "^6.18.0", + "babel-preset-react-native": "2.0.0", + "enzyme": "^2.6.0", + "husky": "^0.13.1", + "ignite-animatable": "^1.0.0", + "ignite-dev-screens": "^2.0.1", + "ignite-i18n": "^1.0.0", + "ignite-ir-boilerplate": "^2.0.2", + "ignite-standard": "^1.0.0", + "ignite-vector-icons": "^1.0.0", + "jest": "20.0.4", + "mockery": "^2.0.0", + "react-addons-test-utils": "~15.4.1", + "react-dom": "~15.4.1", + "react-test-renderer": "16.0.0-alpha.12", + "reactotron-react-native": "^1.12.0", + "reactotron-redux": "^1.11.1", + "reactotron-redux-saga": "^1.11.1", + "snazzy": "^7.0.0", + "standard": "10.0.2" + }, + "jest": { + "testMatch": [ + "**/Tests/**/*.js", + "**/?(*.)(spec|test).js?(x)" + ], + "testPathIgnorePatterns": [ + "/node_modules/", + "Tests/Setup.js" + ], + "setupFiles": [ + "./Tests/Setup" + ], + "preset": "react-native" + }, + "config": {}, + "standard": { + "parser": "babel-eslint", + "globals": [ + "describe", + "test", + "jest", + "expect", + "fetch", + "navigator", + "__DEV__", + "XMLHttpRequest", + "FormData", + "React$Element" + ] + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..9722480 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5412 @@ +# 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-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.4: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +acorn@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75" + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + +ajv-keywords@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" + +ajv@^4.7.0, 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-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + +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.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +apisauce@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/apisauce/-/apisauce-0.14.1.tgz#f5ccec9a1e802408feeb9e3230d1f440f20520c2" + dependencies: + axios "^0.16.2" + ramda "^0.24.1" + +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.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +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-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1, 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" + +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" + +arraybuffer.slice@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" + +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.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +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.1.4, async@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" + 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" + +axios@^0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.16.2.tgz#ba4f92f17167dfbab40983785454b9ac149c3c6d" + dependencies: + follow-redirects "^1.2.3" + is-buffer "^1.1.5" + +babel-code-frame@^6.16.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.0, babel-core@^6.24.1, babel-core@^6.26.0, babel-core@^6.7.2: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" + slash "^1.0.0" + source-map "^0.5.6" + +babel-eslint@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.1.1.tgz#8a6a884f085aa7060af69cfc77341c2f99370fb2" + dependencies: + babel-code-frame "^6.16.0" + babel-traverse "^6.15.0" + babel-types "^6.15.0" + babylon "^6.13.0" + lodash.pickby "^4.6.0" + +babel-generator@^6.18.0, babel-generator@^6.24.1, babel-generator@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.6" + trim-right "^1.0.1" + +babel-helper-builder-react-jsx@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + esutils "^2.0.2" + +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.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +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.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +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.3, babel-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.3" + +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.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-ignite-ignore-reactotron@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-ignite-ignore-reactotron/-/babel-plugin-ignite-ignore-reactotron-0.3.0.tgz#1801b207c7e3de5b3482671ca3cbb75dd4abd29e" + +babel-plugin-istanbul@^4.0.0: + 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.2" + test-exclude "^4.1.1" + +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-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.22.0, 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.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.24.1, 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.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.24.1, 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.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.22.0, 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-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^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.24.1, 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.22.0, 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-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@6.x, babel-plugin-transform-es2015-modules-commonjs@^6.24.1, 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.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^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.24.1, 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.24.1, 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.22.0, 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, babel-plugin-transform-es2015-sticky-regex@^6.24.1: + 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.22.0, 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-typeof-symbol@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@6.x, babel-plugin-transform-es2015-unicode-regex@^6.24.1: + 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.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-react-display-name@^6.5.0, babel-plugin-transform-react-display-name@^6.8.0: + 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" + +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.24.1, babel-plugin-transform-regenerator@^6.5.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + +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.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + +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-es2015@^6.18.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +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.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.4.tgz#22f358e6654073acf61e47a052a777d7bccf03af" + 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.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" + dependencies: + babel-plugin-jest-hoist "^20.0.3" + +babel-preset-react-native@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-2.0.0.tgz#c26c7066c7399df30926fa03c012ef87f2cce5b7" + 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-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.24.1, babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.13.0, babylon@^6.17.0, babylon@^6.17.4, babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + +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.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" + +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" + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + dependencies: + callsite "1.0.0" + +big-integer@^1.6.7: + version "1.6.24" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.24.tgz#1ed84d018ac3c1c72b307e7f7d94008e8ee20311" + +blob@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" + +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" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +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.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +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" + +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" + +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" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +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" + +cheerio@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + +clamp@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/clamp/-/clamp-1.0.1.tgz#66a0e64011816e37196828fdc8c8c147312c8634" + +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.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +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.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + +component-emitter@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + +compressible@~2.0.5: + version "2.0.11" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.11.tgz#16718a75de283ed8e604041625a2064586797d8a" + dependencies: + mime-db ">= 1.29.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.5.0, concat-stream@^1.5.2, 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" + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + +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.4.0, convert-source-map@^1.5.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, core-js@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086" + +core-util-is@1.0.2, 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" + +create-react-class@^15.5.2: + version "15.6.0" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +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" + +css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + +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" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +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-log@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" + +debug@2.2.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" + +debug@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" + dependencies: + ms "0.7.2" + +debug@2.6.8, debug@^2.1.1, debug@^2.2.0, debug@^2.4.5, debug@^2.6.3, debug@^2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +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" + +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" + +deglob@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.0.tgz#4d44abe16ef32c779b4972bd141a80325029a14a" + dependencies: + find-root "^1.0.0" + glob "^7.0.5" + ignore "^3.0.9" + pkg-config "^1.1.0" + run-parallel "^1.1.2" + uniq "^1.0.1" + +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +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.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +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.3.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" + +doctrine@1.5.0, doctrine@^1.2.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +dom-serializer@0, dom-serializer@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" + dependencies: + dom-serializer "0" + domelementtype "1" + +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" + +engine.io-client@~1.8.4: + version "1.8.4" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.4.tgz#9fe85dee25853ca6babe25bd2ad68710863e91c2" + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "2.3.3" + engine.io-parser "1.3.2" + has-cors "1.1.0" + indexof "0.0.1" + parsejson "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + ws "1.1.2" + xmlhttprequest-ssl "1.5.3" + yeast "0.1.2" + +engine.io-parser@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a" + dependencies: + after "0.8.2" + arraybuffer.slice "0.0.6" + base64-arraybuffer "0.1.5" + blob "0.0.4" + has-binary "0.1.7" + wtf-8 "1.0.0" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +enzyme@^2.6.0: + version "2.9.1" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.9.1.tgz#07d5ce691241240fb817bf2c4b18d6e530240df6" + dependencies: + cheerio "^0.22.0" + function.prototype.name "^1.0.0" + is-subset "^0.1.1" + lodash "^4.17.4" + object-is "^1.0.1" + object.assign "^4.0.4" + object.entries "^1.0.4" + object.values "^1.0.4" + prop-types "^15.5.10" + uuid "^3.0.1" + +"errno@>=0.1.1 <0.2.0-0", errno@^0.1.4: + 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" + +es-abstract@^1.6.1, es-abstract@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.0.tgz#3b00385e85729932beffa9163bbea1234e932914" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.0" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.29" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.29.tgz#768eb2dfc4957bcf35fa0568f193ab71ede53fd8" + dependencies: + es6-iterator "2" + es6-symbol "~3.1" + +es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-symbol "^3.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +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" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-config-standard-jsx@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.1.tgz#cd4e463d0268e2d9e707f61f42f73f5b3333c642" + +eslint-config-standard@10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591" + +eslint-import-resolver-node@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" + dependencies: + debug "^2.2.0" + object-assign "^4.0.1" + resolve "^1.1.6" + +eslint-module-utils@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" + dependencies: + debug "^2.6.8" + pkg-dir "^1.0.0" + +eslint-plugin-import@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.2.0" + doctrine "1.5.0" + eslint-import-resolver-node "^0.2.0" + eslint-module-utils "^2.0.0" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + pkg-up "^1.0.0" + +eslint-plugin-node@~4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz#c04390ab8dbcbb6887174023d6f3a72769e63b97" + dependencies: + ignore "^3.0.11" + minimatch "^3.0.2" + object-assign "^4.0.1" + resolve "^1.1.7" + semver "5.3.0" + +eslint-plugin-promise@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca" + +eslint-plugin-react@~6.10.0: + version "6.10.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" + 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" + +eslint-plugin-standard@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz#34d0c915b45edc6f010393c7eef3823b08565cf2" + +eslint@~3.19.0: + version "3.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" + dependencies: + babel-code-frame "^6.16.0" + chalk "^1.1.3" + concat-stream "^1.5.2" + debug "^2.1.1" + doctrine "^2.0.0" + escope "^3.6.0" + espree "^3.4.0" + esquery "^1.0.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + glob "^7.0.3" + globals "^9.14.0" + ignore "^3.2.0" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "^3.5.1" + json-stable-stringify "^1.0.0" + levn "^0.3.0" + lodash "^4.0.0" + mkdirp "^0.5.0" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.1" + pluralize "^1.2.1" + progress "^1.1.8" + require-uncached "^1.0.2" + shelljs "^0.7.5" + strip-bom "^3.0.0" + strip-json-comments "~2.0.1" + table "^3.7.8" + text-table "~0.2.0" + user-home "^2.0.0" + +espree@^3.4.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.0.tgz#98358625bdd055861ea27e2867ea729faf463d8d" + dependencies: + acorn "^5.1.1" + acorn-jsx "^3.0.0" + +esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + dependencies: + estraverse "^4.1.0" + object-assign "^4.0.1" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +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.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +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.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.1, fbjs@^0.8.12, fbjs@^0.8.4, fbjs@^0.8.9: + version "0.8.14" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.14.tgz#d1dbe2be254c35a91e09f31f9cd50a40b2a0ed1c" + 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" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +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-parent-dir@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + +find-root@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, 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" + +flat-cache@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +follow-redirects@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.2.4.tgz#355e8f4d16876b43f577b0d5ce2668b9723214ea" + dependencies: + debug "^2.4.5" + +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" + +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" + +form-data@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.2.0.tgz#9a5e3b9295f980b2623cf64fa238b14cebca707b" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +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" + +format-json@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/format-json/-/format-json-1.0.3.tgz#268e3d3e169792ff49bb5b030f22c87ca1c2cd9f" + +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" + +function-bind@^1.0.2, function-bind@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + +function.prototype.name@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.3.tgz#0099ae5572e9dd6f03c97d023fd92bcc5e639eac" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + is-callable "^1.1.3" + +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" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.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" + +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + +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.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +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.14.0, globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +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" + +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.10" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" + 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-binary@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c" + dependencies: + isarray "0.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + +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" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +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" + +hoist-non-react-statics@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" + +hoist-non-react-statics@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.0.tgz#ede16318c2ff1f9fe3a025396ba06fd4c44608bb" + +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.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +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" + +htmlparser2@^3.9.1: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + +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" + +husky@^0.13.1: + version "0.13.4" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.13.4.tgz#48785c5028de3452a51c48c12c4f94b2124a1407" + dependencies: + chalk "^1.1.3" + find-parent-dir "^0.3.0" + is-ci "^1.0.9" + normalize-path "^1.0.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.18" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" + +ignite-animatable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ignite-animatable/-/ignite-animatable-1.0.0.tgz#4897448fb6118cb8b5071404bf97d33793383b5f" + +ignite-dev-screens@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ignite-dev-screens/-/ignite-dev-screens-2.0.1.tgz#e89785d671a7d96988812499c7515af3dd2aa96e" + +ignite-i18n@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ignite-i18n/-/ignite-i18n-1.0.0.tgz#4e7f5ecebf00ceeac0b52a1a2fb5227b5ecb3faa" + +ignite-ir-boilerplate@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ignite-ir-boilerplate/-/ignite-ir-boilerplate-2.0.2.tgz#64d5d015d93ad019febc3922483d5a867fa98e6f" + dependencies: + ramda "^0.23.0" + +ignite-standard@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ignite-standard/-/ignite-standard-1.0.0.tgz#76ad70395d3e8a382dcf1395761e1ae19b6d0849" + dependencies: + snazzy "^7.0.0" + +ignite-vector-icons@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ignite-vector-icons/-/ignite-vector-icons-1.0.0.tgz#90d2d4cddb4578d0942aad56e6e04e2f42c59fdb" + +ignore@^3.0.11, ignore@^3.0.9, ignore@^3.2.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" + +image-size@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.3.5.tgz#83240eab2fb5b00b04aab8c74b0471e9cba7ad8c" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +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.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + 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" + +interpret@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" + +invariant@^2.0.0, invariant@^2.2.2: + 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-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, is-ci@^1.0.9: + 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.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" + 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-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-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-my-json-valid@^2.10.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.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" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-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-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.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-resolvable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" + dependencies: + tryit "^1.0.1" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-subset@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + +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" + +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, 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.11" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.11.tgz#fcc0b461e2b3bda71e305155138238768257d9de" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.0.7" + istanbul-lib-instrument "^1.7.4" + 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.1, 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.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.4.2, istanbul-lib-instrument@^1.7.2, istanbul-lib-instrument@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.4.tgz#e9fd920e4767f3d19edc765e2d6b3f5ccbd0eea8" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.17.4" + istanbul-lib-coverage "^1.1.1" + semver "^5.3.0" + +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.1" + 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.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.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +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" + +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.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" + 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" + 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.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" + 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" + dependencies: + chalk "^1.1.3" + diff "^3.2.0" + jest-matcher-utils "^20.0.3" + pretty-format "^20.0.3" + +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" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + jsdom "^9.12.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" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + +jest-haste-map@^20.0.4: + version "20.0.5" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.5.tgz#abad74efb1a005974a7b6517e11010709cab9112" + 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" + 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" + +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" + dependencies: + chalk "^1.1.3" + pretty-format "^20.0.3" + +jest-matchers@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" + 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-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" + dependencies: + chalk "^1.1.3" + 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-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-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" + dependencies: + jest-regex-util "^20.0.3" + +jest-resolve@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" + dependencies: + browser-resolve "^1.11.2" + is-builtin-module "^1.0.0" + resolve "^1.3.2" + +jest-runtime@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" + dependencies: + babel-core "^6.0.0" + babel-jest "^20.0.3" + 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" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + strip-bom "3.0.0" + yargs "^7.0.2" + +jest-snapshot@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" + dependencies: + chalk "^1.1.3" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-util "^20.0.3" + natural-compare "^1.4.0" + pretty-format "^20.0.3" + +jest-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" + 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" + 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" + dependencies: + chalk "^1.1.3" + jest-matcher-utils "^20.0.3" + leven "^2.1.0" + pretty-format "^20.0.3" + +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.4" + +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, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@^3.5.1, js-yaml@^3.7.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +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.0, 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, 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" + +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" + +json5@^0.5.1: + 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" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jsx-ast-utils@^1.3.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" + +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" + +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" + 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, 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" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash-es@^4.17.4, lodash-es@^4.2.0, lodash-es@^4.2.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" + +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.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + +lodash.cond@^4.3.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" + +lodash.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + +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.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + +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.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + +lodash.merge@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" + +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.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + +lodash.pickby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + +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.0.0, lodash@^4.14.0, lodash@^4.16.6, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, 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, loose-envify@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +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-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + dependencies: + readable-stream "^2.0.1" + +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.9" + resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.9.tgz#bd151f2ce34cf01a76ca400ab95c012b102d8f71" + dependencies: + debug "2.6.8" + methods "~1.1.2" + parseurl "~1.3.1" + vary "~1.1.1" + +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.29.0 < 2", mime-db@~1.29.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" + +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.16" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" + dependencies: + mime-db "~1.29.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, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +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" + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +mitt@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.1.2.tgz#380e61480d6a615b660f07abb60d51e0a4e4bed6" + +mkdirp@^0.5.0, 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" + +mockery@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mockery/-/mockery-2.1.0.tgz#5b0aef1ff564f0f8139445e165536c7909713470" + +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.7.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.2.tgz#c54e9aac57e432875233525f3c891c4159ffefd7" + 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.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + +normalize-path@^2.0.0, 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" + +nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + +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.4.1" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.1.tgz#7ae9b07b0ea804db7e25f05cb5fe4097d4e4949f" + +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, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + +object-is@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" + +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.entries@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +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" + +object.values@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.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, optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +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" + +parsejson@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab" + dependencies: + better-assert "~1.0.0" + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + dependencies: + better-assert "~1.0.0" + +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, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-to-regexp@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + dependencies: + isarray "0.0.1" + +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" + +pkg-conf@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.0.0.tgz#071c87650403bccfb9c627f58751bfe47c067279" + dependencies: + find-up "^2.0.0" + load-json-file "^2.0.0" + +pkg-config@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4" + dependencies: + debug-log "^1.0.0" + find-root "^1.0.0" + xtend "^4.0.1" + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + +pkg-up@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" + dependencies: + find-up "^1.0.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: + base64-js "0.0.8" + util-deprecate "1.0.2" + xmlbuilder "4.0.0" + xmldom "0.1.x" + +pluralize@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" + +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.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" + 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, private@^0.1.7: + 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" + +progress@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.8: + 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" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +pseudomap@^1.0.2: + 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" + +querystringify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" + +ramda@^0.22.1: + version "0.22.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.22.1.tgz#031da0c3df417c5b33c96234757eb37033f36a0e" + +ramda@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.23.0.tgz#ccd13fff73497a93974e3e86327bfd87bd6e8e2b" + +ramda@^0.24.1: + version "0.24.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" + +ramdasauce@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ramdasauce/-/ramdasauce-1.2.0.tgz#7c0da39ffa1b547268c78536fddad9c49f0d12cb" + dependencies: + ramda "^0.23.0" + +ramdasauce@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ramdasauce/-/ramdasauce-2.1.0.tgz#65ea157a9cfc17841a7dd6499d3f9f421dc2eb36" + dependencies: + ramda "^0.24.1" + +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.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +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-addons-test-utils@~15.4.1: + version "15.4.2" + resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.4.2.tgz#93bcaa718fcae7360d42e8fb1c09756cc36302a2" + dependencies: + fbjs "^0.8.4" + object-assign "^4.1.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.1.0" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.0.tgz#8d131ae07ae02f08df60744eb2cf2de4fcb325f1" + +react-devtools-core@^2.1.8: + version "2.5.0" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-2.5.0.tgz#5ad179f88f22d205940721e38e4ecc3a2d35bf03" + dependencies: + shell-quote "^1.6.1" + ws "^2.0.3" + +react-dom@~15.4.1: + version "15.4.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.2.tgz#015363f05b0a1fd52ae9efdd3a0060d90695208f" + dependencies: + fbjs "^0.8.1" + loose-envify "^1.1.0" + object-assign "^4.1.0" + +react-native-animatable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/react-native-animatable/-/react-native-animatable-1.2.3.tgz#d0f0bd694833b934f3aaa1275739228b786ecb4b" + dependencies: + prop-types "^15.5.10" + +react-native-config@^0.2.1: + version "0.2.5" + resolved "https://registry.yarnpkg.com/react-native-config/-/react-native-config-0.2.5.tgz#1d804b77de381a02aa35974c95e1bec0c8286485" + +react-native-device-info@0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/react-native-device-info/-/react-native-device-info-0.10.2.tgz#350cd68ed43839022ddea0a3a423439f16fa4fba" + +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.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/react-native-drawer-layout-polyfill/-/react-native-drawer-layout-polyfill-1.3.2.tgz#192c84d7a5a6b8a6d2be2c7daa5e4164518d0cc7" + dependencies: + react-native-drawer-layout "1.3.2" + +react-native-drawer-layout@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/react-native-drawer-layout/-/react-native-drawer-layout-1.3.2.tgz#b9740d7663a1dc4f88a61b9c6d93d2d948ea426e" + dependencies: + react-native-dismiss-keyboard "1.0.0" + +react-native-drawer@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/react-native-drawer/-/react-native-drawer-2.4.0.tgz#e12aceb26bf95795b7d062838feaac94c7700c04" + dependencies: + prop-types "^15.5.8" + tween-functions "^1.0.1" + +react-native-i18n@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/react-native-i18n/-/react-native-i18n-1.0.0.tgz#0c407d9ebb846aae1aa5e05de6503008553f02fd" + +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-vector-icons@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/react-native-vector-icons/-/react-native-vector-icons-4.1.1.tgz#9ac75bde77d9243346668c51dca7756775428087" + dependencies: + lodash "^4.0.0" + prop-types "^15.5.8" + yargs "^6.3.0" + +react-native@0.45.1: + version "0.45.1" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.45.1.tgz#b3283c4a88233421f9c662a2ff1a4ccc8a9f07c0" + dependencies: + absolute-path "^0.0.0" + art "^0.10.0" + async "^2.4.0" + babel-core "^6.24.1" + babel-generator "^6.24.1" + 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.2" + babel-preset-react-native "^1.9.1" + babel-register "^6.24.1" + babel-runtime "^6.23.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.17.0" + 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" + create-react-class "^15.5.2" + debug "^2.2.0" + denodeify "^1.2.1" + errno ">=0.1.1 <0.2.0-0" + event-target-shim "^1.0.5" + fbjs "0.8.12" + 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" + inquirer "^0.12.0" + jest-haste-map "^20.0.4" + joi "^6.6.1" + json-stable-stringify "^1.0.1" + json5 "^0.4.0" + left-pad "^1.1.3" + lodash "^4.16.6" + merge-stream "^1.0.1" + 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" + prop-types "^15.5.8" + react-clone-referenced-element "^1.0.1" + react-devtools-core "^2.1.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" + write-file-atomic "^1.2.0" + ws "^1.1.0" + xcode "^0.9.1" + xmldoc "^0.4.0" + xpipe "^1.0.5" + xtend ">=4.0.0 <4.1.0-0" + yargs "^6.4.0" + +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.12" + hoist-non-react-statics "^1.2.0" + path-to-regexp "^1.7.0" + 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" + 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-redux@^5.0.2: + version "5.0.6" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946" + dependencies: + hoist-non-react-statics "^2.2.1" + invariant "^2.0.0" + lodash "^4.2.0" + lodash-es "^4.2.0" + loose-envify "^1.1.0" + prop-types "^15.5.10" + +react-test-renderer@16.0.0-alpha.12: + version "16.0.0-alpha.12" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.0.0-alpha.12.tgz#9e4cc5d8ce8bfca72778340de3e1454b9d6c0cc5" + 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.12: + version "16.0.0-alpha.12" + resolved "https://registry.yarnpkg.com/react/-/react-16.0.0-alpha.12.tgz#8c59485281485df319b6f77682d8dd0621c08194" + dependencies: + create-react-class "^15.5.2" + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + prop-types "^15.5.6" + +reactotron-core-client@^1.12.2: + version "1.12.2" + resolved "https://registry.yarnpkg.com/reactotron-core-client/-/reactotron-core-client-1.12.2.tgz#fbd20b7f18f4b4bca2458316f3b0a2f20bb68244" + dependencies: + json-stringify-safe "^5.0.1" + ramda "^0.24.1" + ramdasauce "^2.0.0" + +reactotron-react-native@^1.12.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/reactotron-react-native/-/reactotron-react-native-1.12.2.tgz#5fc7f9d651a39ec91ee2810a7d3e2f49c81e0243" + dependencies: + json-stringify-safe "^5.0.1" + mitt "^1.1.2" + prop-types "^15.5.10" + ramda "^0.24.1" + ramdasauce "^2.0.0" + reactotron-core-client "^1.12.2" + rn-host-detect "^1.1.3" + socket.io-client "~1.7.3" + +reactotron-redux-saga@^1.11.1: + version "1.12.2" + resolved "https://registry.yarnpkg.com/reactotron-redux-saga/-/reactotron-redux-saga-1.12.2.tgz#12a3969e9928d83b861b15246d8ccc75e79b2cc8" + dependencies: + ramda "^0.24.1" + ramdasauce "^2.0.0" + reactotron-core-client "^1.12.2" + redux "^3.7.1" + redux-saga "^0.15.3" + +reactotron-redux@^1.11.1: + version "1.12.2" + resolved "https://registry.yarnpkg.com/reactotron-redux/-/reactotron-redux-1.12.2.tgz#8a10f3804dce1940d4bb8b8cfc551a0d7af85164" + dependencies: + ramda "^0.24.1" + ramdasauce "^2.0.0" + reactotron-core-client "^1.12.2" + redux "^3.7.1" + +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.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +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" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +redux-persist@^4.1.0: + version "4.8.3" + resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-4.8.3.tgz#fbad95e7582483635c91a3dd83da4789e7a09107" + dependencies: + json-stringify-safe "^5.0.1" + lodash "^4.17.4" + lodash-es "^4.17.4" + +redux-saga@^0.14.3: + version "0.14.8" + resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-0.14.8.tgz#ad01afabe02ec41a17df54e2e09aa236b30a7732" + +redux-saga@^0.15.3: + version "0.15.6" + resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-0.15.6.tgz#8638dc522de6c6c0a496fe8b2b5466287ac2dc4d" + +redux@^3.6.0, redux@^3.7.1: + version "3.7.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.3" + +reduxsauce@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/reduxsauce/-/reduxsauce-0.4.1.tgz#ee5578c643a85f7866934e6b97db23bfec861b56" + dependencies: + ramda "^0.22.1" + ramdasauce "^1.1.1" + redux "^3.6.0" + +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regenerator-runtime@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + +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.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + 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.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +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" + +require-uncached@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" + 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.2.8, 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" + +rn-host-detect@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/rn-host-detect/-/rn-host-detect-1.1.3.tgz#242d76e2fa485c48d751416e65b7cce596969e91" + +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" + +run-parallel@^1.1.2: + version "1.1.6" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.6.tgz#29003c9a2163e01e2d2dfc90575f2c6c1d61a039" + +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.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +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.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.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +sax@~1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" + +seamless-immutable@^7.0.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/seamless-immutable/-/seamless-immutable-7.1.2.tgz#c87a1eba6767a32455311d76600ac5eddeafbb69" + +"semver@2 || 3 || 4 || 5", semver@5.x, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +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" + +shelljs@^0.7.5: + 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" + rechoir "^0.6.2" + +shellwords@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + +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" + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + +snazzy@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/snazzy/-/snazzy-7.0.0.tgz#95edaccc4a8d6f80f4ac5cc7b520e8f8f9ac2325" + dependencies: + chalk "^1.1.0" + inherits "^2.0.1" + minimist "^1.1.1" + readable-stream "^2.0.6" + standard-json "^1.0.0" + text-table "^0.2.0" + +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" + +socket.io-client@~1.7.3: + version "1.7.4" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.4.tgz#ec9f820356ed99ef6d357f0756d648717bdd4281" + dependencies: + backo2 "1.0.2" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "2.3.3" + engine.io-client "~1.8.4" + has-binary "0.1.7" + indexof "0.0.1" + object-component "0.0.3" + parseuri "0.0.5" + socket.io-parser "2.3.1" + to-array "0.1.4" + +socket.io-parser@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0" + dependencies: + component-emitter "1.1.2" + debug "2.2.0" + isarray "0.0.1" + json3 "3.3.2" + +source-map-support@^0.4.15: + version "0.4.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.16.tgz#16fecf98212467d017d586a2af68d628b9421cd8" + 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.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.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + 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" + 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" + +standard-engine@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-7.0.0.tgz#ebb77b9c8fc2c8165ffa353bd91ba0dff41af690" + dependencies: + deglob "^2.1.0" + get-stdin "^5.0.1" + minimist "^1.1.0" + pkg-conf "^2.0.0" + +standard-json@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/standard-json/-/standard-json-1.0.2.tgz#82dea4a14c78cd9e35d38cde4b88ac6b62596a23" + dependencies: + concat-stream "^1.5.0" + +standard@10.0.2: + version "10.0.2" + resolved "https://registry.yarnpkg.com/standard/-/standard-10.0.2.tgz#974c1c53cc865b075a4b576e78441e1695daaf7b" + dependencies: + eslint "~3.19.0" + eslint-config-standard "10.2.1" + eslint-config-standard-jsx "4.0.1" + eslint-plugin-import "~2.2.0" + eslint-plugin-node "~4.2.2" + eslint-plugin-promise "~3.5.0" + eslint-plugin-react "~6.10.0" + eslint-plugin-standard "~3.0.1" + standard-engine "~7.0.0" + +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-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@~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.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +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-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@3.0.0, 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" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^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-observable@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" + +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +table@^3.7.8: + version "3.8.3" + resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" + dependencies: + ajv "^4.7.0" + ajv-keywords "^1.0.0" + chalk "^1.1.1" + lodash "^4.0.0" + slice-ansi "0.0.4" + string-width "^2.0.0" + +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.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" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +text-table@^0.2.0, text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +throat@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836" + +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-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + +to-fast-properties@^1.0.3: + 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" + +tryit@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" + +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" + +tween-functions@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff" + +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.14" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.14.tgz#110d53fa4c3f326c121292bbeac904d2e03387ca" + +uglify-js@2.7.5: + 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-js@^2.6: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.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" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + dependencies: + os-homedir "^1.0.0" + +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: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +uuid@^3.0.0, uuid@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + +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.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +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.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + +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: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + +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.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + 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.5.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.0.tgz#adfdf0cd40581465ed0a1f648f9735722afd5c8d" + dependencies: + errno "^0.1.4" + xtend "^4.0.1" + +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" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +ws@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +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" + +wtf-8@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" + +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" + +xmlhttprequest-ssl@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" + +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, 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.1.2: + 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.3.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" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"