diff --git a/.auth.js b/.auth.js
new file mode 100644
index 0000000..18b865f
--- /dev/null
+++ b/.auth.js
@@ -0,0 +1,22 @@
+module.exports = {
+ firebase: {
+ "type": "service_account",
+ "project_id": "partypeople-b736d",
+ "private_key_id": process.env.Private_Key_Id,
+ "private_key": process.env.Private_Key_Id ? process.env.PRIVATEKEY.replace(/\\n/g, '\n') : "",
+ "client_email": "firebase-adminsdk-3smir@partypeople-b736d.iam.gserviceaccount.com",
+ "client_id": process.env.client_id,
+ "auth_uri": "https://accounts.google.com/o/oauth2/auth",
+ "token_uri": "https://accounts.google.com/o/oauth2/token",
+ "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
+ "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-3smir%40partypeople-b736d.iam.gserviceaccount.com"
+ },
+ firebaseClient: {
+ apiKey: ""+process.env.apiKey,
+ authDomain: "partypeople-b736d.firebaseapp.com",
+ databaseURL: "https://partypeople-b736d.firebaseio.com",
+ projectId: "partypeople-b736d",
+ storageBucket: "partypeople-b736d.appspot.com",
+ }
+}
+console.log(process.env.apiKey)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..64d8071
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,10 @@
+*.log
+**/*.log
+.DS_Store
+**/.DS_Store
+**/dist
+**/node_modules
+coverage
+.env
+./src/.config.js
+.redis-labs.js
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..95de478
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Samuel Witke
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..82e9c86
--- /dev/null
+++ b/README.md
@@ -0,0 +1,27 @@
+# Partify [Demo](https://partifystart.herokuapp.com/#/)
+
+Partify is a free open source Spotify-powered app that lets your guests choose which music should be played using their smartphones to submit and vote on songs.
+
+### How To install and run locally
+```
+This project requires redis so if you don't have it
+sudo apt install redis-server
+Get Api keys for Spotify and firebase
+yarn install
+yarn start:dev || yarn start || yarn run:dev
+```
+
+### Steps
+```
+1. Make an account
+2. Host a project name on a device
+3. Connect to project name
+4. Add songs to queue
+5. Vote on songs to play next
+6. Repeat steps 4&5
+```
+
+#### Possible due to
+#### react-redux-firebase https://github.com/prescottprue/react-redux-firebase
+#### kue https://github.com/Automattic/kue
+#### Spotify API
diff --git a/app.yaml b/app.yaml
new file mode 100644
index 0000000..09819e9
--- /dev/null
+++ b/app.yaml
@@ -0,0 +1,2 @@
+runtime: nodejs
+env: flex
diff --git a/bin/compile.js b/bin/compile.js
new file mode 100755
index 0000000..55b3264
--- /dev/null
+++ b/bin/compile.js
@@ -0,0 +1,57 @@
+const webpack = require('webpack')
+const debug = require('debug')('app:bin:compile')
+const webpackConfig = require('../config/webpack.config')
+const project = require('../config/project.config')
+
+// Wrapper around webpack to promisify its compiler and supply friendly logging
+const webpackCompiler = webpackConfig =>
+ new Promise((resolve, reject) => {
+ const compiler = webpack(webpackConfig)
+
+ compiler.run((err, stats) => {
+ if (err) {
+ debug('Webpack compiler encountered a fatal error.', err)
+ return reject(err)
+ }
+
+ const jsonStats = stats.toJson()
+ debug('Webpack compile completed.')
+ debug(stats.toString(project.compiler_stats))
+
+ if (jsonStats.errors.length > 0) {
+ debug('Webpack compiler encountered errors.')
+ debug(jsonStats.errors.join('\n'))
+ return reject(new Error('Webpack compiler encountered errors'))
+ } else if (jsonStats.warnings.length > 0) {
+ debug('Webpack compiler encountered warnings.')
+ debug(jsonStats.warnings.join('\n'))
+ } else {
+ debug('No errors or warnings encountered.')
+ }
+ resolve(jsonStats)
+ })
+ })
+
+const compile = () => {
+ debug('Starting compiler.')
+ return (
+ Promise.resolve()
+ .then(() => webpackCompiler(webpackConfig))
+ // .then(stats => {
+ // if (stats.warnings.length && project.compiler_fail_on_warning) {
+ // throw new Error('Config set to fail on warning, exiting with status code "1".')
+ // }
+ // debug('Copying static assets to dist folder.')
+ // fs.copySync(project.paths.public(), project.paths.dist())
+ // })
+ .then(() => {
+ debug('Compilation completed successfully.')
+ })
+ .catch(err => {
+ debug('Compiler encountered an error.', err)
+ process.exit(1)
+ })
+ )
+}
+
+compile()
diff --git a/build/karma.config.js b/build/karma.config.js
new file mode 100644
index 0000000..55b3d4d
--- /dev/null
+++ b/build/karma.config.js
@@ -0,0 +1,66 @@
+const argv = require('yargs').argv
+const webpackConfig = require('./webpack.config')
+
+const TEST_BUNDLER = './tests/test-bundler.js'
+
+webpackConfig.module.rules.push({
+ enforce: 'post',
+ test: /\.js$/,
+ loader: 'istanbul-instrumenter-loader',
+ query: {
+ esModules: true
+ },
+ exclude: /(tests|node_modules|\.spec\.js$)/
+})
+
+const karmaConfig = {
+ basePath: '../',
+ browsers: ['PhantomJS'],
+ singleRun: !argv.watch,
+ coverageIstanbulReporter: {
+ reports: argv.watch
+ ? ['text-summary']
+ : ['html', 'lcovonly', 'text-summary'],
+ dir: 'coverage',
+ fixWebpackSourcePaths: true,
+ skipFilesWithNoCoverage: false
+ },
+ files: [
+ {
+ pattern: TEST_BUNDLER,
+ watched: false,
+ served: true,
+ included: true
+ }
+ ],
+ frameworks: ['mocha'],
+ reporters: ['mocha', 'coverage-istanbul'],
+ preprocessors: {
+ [TEST_BUNDLER]: ['webpack']
+ },
+ logLevel: 'WARN',
+ browserConsoleLogOptions: {
+ terminal: true,
+ format: '%b %T: %m',
+ level: ''
+ },
+ webpack: {
+ entry: TEST_BUNDLER,
+ devtool: 'cheap-module-source-map',
+ module: webpackConfig.module,
+ plugins: webpackConfig.plugins,
+ resolve: webpackConfig.resolve,
+ node: webpackConfig.node,
+ externals: {
+ 'react/addons': 'react',
+ 'react/lib/ExecutionEnvironment': 'react',
+ 'react/lib/ReactContext': 'react'
+ }
+ },
+ webpackMiddleware: {
+ stats: 'errors-only',
+ noInfo: true
+ }
+}
+
+module.exports = cfg => cfg.set(karmaConfig)
diff --git a/build/lib/logger.js b/build/lib/logger.js
new file mode 100755
index 0000000..12ea6c9
--- /dev/null
+++ b/build/lib/logger.js
@@ -0,0 +1,27 @@
+/* eslint-disable no-console */
+const chalk = require('chalk')
+const figures = require('figures')
+
+// Need to support Node versions that don't support spreading function arguments
+const spread = fn =>
+ function() {
+ return fn([].slice.call(arguments))
+ }
+
+exports.log = console.log.bind(console)
+
+exports.error = spread(messages => {
+ console.error(chalk.red.apply(chalk, [figures.cross].concat(messages)))
+})
+
+exports.info = spread(messages => {
+ console.info(chalk.cyan.apply(chalk, [figures.info].concat(messages)))
+})
+
+exports.success = spread(messages => {
+ console.log(chalk.green.apply(chalk, [figures.tick].concat(messages)))
+})
+
+exports.warn = spread(messages => {
+ console.warn(chalk.yellow.apply(chalk, [figures.warning].concat(messages)))
+})
diff --git a/build/scripts/compile.js b/build/scripts/compile.js
new file mode 100755
index 0000000..cc904b1
--- /dev/null
+++ b/build/scripts/compile.js
@@ -0,0 +1,58 @@
+const fs = require('fs-extra')
+const path = require('path')
+const chalk = require('chalk')
+const webpack = require('webpack')
+const logger = require('../lib/logger')
+const webpackConfig = require('../webpack.config')
+const project = require('../../project.config')
+
+const runWebpackCompiler = webpackConfig =>
+ new Promise((resolve, reject) => {
+ webpack(webpackConfig).run((err, stats) => {
+ if (err) {
+ logger.error('Webpack compiler encountered a fatal error.', err)
+ return reject(err)
+ }
+
+ const jsonStats = stats.toJson()
+ if (jsonStats.errors.length > 0) {
+ logger.error('Webpack compiler encountered errors.')
+ logger.log(jsonStats.errors.join('\n'))
+ return reject(new Error('Webpack compiler encountered errors'))
+ } else if (jsonStats.warnings.length > 0) {
+ logger.warn('Webpack compiler encountered warnings.')
+ logger.log(jsonStats.warnings.join('\n'))
+ }
+ resolve(stats)
+ })
+ })
+
+const compile = () =>
+ Promise.resolve()
+ .then(() => logger.info('Starting compiler...'))
+ .then(() =>
+ logger.info('Target application environment: ' + chalk.bold(project.env))
+ )
+ .then(() => runWebpackCompiler(webpackConfig))
+ .then(stats => {
+ logger.info(`Copying static assets from ./public to ./${project.outDir}.`)
+ fs.copySync(
+ path.resolve(project.basePath, 'public'),
+ path.resolve(project.basePath, project.outDir)
+ )
+ return stats
+ })
+ .then(stats => {
+ if (project.verbose) {
+ logger.log(
+ stats.toString({
+ colors: true,
+ chunks: false
+ })
+ )
+ }
+ logger.success(`Compiler finished successfully! See ./${project.outDir}.`)
+ })
+ .catch(err => logger.error('Compiler encountered errors.', err))
+
+compile()
diff --git a/build/scripts/start.js b/build/scripts/start.js
new file mode 100755
index 0000000..3d13f21
--- /dev/null
+++ b/build/scripts/start.js
@@ -0,0 +1,9 @@
+const logger = require('../lib/logger')
+//const ip = require('ip');
+
+logger.info('Starting server...')
+
+const PORT = process.env.PORT || 3000;
+require('../../server/main').listen(PORT, () => {
+ logger.success('Server is running at ',PORT)
+})
diff --git a/build/webpack.config.js b/build/webpack.config.js
new file mode 100755
index 0000000..6630840
--- /dev/null
+++ b/build/webpack.config.js
@@ -0,0 +1,278 @@
+const path = require('path')
+const webpack = require('webpack')
+const HtmlWebpackPlugin = require('html-webpack-plugin')
+const ExtractTextPlugin = require('extract-text-webpack-plugin')
+const FaviconsWebpackPlugin = require('favicons-webpack-plugin')
+const project = require('../project.config')
+
+const inProject = path.resolve.bind(path, project.basePath)
+const inProjectSrc = file => inProject(project.srcDir, file)
+
+const __DEV__ = project.env === 'development'
+const __TEST__ = project.env === 'test'
+const __PROD__ = project.env === 'production'
+
+const config = {
+ entry: {
+ normalize: [inProjectSrc('normalize')],
+ main: [inProjectSrc(project.main)]
+ },
+ devtool: project.sourcemaps ? 'source-map' : false,
+ output: {
+ path: inProject(project.outDir),
+ filename: __DEV__ ? '[name].js' : '[name].[chunkhash].js',
+ publicPath: project.publicPath
+ },
+ resolve: {
+ modules: [inProject(project.srcDir), 'node_modules'],
+ extensions: ['*', '.js', '.jsx', '.json'],
+ alias: {
+ // fix issue of loading multiple versions of react
+ react: path.resolve('./node_modules/react')
+ }
+ },
+ externals: project.externals,
+ module: {
+ rules: []
+ },
+ plugins: [
+ new webpack.DefinePlugin(
+ Object.assign(
+ {
+ 'process.env': {
+ NODE_ENV: JSON.stringify(project.env),
+ apiKey: JSON.stringify(process.env.apiKey),
+ projectId: JSON.stringify(process.env.projectId)
+ },
+ __DEV__,
+ __TEST__,
+ __PROD__
+ },
+ project.globals
+ )
+ )
+ ],
+ node: {
+ // disable node constants so constants.js file is used instead (see https://webpack.js.org/configuration/node/)
+ constants: false
+ }
+}
+
+// JavaScript
+// ------------------------------------
+config.module.rules.push({
+ test: /\.(js|jsx)$/,
+ exclude: [
+ /node_modules/,
+ /react-redux-firebase\/es/,
+ /redux-firestore\/es/,
+ ],
+ use: [
+ {
+ loader: 'babel-loader',
+ query: {
+ cacheDirectory: true,
+ // Ignore .babelrc file (prevents issue with global babelrc)
+ babelrc: false,
+ plugins: [
+ 'lodash',
+ 'transform-decorators-legacy',
+ 'transform-export-extensions',
+ 'babel-plugin-transform-class-properties',
+ 'babel-plugin-syntax-dynamic-import',
+ [
+ 'babel-plugin-transform-runtime',
+ {
+ helpers: true,
+ polyfill: false, // we polyfill needed features in src/normalize.js
+ regenerator: true
+ }
+ ],
+ [
+ 'babel-plugin-transform-object-rest-spread',
+ {
+ useBuiltIns: true // we polyfill Object.assign in src/normalize.js
+ }
+ ]
+ ],
+ presets: [
+ 'babel-preset-react',
+ [
+ 'babel-preset-env',
+ {
+ targets: {
+ ie9: true,
+ uglify: true,
+ modules: false
+ }
+ }
+ ]
+ ]
+ }
+ }
+ ]
+})
+
+// Styles
+// ------------------------------------
+const extractStyles = new ExtractTextPlugin({
+ filename: 'styles/[name].[contenthash].css',
+ allChunks: true,
+ disable: __DEV__
+})
+
+config.module.rules.push({
+ test: /\.(sass|scss)$/,
+ loader: extractStyles.extract({
+ fallback: 'style-loader',
+ use: [
+ {
+ loader: 'css-loader',
+ options: {
+ sourceMap: project.sourcemaps,
+ modules: true,
+ importLoaders: 2,
+ localIdentName: '[name]__[local]___[hash:base64:5]',
+ minimize: {
+ autoprefixer: {
+ add: true,
+ remove: true,
+ browsers: ['last 2 versions']
+ },
+ discardComments: {
+ removeAll: true
+ },
+ discardUnused: false,
+ mergeIdents: false,
+ reduceIdents: false,
+ safe: true,
+ sourcemap: project.sourcemaps
+ }
+ }
+ },
+ {
+ loader: 'sass-loader',
+ options: {
+ sourceMap: project.sourcemaps,
+ includePaths: [inProjectSrc('styles')]
+ }
+ },
+ ]
+ })
+})
+config.plugins.push(extractStyles)
+
+// Images
+// ------------------------------------
+config.module.rules.push({
+ test: /\.(png|jpg|gif)$/,
+ loader: 'url-loader',
+ options: {
+ limit: 8192
+ }
+})
+
+// Fonts
+// ------------------------------------
+;[
+ ['woff', 'application/font-woff'],
+ ['woff2', 'application/font-woff2'],
+ ['otf', 'font/opentype'],
+ ['ttf', 'application/octet-stream'],
+ ['eot', 'application/vnd.ms-fontobject'],
+ ['svg', 'image/svg+xml']
+].forEach(font => {
+ const extension = font[0]
+ const mimetype = font[1]
+
+ config.module.rules.push({
+ test: new RegExp(`\\.${extension}$`),
+ loader: 'url-loader',
+ options: {
+ name: 'fonts/[name].[ext]',
+ limit: 10000,
+ mimetype
+ }
+ })
+})
+
+// HTML Template
+// ------------------------------------
+config.plugins.push(
+ new HtmlWebpackPlugin({
+ template: inProjectSrc('index.html'),
+ inject: true,
+ minify: {
+ collapseWhitespace: true
+ }
+ })
+)
+
+// Development Tools
+// ------------------------------------
+if (__DEV__) {
+ config.entry.main.push(
+ `webpack-hot-middleware/client.js?path=${config.output
+ .publicPath}__webpack_hmr`
+ )
+ config.plugins.push(
+ new webpack.HotModuleReplacementPlugin(),
+ new webpack.NamedModulesPlugin()
+ )
+}
+
+// Bundle Splitting
+// ------------------------------------
+if (!__TEST__) {
+ const bundles = ['normalize', 'manifest']
+
+ if (project.vendors && project.vendors.length) {
+ bundles.unshift('vendor')
+ config.entry.vendor = project.vendors
+ }
+ config.plugins.push(
+ new webpack.optimize.CommonsChunkPlugin({ names: bundles })
+ )
+}
+
+// Production Optimizations
+// ------------------------------------
+if (__PROD__) {
+ config.plugins.push(
+ new webpack.LoaderOptionsPlugin({
+ minimize: true,
+ debug: false
+ }),
+ new webpack.optimize.UglifyJsPlugin({
+ sourceMap: !!config.devtool,
+ comments: false,
+ compress: {
+ warnings: false,
+ screw_ie8: true,
+ conditionals: true,
+ unused: true,
+ comparisons: true,
+ sequences: true,
+ dead_code: true,
+ evaluate: true,
+ if_return: true,
+ join_vars: true
+ }
+ }),
+ new FaviconsWebpackPlugin({
+ logo: 'static/logo.svg',
+ inject: true,
+ title: 'material-example',
+ persistentCache: true,
+ icons: {
+ favicons: true,
+ appleIcon: true,
+ appleStartup: true,
+ firefox: true,
+ android: true
+ }
+ })
+ )
+}
+
+module.exports = config
diff --git a/config/project.config.js b/config/project.config.js
new file mode 100755
index 0000000..ba5d895
--- /dev/null
+++ b/config/project.config.js
@@ -0,0 +1,134 @@
+/* eslint key-spacing:0 spaced-comment:0 */
+const path = require('path')
+const debug = require('debug')('app:config')
+const argv = require('yargs').argv
+const ip = require('ip')
+
+debug('Creating default configuration.')
+// ========================================================
+// Default Configuration
+// ========================================================
+const config = {
+ env: process.env.NODE_ENV || 'development',
+
+ // ----------------------------------
+ // Project Structure
+ // ----------------------------------
+ path_base: path.resolve(__dirname, '..'),
+ dir_client: 'src',
+ dir_dist: 'dist',
+ dir_server: 'server',
+ dir_test: 'tests',
+
+ // ----------------------------------
+ // Server Configuration
+ // ----------------------------------
+ server_host: ip.address(), // use string 'localhost' to prevent exposure on local network
+ server_port: process.env.PORT || 3000,
+
+ // ----------------------------------
+ // Compiler Configuration
+ // ----------------------------------
+ compiler_babel: {
+ cacheDirectory: true,
+ plugins: ['transform-runtime', 'lodash', 'transform-decorators-legacy'],
+ presets: ['es2015', 'react', 'stage-0']
+ },
+ compiler_devtool: 'eval',
+ compiler_hash_type: 'hash',
+ compiler_fail_on_warning: false,
+ compiler_quiet: false,
+ compiler_public_path: '/',
+ compiler_stats: {
+ chunks: false,
+ chunkModules: false,
+ colors: true
+ },
+ compiler_vendors: [
+ 'react',
+ 'react-router',
+ 'react-redux',
+ // 'redux', // avoid warning in production
+ 'react-redux-firebase',
+ 'material-ui'
+ ],
+
+ compiler_css_modules: true, // enable/disable css modules
+
+ // ----------------------------------
+ // Test Configuration
+ // ----------------------------------
+ coverage_reporters: [
+ { type: 'text-summary' },
+ { type: 'lcov', dir: 'coverage' }
+ ]
+}
+
+/************************************************
+-------------------------------------------------
+
+All Internal Configuration Below
+Edit at Your Own Risk
+
+-------------------------------------------------
+************************************************/
+
+// ------------------------------------
+// Environment
+// ------------------------------------
+// N.B.: globals added here must _also_ be added to .eslintrc
+config.globals = {
+ 'process.env': {
+ NODE_ENV: JSON.stringify(config.env)
+ },
+ NODE_ENV: config.env,
+ __DEV__: config.env === 'development',
+ __PROD__: config.env === 'production',
+ __TEST__: config.env === 'test',
+ __COVERAGE__: !argv.watch && config.env === 'test',
+ __BASENAME__: JSON.stringify(process.env.BASENAME || '')
+}
+
+// ------------------------------------
+// Validate Vendor Dependencies
+// ------------------------------------
+const pkg = require('../package.json')
+
+config.compiler_vendors = config.compiler_vendors.filter(dep => {
+ if (pkg.dependencies[dep]) return true
+
+ debug(
+ `Package "${dep}" was not found as an npm dependency in package.json; ` +
+ `it won't be included in the webpack vendor bundle.
+ Consider removing it from \`compiler_vendors\` in ~/config/index.js`
+ )
+})
+
+// ------------------------------------
+// Utilities
+// ------------------------------------
+function base() {
+ const args = [config.path_base].concat([].slice.call(arguments))
+ return path.resolve.apply(path, args)
+}
+
+config.paths = {
+ base: base,
+ client: base.bind(null, config.dir_client),
+ dist: base.bind(null, config.dir_dist)
+}
+
+// ========================================================
+// Environment Configuration
+// ========================================================
+debug(`Looking for environment overrides for NODE_ENV "${config.env}".`)
+const environments = require('./environments.config')
+const overrides = environments[config.env]
+if (overrides) {
+ debug('Found overrides, applying to default configuration.')
+ Object.assign(config, overrides(config))
+} else {
+ debug('No environment overrides found, defaults will be used.')
+}
+
+module.exports = config
diff --git a/config/webpack.config.js b/config/webpack.config.js
new file mode 100755
index 0000000..8b4551f
--- /dev/null
+++ b/config/webpack.config.js
@@ -0,0 +1,254 @@
+const webpack = require('webpack')
+const cssnano = require('cssnano')
+const HtmlWebpackPlugin = require('html-webpack-plugin')
+const ExtractTextPlugin = require('extract-text-webpack-plugin')
+
+const project = require('./project.config')
+const debug = require('debug')('app:webpack:config')
+
+const __DEV__ = project.globals.__DEV__
+const __PROD__ = project.globals.__PROD__
+const __TEST__ = project.globals.__TEST__
+
+debug('Creating configuration.')
+const webpackConfig = {
+ name: 'client',
+ target: 'web',
+ devtool: project.compiler_devtool,
+ resolve: {
+ root: project.paths.client(),
+ extensions: ['', '.js', '.jsx', '.json']
+ },
+ module: {}
+}
+// ------------------------------------
+// Entry Points
+// ------------------------------------
+const APP_ENTRY = project.paths.client('main.js')
+
+webpackConfig.entry = {
+ app: __DEV__
+ ? [APP_ENTRY].concat(
+ `webpack-hot-middleware/client?path=${project.compiler_public_path}__webpack_hmr`
+ )
+ : [APP_ENTRY],
+ vendor: project.compiler_vendors
+}
+
+// ------------------------------------
+// Bundle Output
+// ------------------------------------
+webpackConfig.output = {
+ filename: `[name].[${project.compiler_hash_type}].js`,
+ path: project.paths.dist(),
+ publicPath: project.compiler_public_path
+}
+
+// ------------------------------------
+// Plugins
+// ------------------------------------
+webpackConfig.plugins = [
+ // Plugin to show any webpack warnings and prevent tests from running
+ function() {
+ let errors = []
+ this.plugin('done', function(stats) {
+ if (stats.compilation.errors.length) {
+ // Log each of the warnings
+ stats.compilation.errors.forEach(function(error) {
+ errors.push(error.stack || error.message || error)
+ })
+
+ if (__TEST__) {
+ // Pretend no assets were generated. This prevents the tests
+ // from running making it clear that there were warnings.
+ throw new Error(errors)
+ }
+ }
+ })
+ },
+ new webpack.DefinePlugin(project.globals),
+ new HtmlWebpackPlugin({
+ template: project.paths.client('index.html'),
+ hash: false,
+ // favicon : project.paths.client('static/favicon.ico'), // for including single favicon
+ filename: 'index.html',
+ inject: 'body',
+ minify: {
+ collapseWhitespace: true
+ }
+ })
+]
+
+if (__DEV__) {
+ debug('Enable plugins for live development (HMR, NoErrors).')
+ webpackConfig.plugins.push(
+ new webpack.HotModuleReplacementPlugin(),
+ new webpack.NoErrorsPlugin()
+ )
+} else if (__PROD__) {
+ debug('Enable plugins for production (OccurenceOrder, Dedupe & UglifyJS).')
+ webpackConfig.plugins.push(
+ new webpack.optimize.OccurrenceOrderPlugin(),
+ new webpack.optimize.DedupePlugin(),
+ new webpack.optimize.UglifyJsPlugin({
+ compress: {
+ unused: true,
+ dead_code: true,
+ warnings: false
+ }
+ })
+ )
+}
+
+// Don't split bundles during testing, since we only want import one bundle
+if (!__TEST__) {
+ webpackConfig.plugins.push(
+ new webpack.optimize.CommonsChunkPlugin({
+ names: ['vendor']
+ })
+ )
+}
+
+// ------------------------------------
+// Loaders
+// ------------------------------------
+// JavaScript / JSON
+webpackConfig.module.loaders = [
+ {
+ test: /\.(js|jsx)$/,
+ exclude: [
+ /node_modules/,
+ /react-redux-firebase\/dist/ /* exclude any npm-linked modules here */
+ ],
+ loader: 'babel',
+ query: project.compiler_babel
+ },
+ {
+ test: /\.json$/,
+ loader: 'json'
+ }
+]
+
+// ------------------------------------
+// Style Loaders
+// ------------------------------------
+// We use cssnano with the postcss loader, so we tell
+// css-loader not to duplicate minimization.
+const BASE_CSS_LOADER = 'css?sourceMap&-minimize'
+
+// Add any packge names here whose styles need to be treated as CSS modules.
+// These paths will be combined into a single regex.
+const PATHS_TO_TREAT_AS_CSS_MODULES = [
+ // 'react-toolbox', (example)
+]
+
+// If config has CSS modules enabled, treat this project's styles as CSS modules.
+if (project.compiler_css_modules) {
+ PATHS_TO_TREAT_AS_CSS_MODULES.push(
+ project.paths.client().replace(/[\^\$\.\*\+\-\?\=\!\:\|\\\/\(\)\[\]\{\}\,]/g, '\\$&') // eslint-disable-line
+ )
+}
+const isUsingCSSModules = !!PATHS_TO_TREAT_AS_CSS_MODULES.length
+const cssModulesRegex = new RegExp(
+ `(${PATHS_TO_TREAT_AS_CSS_MODULES.join('|')})`
+)
+
+// Loaders for styles that need to be treated as CSS modules.
+if (isUsingCSSModules) {
+ const cssModulesLoader = [
+ BASE_CSS_LOADER,
+ 'modules',
+ 'importLoaders=1',
+ 'localIdentName=[name]__[local]___[hash:base64:5]'
+ ].join('&')
+
+ webpackConfig.module.loaders.push({
+ test: /\.scss$/,
+ include: cssModulesRegex,
+ loaders: ['style', cssModulesLoader, 'postcss', 'sass?sourceMap']
+ })
+
+ webpackConfig.module.loaders.push({
+ test: /\.css$/,
+ include: cssModulesRegex,
+ loaders: ['style', cssModulesLoader, 'postcss']
+ })
+}
+
+// Loaders for files that should not be treated as CSS modules.
+const excludeCSSModules = isUsingCSSModules ? cssModulesRegex : false
+webpackConfig.module.loaders.push({
+ test: /\.scss$/,
+ exclude: excludeCSSModules,
+ loaders: ['style', BASE_CSS_LOADER, 'postcss', 'sass?sourceMap']
+})
+webpackConfig.module.loaders.push({
+ test: /\.css$/,
+ exclude: excludeCSSModules,
+ loaders: ['style', BASE_CSS_LOADER, 'postcss']
+})
+
+webpackConfig.sassLoader = {
+ includePaths: project.paths.client('styles')
+}
+
+webpackConfig.postcss = [
+ cssnano({
+ autoprefixer: {
+ add: true,
+ remove: true,
+ browsers: ['last 2 versions']
+ },
+ discardComments: {
+ removeAll: true
+ },
+ discardUnused: false,
+ mergeIdents: false,
+ reduceIdents: false,
+ safe: true,
+ sourcemap: true
+ })
+]
+
+// File loaders
+/* eslint-disable */
+webpackConfig.module.loaders.push(
+ { test: /\.woff(\?.*)?$/, loader: 'url?prefix=fonts/&name=[path][name].[ext]&limit=10000&mimetype=application/font-woff' },
+ { test: /\.woff2(\?.*)?$/, loader: 'url?prefix=fonts/&name=[path][name].[ext]&limit=10000&mimetype=application/font-woff2' },
+ { test: /\.otf(\?.*)?$/, loader: 'file?prefix=fonts/&name=[path][name].[ext]&limit=10000&mimetype=font/opentype' },
+ { test: /\.ttf(\?.*)?$/, loader: 'url?prefix=fonts/&name=[path][name].[ext]&limit=10000&mimetype=application/octet-stream' },
+ { test: /\.eot(\?.*)?$/, loader: 'file?prefix=fonts/&name=[path][name].[ext]' },
+ { test: /\.svg(\?.*)?$/, loader: 'url?prefix=fonts/&name=[path][name].[ext]&limit=10000&mimetype=image/svg+xml' },
+ { test: /\.(png|jpg)$/, loader: 'url?limit=8192' }
+)
+/* eslint-enable */
+
+// ------------------------------------
+// Finalize Configuration
+// ------------------------------------
+// when we don't know the public path (we know it only when HMR is enabled [in development]) we
+// need to use the extractTextPlugin to fix this issue:
+// http://stackoverflow.com/questions/34133808/webpack-ots-parsing-error-loading-fonts/34133809#34133809
+if (!__DEV__ && !__TEST__) {
+ debug('Apply ExtractTextPlugin to CSS loaders.')
+ webpackConfig.module.loaders
+ .filter(
+ loader =>
+ loader.loaders &&
+ loader.loaders.find(name => /css/.test(name.split('?')[0]))
+ )
+ .forEach(loader => {
+ const first = loader.loaders[0]
+ const rest = loader.loaders.slice(1)
+ loader.loader = ExtractTextPlugin.extract(first, rest.join('!'))
+ delete loader.loaders
+ })
+
+ webpackConfig.plugins.push(
+ new ExtractTextPlugin('[name].[contenthash].css', {
+ allChunks: true
+ })
+ )
+}
+
+module.exports = webpackConfig
diff --git a/database.rules.json b/database.rules.json
new file mode 100644
index 0000000..531af52
--- /dev/null
+++ b/database.rules.json
@@ -0,0 +1,11 @@
+{
+ "rules": {
+ ".read": "auth !== null",
+ ".write":"auth !== null",
+ "users": {
+ "$uid": {
+ ".write": "auth !== null && $uid === auth.uid"
+ }
+ }
+ }
+}
diff --git a/firebase.json b/firebase.json
new file mode 100644
index 0000000..e6359cd
--- /dev/null
+++ b/firebase.json
@@ -0,0 +1,17 @@
+{
+ "database": {
+ "rules": "database.rules.json"
+ },
+ "storage": {
+ "rules": "storage.rules"
+ },
+ "hosting": {
+ "public": "dist",
+ "rewrites": [
+ {
+ "source": "**",
+ "destination": "/index.html"
+ }
+ ]
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..9d44f16
--- /dev/null
+++ b/package.json
@@ -0,0 +1,117 @@
+{
+ "name": "partify",
+ "version": "0.0.1",
+ "description": "Host and play songs on spotify",
+ "main": "index.js",
+ "scripts": {
+ "clean:redis": "redis-cli flushall",
+ "clean": " rimraf dist",
+ "compile": "node build/scripts/compile",
+ "build": "npm run clean && cross-env NODE_ENV=production npm run compile",
+ "start:dev": "cross-env NODE_ENV=development webpack-dashboard -p 1234 -c cyan -m -t material -- node build/scripts/start",
+ "run:dev": "cross-env NODE_ENV=development nodemon build/scripts/start",
+ "start": "NODE_ENV=production node build/scripts/start",
+ "heroku-postbuild": "npm run build",
+ "lint": "eslint .",
+ "lint:fix": "npm run lint -- --fix"
+ },
+ "author": "testuser (https://github.com/testuser)",
+ "license": "MIT",
+ "dependencies": {
+ "babel-core": "^6.24.1",
+ "babel-eslint": "^7.2.3",
+ "babel-loader": "^7.0.0",
+ "babel-plugin-lodash": "^3.2.11",
+ "babel-plugin-syntax-dynamic-import": "^6.18.0",
+ "babel-plugin-transform-class-properties": "^6.24.1",
+ "babel-plugin-transform-decorators-legacy": "^1.3.4",
+ "babel-plugin-transform-export-extensions": "^6.22.0",
+ "babel-plugin-transform-object-rest-spread": "^6.23.0",
+ "babel-plugin-transform-runtime": "^6.15.0",
+ "babel-polyfill": "^6.26.0",
+ "babel-preset-env": "^1.4.0",
+ "babel-preset-react": "^6.24.1",
+ "babel-runtime": "^6.20.0",
+ "body-parser": "^1.18.2",
+ "chalk": "^1.1.3",
+ "compression": "^1.6.2",
+ "connect-history-api-fallback": "^1.3.0",
+ "cookie-parser": "^1.4.3",
+ "cookies": "^0.7.1",
+ "cookies-js": "^1.2.3",
+ "cross-env": "^5.1.3",
+ "css-loader": "^0.28.1",
+ "dotenv": "^5.0.0",
+ "eslint": "^3.19.0",
+ "eslint-config-prettier": "^2.3.0",
+ "eslint-config-standard": "^10.2.1",
+ "eslint-config-standard-react": "^5.0.0",
+ "eslint-plugin-babel": "^4.1.1",
+ "eslint-plugin-import": "^2.2.0",
+ "eslint-plugin-node": "^4.2.2",
+ "eslint-plugin-prettier": "^2.1.2",
+ "eslint-plugin-promise": "^3.5.0",
+ "eslint-plugin-react": "^7.0.1",
+ "eslint-plugin-standard": "^3.0.1",
+ "express": "^4.14.0",
+ "extract-text-webpack-plugin": "^2.1.0",
+ "favicons-webpack-plugin": "0.0.7",
+ "figures": "^2.0.0",
+ "file-loader": "^0.11.1",
+ "firebase": "^4.5.2",
+ "firebase-admin": "^5.9.0",
+ "firebase-queue": "^1.6.1",
+ "fs-extra": "^3.0.1",
+ "history": "^4.7.2",
+ "html-webpack-plugin": "^2.29.0",
+ "husky": "^0.14.3",
+ "ip": "^1.1.5",
+ "js-cookie": "^2.2.0",
+ "kue": "^0.11.6",
+ "kue-ui-express": "^1.0.2",
+ "lodash": "^4.17.4",
+ "material-ui": "^0.19.1",
+ "material-ui-search-bar": "^0.4.1",
+ "node-sass": "^4.5.3",
+ "normalize.css": "^7.0.0",
+ "object-assign": "^4.1.1",
+ "prettier": "^1.5.3",
+ "promise": "^7.1.1",
+ "prop-types": "^15.5.10",
+ "querystring": "^0.2.0",
+ "react": "^15.5.4",
+ "react-dom": "^15.5.4",
+ "react-google-button": "^0.3.0",
+ "react-notification-system": "^0.2.17",
+ "react-notification-system-redux": "^1.2.0",
+ "react-redux": "^5.0.4",
+ "react-redux-firebase": "next",
+ "react-router": "^3.0.0",
+ "react-router-redux": "^4.0.8",
+ "react-tap-event-plugin": "^2.0.1",
+ "recompose": "^0.26.0",
+ "redbox-react": "^1.3.6",
+ "redis": "^2.8.0",
+ "redux": "^3.6.0",
+ "redux-auth-wrapper": "^1.0.0",
+ "redux-cookies": "^1.0.1",
+ "redux-form": "^6.6.1",
+ "redux-form-material-ui": "^4.2.0",
+ "redux-logger": "^3.0.6",
+ "redux-thunk": "^2.2.0",
+ "request": "^2.83.0",
+ "rimraf": "^2.6.1",
+ "sass-loader": "^6.0.5",
+ "spotify-web-api-js": "^0.23.0",
+ "spotify-web-api-node": "^2.5.0",
+ "style-loader": "^0.17.0",
+ "svg-inline-loader": "^0.8.0",
+ "url-loader": "^0.5.8",
+ "webpack": "^2.5.1",
+ "webpack-dashboard": "^0.4.0",
+ "webpack-dev-middleware": "^1.11.0",
+ "webpack-hot-middleware": "^2.13.2",
+ "whatwg-fetch": "^2.0.3",
+ "yargs": "^8.0.1"
+ }
+}
diff --git a/project.config.js b/project.config.js
new file mode 100644
index 0000000..92dff44
--- /dev/null
+++ b/project.config.js
@@ -0,0 +1,69 @@
+const ip = require('ip')
+const NODE_ENV = process.env.NODE_ENV || 'development'
+
+module.exports = {
+ /** The environment to use when building the project */
+ env: NODE_ENV,
+ /** The full path to the project's root directory */
+ basePath: __dirname,
+ /** The name of the directory containing the application source code */
+ srcDir: 'src',
+ /** The file name of the application's entry point */
+ main: 'main',
+ /** The name of the directory in which to emit compiled assets */
+ outDir: 'dist',
+ /** The base path for all projects assets (relative to the website root) */
+ publicPath: NODE_ENV === 'development' ? `http://${ip.address()}:3000/` : '/',
+ /** Whether to generate sourcemaps */
+ sourcemaps: true,
+ /** A hash map of keys that the compiler should treat as external to the project */
+ externals: {},
+ /** A hash map of variables and their values to expose globally */
+ globals: {},
+ /** Whether to enable verbose logging */
+ verbose: false,
+ /** The list of modules to bundle separately from the core application code */
+ vendors: [
+ 'react',
+ 'react-dom',
+ 'redux',
+ 'react-redux',
+ 'redux-thunk',
+ 'react-router',
+ 'react-redux-firebase',
+ 'material-ui'
+ ],
+ /**
+ * Settings used to create src/config.js using firebase-ci
+ * in ci environment. If you are running locally, go to src/config.js.
+ */
+ ci: {
+ development: {
+ firebase: {
+ apiKey: "AIzaSyC9z35c77dSgRsqSVh_fLsCBsR3kV_21Y8",
+ authDomain: "partypeople-b736d.firebaseapp.com",
+ databaseURL: "https://partypeople-b736d.firebaseio.com",
+ storageBucket: "partypeople-b736d.appspot.com",
+
+ },
+ reduxFirebase: {
+ userProfile: 'users', // root that user profiles are written to
+ enableLogging: false, // enable/disable Firebase Database Logging
+ updateProfileOnLogin: false // enable/disable updating of profile on login
+ }
+ },
+ production: {
+ firebase: {
+ apiKey: "AIzaSyC9z35c77dSgRsqSVh_fLsCBsR3kV_21Y8",
+ authDomain: "partypeople-b736d.firebaseapp.com",
+ databaseURL: "https://partypeople-b736d.firebaseio.com",
+ storageBucket: "partypeople-b736d.appspot.com",
+ },
+ reduxFirebase: {
+ userProfile: 'users',
+ enableLogging: false,
+ updateProfileOnLogin: false
+ }
+ }
+ }
+}
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..088a3d6
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/server/kue.js b/server/kue.js
new file mode 100644
index 0000000..9d69452
--- /dev/null
+++ b/server/kue.js
@@ -0,0 +1,73 @@
+const logger = require('../build/lib/logger')
+const url = require('url')
+const admin = require('firebase-admin');
+const kue = require('kue')
+const kueOptions = {};
+
+if(process.env.REDISCLOUD_URL) {
+ var redisUrl = url.parse(process.env.REDISCLOUD_URL);
+ kueOptions.redis = {
+ port: parseInt(redisUrl.port),
+ host: redisUrl.hostname
+ };
+ if(redisUrl.auth) {
+ kueOptions.redis.auth = redisUrl.auth.split(':')[1];
+ }
+}
+const jobs = kue.createQueue(kueOptions);
+
+const request = require('request');
+const refreshToken = require('./refreshToken.js')
+var querystring = require('querystring');
+
+/* Only one worker for free redislabs */
+jobs.process('song',1, function ( job, done ) {
+ let access_token = `${job.data.access_token}`
+ var headers = {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Bearer '+access_token,
+ };
+
+ var dataString = `{"uris":["${job.data.uri}"]}`;
+ var device = job.data.device;
+ var options = {
+ url: `https://api.spotify.com/v1/me/player/play?device_id=${device}`,
+ method: 'PUT',
+ headers: headers,
+ body: dataString
+ };
+ function callback(error, response, body) {
+ if (!error) {
+ logger.info("Playing",job.data.title);
+ admin.database().ref(`projects/${job.data.project}/Songs/${job.data.key}/song/active`).set(true)
+ setTimeout( function () {
+ let del_ref = admin.database().ref(`projects/${job.data.project}/Songs/${job.data.key}`);
+ del_ref.remove()
+ .then(function() {
+ logger.info('song removed');
+ })
+ .catch(function(error) {
+ console.log('Error deleting data:', error);
+ });
+ done();
+ }, job.data.time);
+ }else {
+ logger.error(msg.error.message)
+ if(msg.error.message === 'The access token expired'){
+ refreshToken(refresh_token,name);
+ }
+ }
+
+ }
+ request(options, callback);
+ //Store the job's done function in a global variable so we can access it from elsewhere.
+ _exitActivJob = function() {
+ done();
+ };
+} );
+
+
+
+module.exports = jobs;
+
diff --git a/server/main.js b/server/main.js
new file mode 100755
index 0000000..be507dd
--- /dev/null
+++ b/server/main.js
@@ -0,0 +1,150 @@
+const express = require('express')
+const project = require('../project.config')
+
+if (project.env === 'development') {
+ const dotenv = require('dotenv');
+ const result = dotenv.config();
+ dotenv.load();
+}
+
+const path = require('path')
+const webpack = require('webpack')
+const logger = require('../build/lib/logger')
+const webpackConfig = require('../build/webpack.config')
+const compress = require('compression')
+const cookieParser = require('cookie-parser');
+const bodyParser = require('body-parser');
+const app = express()
+const admin = require('firebase-admin');
+const compiler = webpack(webpackConfig)
+
+const redis = require ('redis');
+const url = require('url')
+let redisUrl = url.parse(process.env.REDISCLOUD_URL||"127.0.0.1");
+const kue = require('kue');
+
+redisClient = redis.createClient(parseInt(redisUrl.port), redisUrl.hostname);
+if(redisUrl.auth)
+ redisClient.auth(redisUrl.auth.split(':')[1]);
+
+kue.redis.createClient = function () {
+ return redisClient;
+};
+
+
+
+// make sure we use the Heroku Redis To Go URL
+// (put REDISTOGO_URL=redis://localhost:6379 in .env for local testing)
+
+if (project.env === 'development') {
+
+ const kueUiExpress = require('kue-ui-express');
+ kueUiExpress(app, '/kue/', '/kue-api/');
+ app.use('/kue-api/', kue.app);
+
+ logger.info('Enabling webpack development and HMR middleware')
+ app.use(
+ require('webpack-dev-middleware')(compiler, {
+ publicPath: webpackConfig.output.publicPath,
+ headers: {
+ 'Access-Control-Allow-Origin': '*'
+ },
+ contentBase: path.resolve(project.basePath, project.srcDir),
+ hot: true,
+ quiet: false,
+ noInfo: false,
+ lazy: false,
+ stats: 'normal'
+ })
+ )
+ app.use(
+ require('webpack-hot-middleware')(compiler, {
+ path: '/__webpack_hmr'
+ })
+ )
+
+ // Serve static assets from ~/public since Webpack is unaware of
+ // these files. This middleware doesn't need to be enabled outside
+ // of development since this directory will be copied into ~/dist
+ // when the application is compiled.
+ app.use(express.static(path.resolve(project.basePath, 'public')))
+
+ // This rewrites all routes requests to the root /index.html file
+ // (ignoring file requests). If you want to implement universal
+ // rendering, you'll want to remove this middleware.
+
+} else {
+ logger.warn(
+ 'Server is being run outside of live development mode, meaning it will ' +
+ 'only serve the compiled application bundle in ~/dist. Generally you ' +
+ 'do not need an application server for this and can instead use a web ' +
+ 'server such as nginx to serve your static files. See the "deployment" ' +
+ 'section in the README for more information on deployment strategies.'
+ )
+ // NOTE: If you are using this, you should make express and compress dependencies instead of dev dependencies
+ // Serving ~/dist by default. Ideally these files should be served by
+ // the web server and not the app server, but this helps to demo the
+ // server in production.
+}
+const info = require('../.auth.js');
+
+admin.initializeApp({
+ credential: admin.credential.cert(info.firebase),
+ databaseURL: "https://partypeople-b736d.firebaseio.com"
+});
+
+admin.database().ref('/projects').on("child_added", function(snapshot) {
+ var newPost = snapshot.val();
+ let ref = admin.database().ref(`/projects/${newPost.name}/Songs`)
+ ref.on("child_changed", function(snapshot) {
+ let song = snapshot.val()
+ kue.Job.get( song.song.song_id, function( err, job ) {
+ try{
+ job.priority(-song.song.project.votes).update(() => {
+ if(!err){
+ logger.info("Changed",song.song.project.votes,song.song.song_id,song.song.name,job.data.title);
+ }
+ })
+ }catch(e){
+ logger.error(e.message)
+ }
+
+ });
+ })
+ ref.on("child_removed", function(snapshot) {
+ let song = snapshot.val()
+ logger.info("Song",song.song.name,"removed",song.song.song_id)
+ try{
+ kue.Job.get(song.song.song_id, function( err, job ) {
+ if(!err){
+ try{
+ job.state('active');
+ job.remove();
+ logger.info("Song",song.song.name,"removed")
+ }catch(e){
+ logger.error(e.message)
+ }
+ }
+ })
+ }catch(e){
+ logger.error(e.message)
+ }
+ })
+});
+
+const routes = require('./routes');
+
+app.use(compress())
+app.use(cookieParser())
+ .use(bodyParser.json())
+ .use(bodyParser.urlencoded({
+ extended: false
+ }))
+ .use(express.static(path.resolve(project.basePath, project.outDir)))
+ .use('/', routes);
+
+app.use('*', function(req, res, next) {
+ const filename = path.join(compiler.outputPath, 'index.html')
+})
+
+module.exports = app
diff --git a/server/refreshToken.js b/server/refreshToken.js
new file mode 100644
index 0000000..8a20bd6
--- /dev/null
+++ b/server/refreshToken.js
@@ -0,0 +1,26 @@
+const logger = require('../build/lib/logger')
+const request = require('request');
+const admin = require('firebase-admin');
+const refreshToken = (refresh_token,name) => {
+ logger.info("Requesting refresh_token",refresh_token,name)
+ // requesting access token from refresh token
+ var authOptions = {
+ url: 'https://accounts.spotify.com/api/token',
+ headers: { 'Authorization': 'Basic ' + (new Buffer(process.env.SPOTIFYCLIENT+ ':' + process.env.SPOTIFYSECRET).toString('base64')) },
+ form: {
+ grant_type: 'refresh_token',
+ refresh_token: refresh_token
+ },
+ json: true
+ };
+
+ request.post(authOptions, function(error, response, body) {
+ if (!error && response.statusCode === 200) {
+ var access_token = body.access_token;
+ logger.success('Request Completed',name)
+ admin.database().ref(`/projects/${name}/access_token`).set(access_token)
+ }
+ });
+};
+
+module.exports = refreshToken;
diff --git a/server/routes.js b/server/routes.js
new file mode 100644
index 0000000..4923ce9
--- /dev/null
+++ b/server/routes.js
@@ -0,0 +1,196 @@
+const Spotify = require('spotify-web-api-node');
+const querystring = require('querystring');
+const express = require('express');
+const router = new express.Router();
+const logger = require('../build/lib/logger')
+const admin = require('firebase-admin');
+const jobs = require('./kue.js');
+const request = require('request');
+const refreshToken = require('./refreshToken.js')
+
+
+// configure the express server
+const CLIENT_ID = process.env.SPOTIFYCLIENT;
+const CLIENT_SECRET = process.env.SPOTIFYSECRET;
+const REDIRECT_URI = process.env.redirect_uri || 'http://localhost:3000/callback';
+const STATE_KEY = 'spotify_auth_state';
+// your application requests authorization
+const scopes = ['user-read-private', 'user-read-email', 'user-read-playback-state' ,'user-read-currently-playing','user-modify-playback-state', 'streaming'];
+
+
+// configure spotify
+const spotifyApi = new Spotify({
+ clientId: process.env.SPOTIFYCLIENT,
+ clientSecret: process.env.SPOTIFYSECRET,
+ redirectUri: REDIRECT_URI
+});
+
+
+/** Generates a random string containing numbers and letters of N characters */
+const generateRandomString = N => (Math.random().toString(36)+Array(N).join('0')).slice(2, N+2);
+
+/**
+ * The /login endpoint
+ * Redirect the client to the spotify authorize url, but first set that user's
+ * state in the cookie.
+ */
+
+router.get('/login', (_, res) => {
+ const state = generateRandomString(16);
+ res.cookie(STATE_KEY, state);
+ res.redirect(spotifyApi.createAuthorizeURL(scopes, state));
+});
+
+/**
+ * The /callback endpoint - hit after the user logs in to spotifyApi
+ * Verify that the state we put in the cookie matches the state in the query
+ * parameter. Then, if all is good, redirect the user to the user page. If all
+ * is not good, redirect the user to an error page
+ */
+
+router.get('/callback', (req, res) => {
+ const { code, state } = req.query;
+ const storedState = req.cookies ? req.cookies[STATE_KEY] : null;
+ // first do state validation
+ if (state === null || state !== storedState) {
+ res.redirect('/#/error/state mismatch');
+ // if the state is valid, get the authorization code and pass it on to the client
+ } else {
+ res.clearCookie(STATE_KEY);
+ // Retrieve an access token and a refresh token
+ spotifyApi.authorizationCodeGrant(code).then(data => {
+ const { expires_in, access_token, refresh_token } = data.body;
+
+ // Set the access token on the API object to use it in later calls
+ spotifyApi.setAccessToken(access_token);
+ spotifyApi.setRefreshToken(refresh_token);
+
+ // use the access token to access the Spotify Web API
+ tokenExpirationEpoch = (new Date().getTime() / 1000) + data.body['expires_in'];
+ logger.info('Retrieved token. It expires in ' + Math.floor(tokenExpirationEpoch - new Date().getTime() / 1000) + ' seconds!');
+
+ spotifyApi.getMe().then(({ body }) => {
+ const data = {
+ 'accessToken' : access_token,
+ 'refreshToken' : refresh_token,
+ 'me' : body
+ }
+ res.cookie('spotify',data);
+ res.redirect('/#/signup');
+ });
+
+ // we can also pass the token to the browser to make requests from there
+ //
+ //res.redirect(`/#/callback/${access_token}/${refresh_token}`);
+ }).catch(err => {
+ res.redirect('/#/error/invalid token');
+ });
+ }
+});
+
+router.post('/devices', (req,res) => {
+ const {access_token,name,refresh_token} = req.body;
+ if(access_token) {
+ var devices = []
+ var options = {
+ url: 'https://api.spotify.com/v1/me/player/devices',
+ headers: { 'Authorization': 'Bearer ' + access_token },
+ json: true
+ };
+ request.get(options, function(error, response, body) {
+ if(body.error == null && body.devices.length > 0){
+ body.devices.forEach( (device) => {
+ devices.push({
+ name: device.name,
+ type: device.type,
+ id: device.id,
+ });
+ });
+ res.json({devices});
+ }else if(body.error != undefined && body.error.message == 'The access token expired'){
+ authOptions = {
+ url: 'https://accounts.spotify.com/api/token',
+ headers: { 'Authorization': 'Basic ' + (new Buffer(process.env.SPOTIFYCLIENT+ ':' + process.env.SPOTIFYSECRET).toString('base64')) },
+ form: {
+ grant_type: 'refresh_token',
+ refresh_token: refresh_token
+ },
+ json: true
+ };
+ request.post(authOptions, function(error, response, body) {
+ if (!error && response.statusCode === 200) {
+ var access_token = body.access_token;
+ logger.success('Request Completed',name)
+ admin.database().ref(`/users/${name}/accessToken`).set(access_token)
+ res.sendStatus(204)
+ }
+ });
+ }else
+ res.json( {msg : "no devices"});
+ });
+ }else
+ res.json({msg : "access_token undefined"});
+});
+
+router.post('/search', (req, res, next) => {
+ const {search,access_token,refresh_token,name}= req.body;
+ logger.info("Searching for "+search)
+ var headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'Bearer '+access_token
+ };
+ var options = {
+ url: `https://api.spotify.com/v1/search?q=${search}&type=track`,
+ headers: headers
+ };
+ function callback(error, response, body) {
+ try {
+ let msg = JSON.parse(body)
+ if (!msg.error) {
+ res.json(msg);
+ }else {
+ logger.error(msg.error.message)
+ if(msg.error.message === 'The access token expired'){
+ refreshToken(refresh_token,name);
+ }
+ res.send(msg.error.message)
+ }
+ }catch (e){
+ res.json(e.msg)
+ }
+ }
+ request(options, callback);
+});
+
+router.post('/song-queue', (req, res) => {
+ if(req.body == null) res.sendStatus(400)
+ const {songs,access_token,device,refresh_token,name}= req.body;
+ let song = songs[0];
+ let key = undefined;
+ songs.forEach( song => {
+ var songJob = jobs.create( 'song', {
+ title: song.name,
+ project: song.project.name,
+ time: song.duration_ms,
+ uri: song.uri,
+ access_token: access_token,
+ refresh_token: refresh_token,
+ device: device,
+ bar: function () { console.log('secret'); },
+ key: admin.database().ref(`projects/${song.project.name}/Songs`).push({song}).key,
+ })
+ .priority(song.project.votes)
+ .save( err =>{
+ if(err){
+ logger.error(err.msg);
+ res.json(err.msg)
+ }else {
+ song.song_id = songJob.id;
+ admin.database().ref(`projects/${song.project.name}/Songs/${songJob.data.key}/song/song_id`).set(songJob.id)
+ }
+ })
+ });
+ res.sendStatus(200);
+});
+
+module.exports = router;
diff --git a/src/.config.js b/src/.config.js
new file mode 100644
index 0000000..17785ff
--- /dev/null
+++ b/src/.config.js
@@ -0,0 +1,36 @@
+// EXAMPLE ONLY! THIS FILE IS USUALLY NOT PART OF GIT TRACKING
+// .gitignore skips this at the project level, but it is added for example here
+/**
+ * NOTE: This file is ignored from git tracking. In a CI environment, it is
+ * generated using build/create-config.js by calling npm run create-config (or
+ * using firebase-ci if deploying to Firebase hosting). This is done so that
+ * environment specific settings can be applied.
+ */
+
+export const env = 'development'
+
+// Config from Firebase Console
+export const firebase = {
+ apiKey: process.env.apiKey,
+ authDomain: `${process.env.projectId}.firebaseapp.com`,
+ databaseURL: `https://${process.env.projectId}.firebaseio.com`,
+}
+
+// Config for react-redux-firebase
+// For more details, visit http://docs.react-redux-firebase.com/history/v2.0.0/docs/api/enhancer.html
+export const reduxFirebase = {
+ userProfile: 'users', // root that user profiles are written to
+ // updateProfileOnLogin: false, // enable/disable updating of profile on login
+ // enableLogging: false, // enable/disable Firebase Database Logging
+ // presence: 'presence',
+ // autoPopulateProfile: true, // keep auto population of profile from v1
+ // profileParamsToPopulate: [
+ // // create queries for profile population (remember to use populate)
+ // { child: 'cars', root: 'cars' }
+ // ],
+ // useFirestoreForProfile: true, // Use Firestore to store profile
+ // profileParamsToPopulate: [{ child: 'cars', root: 'cars' }] // gather data for populating profile params
+ // profileDecorator: (userData) => ({ email: userData.email }) // customize format of user profile
+}
+
+export default { env, reduxFirebase }
diff --git a/src/.constants.js.swp b/src/.constants.js.swp
new file mode 100644
index 0000000..5546946
Binary files /dev/null and b/src/.constants.js.swp differ
diff --git a/src/components/LoadingSpinner/LoadingSpinner.js b/src/components/LoadingSpinner/LoadingSpinner.js
new file mode 100644
index 0000000..e933140
--- /dev/null
+++ b/src/components/LoadingSpinner/LoadingSpinner.js
@@ -0,0 +1,18 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import CircularProgress from 'material-ui/CircularProgress'
+import classes from './LoadingSpinner.scss'
+
+export const LoadingSpinner = ({ size }) => (
+
+)
+
+LoadingSpinner.propTypes = {
+ size: PropTypes.number
+}
+
+export default LoadingSpinner
diff --git a/src/components/LoadingSpinner/LoadingSpinner.scss b/src/components/LoadingSpinner/LoadingSpinner.scss
new file mode 100644
index 0000000..b35bb76
--- /dev/null
+++ b/src/components/LoadingSpinner/LoadingSpinner.scss
@@ -0,0 +1,13 @@
+@import 'base';
+
+.container {
+ @extend .flex-column-center;
+ justify-content: flex-start;
+ padding-top: 7rem;
+ height: 100%;
+}
+.progress {
+ @extend .flex-row-center;
+ align-items: center;
+ height: 50%;
+}
diff --git a/src/components/LoadingSpinner/index.js b/src/components/LoadingSpinner/index.js
new file mode 100644
index 0000000..e5dbf50
--- /dev/null
+++ b/src/components/LoadingSpinner/index.js
@@ -0,0 +1,3 @@
+import LoadingSpinner from './LoadingSpinner'
+
+export default LoadingSpinner
diff --git a/src/constants.js b/src/constants.js
new file mode 100644
index 0000000..abc8b11
--- /dev/null
+++ b/src/constants.js
@@ -0,0 +1,38 @@
+export const LIST_PATH = '/projects'
+export const DETAIL_PATH = ':projectname'
+export const ACCOUNT_PATH = '/account'
+export const LOGIN_PATH = '/login'
+export const SIGNUP_PATH = '/signup'
+export const HOST_PATH = '/host'
+
+export const ACCOUNT_FORM_NAME = 'account'
+export const LOGIN_FORM_NAME = 'login'
+export const SIGNUP_FORM_NAME = 'signup'
+export const PHONE_FORM_NAME = 'phone'
+export const NEW_PROJECT_FORM_NAME = 'newProject'
+export const RECOVER_CODE_FORM_NAME = 'recoverCode'
+export const RECOVER_EMAIL_FORM_NAME = 'recoverEmail'
+export const NEW_TODO_FORM_NAME = 'newTodo'
+export const NEW_CONNECT_CODE = 'newConnectCode'
+
+export const formNames = {
+ account: ACCOUNT_FORM_NAME,
+ signup: SIGNUP_FORM_NAME,
+ login: LOGIN_FORM_NAME,
+ phone: PHONE_FORM_NAME,
+ recoverCode: RECOVER_CODE_FORM_NAME,
+ recoverEmail: RECOVER_EMAIL_FORM_NAME,
+ newTodo: NEW_TODO_FORM_NAME,
+ newConnectCode: NEW_CONNECT_CODE,
+}
+
+export const paths = {
+ list: LIST_PATH,
+ host: HOST_PATH,
+ account: ACCOUNT_PATH,
+ detail: DETAIL_PATH,
+ login: LOGIN_PATH,
+ signup: SIGNUP_PATH
+}
+
+export default { ...paths, ...formNames }
diff --git a/src/containers/App/App.js b/src/containers/App/App.js
new file mode 100644
index 0000000..e3703fb
--- /dev/null
+++ b/src/containers/App/App.js
@@ -0,0 +1,48 @@
+import React, { Component } from 'react'
+import PropTypes from 'prop-types'
+import { Router } from 'react-router'
+import { Provider } from 'react-redux'
+import hashHistory from '../../history';
+import {connect} from 'react-redux';
+
+// Themeing/Styling
+import Theme from 'theme'
+import getMuiTheme from 'material-ui/styles/getMuiTheme'
+import darkBaseTheme from 'material-ui/styles/baseThemes/darkBaseTheme';
+import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
+import Notifications from 'react-notification-system-redux';
+
+
+class AppContainer extends Component {
+ static childContextTypes = {
+ muiTheme: PropTypes.object
+ }
+
+ static propTypes = {
+ routes: PropTypes.object.isRequired,
+ store: PropTypes.object.isRequired
+ }
+
+ getChildContext = () => ({
+ muiTheme: getMuiTheme(Theme)
+ })
+
+ render() {
+ const { routes, store } = this.props
+ const {notifications} = this.props;
+ return (
+
+
+
+
+ {routes}
+
+
+
+ )
+ }
+}
+
+export default connect(
+ state => ({ notifications: state.notifications })
+)(AppContainer);
diff --git a/src/containers/App/App.scss b/src/containers/App/App.scss
new file mode 100644
index 0000000..aaf3ea4
--- /dev/null
+++ b/src/containers/App/App.scss
@@ -0,0 +1,3 @@
+html, body, div {
+ height: auto;
+}
diff --git a/src/containers/App/index.js b/src/containers/App/index.js
new file mode 100644
index 0000000..f22feb8
--- /dev/null
+++ b/src/containers/App/index.js
@@ -0,0 +1,3 @@
+import App from './App'
+
+export default App
diff --git a/src/containers/Navbar/Navbar.js b/src/containers/Navbar/Navbar.js
new file mode 100644
index 0000000..3e90181
--- /dev/null
+++ b/src/containers/Navbar/Navbar.js
@@ -0,0 +1,135 @@
+import React, { Component } from 'react'
+import PropTypes from 'prop-types'
+import { Link } from 'react-router'
+import AppBar from 'material-ui/AppBar'
+import IconMenu from 'material-ui/IconMenu'
+import IconButton from 'material-ui/IconButton'
+import MenuItem from 'material-ui/MenuItem'
+import FlatButton from 'material-ui/FlatButton'
+import DownArrow from 'material-ui/svg-icons/hardware/keyboard-arrow-down'
+import Avatar from 'material-ui/Avatar'
+import { connect } from 'react-redux'
+import { firebaseConnect, isLoaded, isEmpty } from 'react-redux-firebase'
+import { LIST_PATH, ACCOUNT_PATH, LOGIN_PATH, SIGNUP_PATH } from 'constants'
+import defaultUserImage from 'static/User.png'
+import classes from './Navbar.scss'
+import SvgIcon from 'material-ui/SvgIcon';
+const HomeIcon = (props) => (
+
+
+
+);
+
+
+const buttonStyle = {
+ color: 'white',
+ textDecoration: 'none',
+ alignSelf: 'center'
+}
+
+const avatarStyles = {
+ wrapper: { marginTop: 0 },
+ button: { marginRight: '.5rem', width: '200px', height: '64px' },
+ buttonSm: {
+ marginRight: '.5rem',
+ width: '30px',
+ height: '64px',
+ padding: '0'
+ }
+}
+
+@firebaseConnect()
+@connect(({ firebase: { auth, profile } }) => ({
+ auth,
+ profile
+}))
+export default class Navbar extends Component {
+ static contextTypes = {
+ router: PropTypes.object.isRequired
+ }
+
+ static propTypes = {
+ profile: PropTypes.object,
+ auth: PropTypes.object,
+ firebase: PropTypes.object.isRequired
+ }
+
+ handleLogout = () => {
+ this.props.firebase.logout()
+ this.context.router.push('/')
+ }
+
+ render() {
+ const { profile, auth } = this.props
+ const dataLoaded = isLoaded(auth, profile)
+ const authExists = isLoaded(auth) && !isEmpty(auth)
+
+ const iconButton = (
+
+
+
+
+
+ {profile && profile.displayName ? profile.displayName : 'User'}
+
+
+
+
+
+ )
+
+ const rightMenu =
+ dataLoaded && authExists ? (
+
+
+ ) : (
+
+
+
+
+
+
+
+
+ )
+
+ return (
+
+
+ Partify
+
+ { auth.email &&
+
+
+
+
+ }
+
+ }
+ showMenuIconButton={false}
+ iconElementRight={rightMenu}
+ iconStyleRight={authExists ? avatarStyles.wrapper : {}}
+ className={classes.appBar}
+ />
+ )
+ }
+}
diff --git a/src/containers/Navbar/Navbar.scss b/src/containers/Navbar/Navbar.scss
new file mode 100644
index 0000000..767bb64
--- /dev/null
+++ b/src/containers/Navbar/Navbar.scss
@@ -0,0 +1,70 @@
+@import 'base';
+.brand {
+ font-weight: 200;
+ .icon {
+ height: 50px;
+ margin-top: 7px;
+ @include mobile {
+ width: 3rem;
+ height: 3rem;
+ margin-top: 1.1rem;
+ }
+ }
+}
+// fix button alignment
+.appBar > div {
+ @extend .flex-row;
+ align-items: center;
+ margin-top: 0px !important;
+ @include mobile {
+ justify-content: flex-end;
+ }
+}
+.wrapper {
+ @extend .flex-row;
+ align-items: flex-start;
+ flex-wrap: wrap;
+ flex-grow: 1;
+ height: 64px;
+}
+.avatar {
+ margin-right: 1rem;
+ @extend .flex-row-center;
+ align-items: center;
+ flex-grow: 1;
+ @include mobile {
+ margin-right: 0;
+ justify-content: flex-end;
+ }
+ &-text {
+ @extend .flex-row-center;
+ font-weight: 200;
+ cursor: pointer;
+ color: white !important;
+ align-items: center;
+ margin-left: 1rem;
+ height: 100%;
+ flex-grow: 1;
+ font-size: 1rem;
+ &-name {
+ min-width: 5rem;
+ margin-right: 1rem;
+ }
+ @include mobile {
+ display: none;
+ }
+ }
+}
+
+.link {
+ text-decoration: none;
+}
+
+.title {
+ font-weight: 300;
+ text-overflow: ellipsis;
+ flex-shrink: 1;
+ @include mobile {
+ display: none;
+ }
+}
diff --git a/src/containers/Navbar/index.js b/src/containers/Navbar/index.js
new file mode 100644
index 0000000..47edc16
--- /dev/null
+++ b/src/containers/Navbar/index.js
@@ -0,0 +1,3 @@
+import Navbar from './Navbar'
+
+export default Navbar
diff --git a/src/history.js b/src/history.js
new file mode 100644
index 0000000..6642e45
--- /dev/null
+++ b/src/history.js
@@ -0,0 +1,2 @@
+import { hashHistory } from 'react-router';
+export default hashHistory;
diff --git a/src/index.html b/src/index.html
new file mode 100755
index 0000000..0f00661
--- /dev/null
+++ b/src/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+ Partify
+
+
+
+
+
diff --git a/src/layouts/CoreLayout/CoreLayout.js b/src/layouts/CoreLayout/CoreLayout.js
new file mode 100755
index 0000000..092c2d7
--- /dev/null
+++ b/src/layouts/CoreLayout/CoreLayout.js
@@ -0,0 +1,19 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import Navbar from 'containers/Navbar'
+import classes from './CoreLayout.scss'
+import 'styles/core.scss'
+
+export const CoreLayout = ({ children }) => (
+
+)
+
+CoreLayout.propTypes = {
+ children: PropTypes.element.isRequired
+}
+
+export default CoreLayout
diff --git a/src/layouts/CoreLayout/CoreLayout.scss b/src/layouts/CoreLayout/CoreLayout.scss
new file mode 100755
index 0000000..53f7ab1
--- /dev/null
+++ b/src/layouts/CoreLayout/CoreLayout.scss
@@ -0,0 +1,27 @@
+
+.container {
+ height: 100%;
+ overflow-y: hidden;
+}
+.children{
+ height: calc(100% - 48px);
+ padding-right: 15px;
+ padding-left: 16px;
+ margin-right: auto;
+ margin-left: auto;
+}
+@media (min-width: 768px) {
+ .children{
+ width: 750px;
+ }
+}
+@media (min-width: 992px) {
+ .children{
+ width: 970px;
+ }
+}
+@media (min-width: 1200px) {
+ .children{
+ width: 1170px;
+ }
+}
diff --git a/src/layouts/CoreLayout/index.js b/src/layouts/CoreLayout/index.js
new file mode 100755
index 0000000..7fe88c1
--- /dev/null
+++ b/src/layouts/CoreLayout/index.js
@@ -0,0 +1,3 @@
+import CoreLayout from './CoreLayout'
+
+export default CoreLayout
diff --git a/src/main.js b/src/main.js
new file mode 100755
index 0000000..31f2b02
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,71 @@
+import React from 'react'
+import ReactDOM from 'react-dom'
+import injectTapEventPlugin from 'react-tap-event-plugin'
+import createStore from './store/createStore'
+import { version } from '../package.json'
+import { env } from './.config'
+import 'babel-polyfill';
+import './styles/core.scss'
+
+// Window Variables
+// ------------------------------------
+window.version = version
+window.env = env
+
+// Store Initialization
+// ------------------------------------
+const initialState = window.___INITIAL_STATE__ || {
+ firebase: { authError: null }
+}
+const store = createStore(initialState)
+
+// Render Setup
+// ------------------------------------
+const MOUNT_NODE = document.getElementById('root')
+
+let render = () => {
+ const App = require('./containers/App').default
+ const routes = require('./routes/index').default(store)
+ // Tap Plugin for material-ui
+ try {
+ injectTapEventPlugin()
+ } catch (err) {
+ // Silence warning about placing before render seen on hot reload
+ }
+
+ ReactDOM.render(, MOUNT_NODE)
+}
+
+// Development Tools
+// ------------------------------------
+if (__DEV__) {
+ if (module.hot) {
+ const renderApp = render
+ const renderError = error => {
+ const RedBox = require('redbox-react').default
+
+ ReactDOM.render(, MOUNT_NODE)
+ }
+
+ render = () => {
+ try {
+ renderApp()
+ } catch (e) {
+ console.error(e) // eslint-disable-line no-console
+ renderError(e)
+ }
+ }
+
+ // Setup hot module replacement
+ module.hot.accept(['./containers/App', './routes/index'], () =>
+ setImmediate(() => {
+ ReactDOM.unmountComponentAtNode(MOUNT_NODE)
+ render()
+ })
+ )
+ }
+}
+
+// Let's Go!
+// ------------------------------------
+if (!__TEST__) render()
diff --git a/src/modules/notification/actionTypes.js b/src/modules/notification/actionTypes.js
new file mode 100644
index 0000000..ab779d8
--- /dev/null
+++ b/src/modules/notification/actionTypes.js
@@ -0,0 +1,3 @@
+export const NOTIFICATION_SHOW = 'NOTIFICATION_SHOW'
+export const NOTIFICATION_DISMISS = 'NOTIFICATION_DISMISS'
+export const NOTIFICATION_CLEAR = 'NOTIFICATION_CLEAR'
diff --git a/src/modules/notification/actions.js b/src/modules/notification/actions.js
new file mode 100644
index 0000000..7b71c70
--- /dev/null
+++ b/src/modules/notification/actions.js
@@ -0,0 +1,53 @@
+import {
+ NOTIFICATION_SHOW,
+ NOTIFICATION_DISMISS,
+ NOTIFICATION_CLEAR
+} from './actionTypes'
+
+const defaultDismissTime = 2500 // 2.5 seconds
+
+/**
+ * @description Publish a notification. if `dismissAfter` is set,
+ * the notification will be auto dismissed after the given period.
+ * @param {Object} notif - Object containing
+ * @param {Object} notif.kind - Kinda of notification (success, warning, failure)
+ * @param {Object} notif.message - Notification message
+ * @param {Object} notif.dismissAfter - Time after which to dismiss notification (default time set in constants)
+ */
+export const showNotification = notif => {
+ const payload = Object.assign({}, notif)
+ // Set default id to now if none provided
+ if (!payload.id) {
+ payload.id = Date.now()
+ }
+ return dispatch => {
+ dispatch({ type: NOTIFICATION_SHOW, payload })
+
+ setTimeout(() => {
+ dispatch({
+ type: NOTIFICATION_DISMISS,
+ payload: payload.id
+ })
+ }, payload.dismissAfter || defaultDismissTime)
+ }
+}
+
+export const showSuccess = message =>
+ showNotification({ type: 'success', message })
+
+export const showError = message =>
+ showNotification({ type: 'success', message })
+
+/**
+ * @description Dismiss a notification by the given id.
+ * @param {Number} id - notification id
+ */
+export const dismissNotification = payload => ({
+ type: NOTIFICATION_DISMISS,
+ payload
+})
+
+/**
+ * @description Clear all notifications
+ */
+export const clearNotifications = () => ({ type: NOTIFICATION_CLEAR })
diff --git a/src/modules/notification/components/Notifications.js b/src/modules/notification/components/Notifications.js
new file mode 100644
index 0000000..08f7d40
--- /dev/null
+++ b/src/modules/notification/components/Notifications.js
@@ -0,0 +1,37 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { size } from 'lodash'
+import { connect } from 'react-redux'
+import { pure, compose, renderNothing, branch } from 'recompose'
+import Snackbar from 'material-ui/Snackbar'
+import CloseIcon from 'material-ui/svg-icons/navigation/close'
+import * as actions from '../actions'
+const closeIconStyle = { paddingTop: '5px', height: '30px' }
+
+export const Notifications = ({ allIds, byId, dismissNotification }) => (
+
+ {allIds.map(id => (
+ }
+ onActionTouchTap={() => dismissNotification(id)}
+ message={byId[id].message}
+ />
+ ))}
+
+)
+
+Notifications.propTypes = {
+ allIds: PropTypes.array.isRequired,
+ byId: PropTypes.object.isRequired,
+ dismissNotification: PropTypes.func.isRequired
+}
+
+export default compose(
+ pure,
+ connect(({ notifications: { allIds, byId } }) => ({ allIds, byId }), actions),
+ branch(props => !size(props.allIds), renderNothing) // only render if notifications exist
+)(Notifications)
diff --git a/src/modules/notification/components/withNotifications.js b/src/modules/notification/components/withNotifications.js
new file mode 100644
index 0000000..2ffbf77
--- /dev/null
+++ b/src/modules/notification/components/withNotifications.js
@@ -0,0 +1,15 @@
+import { compose, withHandlers } from 'recompose'
+import { withStore } from 'utils/components'
+import * as actions from '../actions'
+
+const withNotifications = compose(
+ withStore,
+ withHandlers({
+ showError: ({ store }) => err => actions.showError(err)(store.dispatch),
+ showSuccess: ({ store }) => err => actions.showSuccess(err)(store.dispatch),
+ dismissNotification: ({ store }) => id =>
+ actions.dismissNotification(id)(store.dispatch)
+ })
+)
+
+export default withNotifications
diff --git a/src/modules/notification/index.js b/src/modules/notification/index.js
new file mode 100644
index 0000000..9b6a64a
--- /dev/null
+++ b/src/modules/notification/index.js
@@ -0,0 +1,7 @@
+import * as actions from './actions'
+
+export default actions
+export reducer from './reducer'
+export withNotifications from './components/withNotifications'
+export Notifications from './components/Notifications'
+export * as actionTypes from './actionTypes'
diff --git a/src/modules/notification/reducer.js b/src/modules/notification/reducer.js
new file mode 100644
index 0000000..7c2d701
--- /dev/null
+++ b/src/modules/notification/reducer.js
@@ -0,0 +1,43 @@
+import { combineReducers } from 'redux'
+import { without, omit } from 'lodash'
+import { NOTIFICATION_SHOW, NOTIFICATION_DISMISS } from './actionTypes'
+
+const notification = (state = {}, action) => {
+ switch (action.type) {
+ case NOTIFICATION_SHOW:
+ return action.payload
+ case NOTIFICATION_DISMISS:
+ return undefined
+ default:
+ return state
+ }
+}
+
+const allIds = (state = [], action) => {
+ switch (action.type) {
+ case NOTIFICATION_SHOW:
+ return [...state, action.payload.id]
+ case NOTIFICATION_DISMISS:
+ return without(state, action.payload)
+ default:
+ return state
+ }
+}
+
+const byId = (state = {}, action) => {
+ switch (action.type) {
+ case NOTIFICATION_SHOW:
+ return {
+ ...state,
+ [action.payload.id]: notification(state[action.payload.id], action)
+ }
+ case NOTIFICATION_DISMISS:
+ return omit(state, action.payload)
+ default:
+ return state
+ }
+}
+
+export const notifications = combineReducers({ byId, allIds })
+
+export default notifications
diff --git a/src/normalize.js b/src/normalize.js
new file mode 100644
index 0000000..0f2989e
--- /dev/null
+++ b/src/normalize.js
@@ -0,0 +1,33 @@
+/* ========================================================
+ ** Browser Normalizer **
+ This file is responsible for normalizing the browser environment before
+ the application starts. Doing this allows us to safely use modern language
+ features even when the end user is running an older browser.
+ The following polyfills are included by default:
+ 1) Object.assign
+ 2) Promise
+ 3) Fetch
+ ====================================================== */
+
+// 1) Object.assign
+// ------------------------------------
+// We can't rely on Object.assign being a function since it may be buggy, so
+// defer to `object-assign`. If our Object.assign implementation is correct
+// (determined by `object-assign` internally) the polyfill will be discarded
+// and the native implementation used.
+Object.assign = require('object-assign')
+
+// 2) Promise
+// ------------------------------------
+if (typeof Promise === 'undefined') {
+ require('promise/lib/rejection-tracking').enable()
+ window.Promise = require('promise/lib/es6-extensions.js')
+}
+
+// 3) Fetch
+// ------------------------------------
+// Fetch polyfill depends on a Promise implementation, so it must come after
+// the feature check / polyfill above.
+if (typeof window.fetch === 'undefined') {
+ require('whatwg-fetch')
+}
diff --git a/src/routes/index.js b/src/routes/index.js
new file mode 100755
index 0000000..5099d9d
--- /dev/null
+++ b/src/routes/index.js
@@ -0,0 +1,31 @@
+// We only need to import the modules necessary for initial render
+import CoreLayout from '../layouts/CoreLayout'
+import Home from '../scenes/Home'
+import LoginRoute from '../scenes/Login'
+import SignupRoute from '../scenes/Signup'
+import ProjectsRoute from '../scenes/Projects'
+import AccountRoute from '../scenes/Account'
+import RecoverRoute from '../scenes/Recover'
+import NotFoundRoute from '../scenes/NotFound'
+import HostRoute from '../scenes/Host'
+
+/* Note: Instead of using JSX, we recommend using react-router
+ PlainRoute objects to build route definitions. */
+
+export const createRoutes = store => ({
+ path: '/',
+ component: CoreLayout,
+ indexRoute: Home,
+ childRoutes: [
+ AccountRoute,
+ LoginRoute,
+ SignupRoute,
+ HostRoute(store),
+ ProjectsRoute(store), // async route definitions recieve store
+ RecoverRoute(store), // async route definitions recieve store
+ /* Place all Routes above here so NotFoundRoute can act as a 404 page */
+ NotFoundRoute(store) // async route definitions recieve store
+ ]
+})
+
+export default createRoutes
diff --git a/src/scenes/Account/components/AccountForm/AccountForm.js b/src/scenes/Account/components/AccountForm/AccountForm.js
new file mode 100644
index 0000000..d21c7c1
--- /dev/null
+++ b/src/scenes/Account/components/AccountForm/AccountForm.js
@@ -0,0 +1,48 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Field, reduxForm } from 'redux-form'
+import RaisedButton from 'material-ui/RaisedButton'
+import { TextField } from 'redux-form-material-ui'
+import { ACCOUNT_FORM_NAME } from 'constants'
+import ProviderDataForm from '../ProviderDataForm/ProviderDataForm'
+import classes from './AccountForm.scss'
+
+export const AccountForm = ({ account, handleSubmit, submitting }) => (
+
+)
+
+AccountForm.propTypes = {
+ account: PropTypes.object,
+ handleSubmit: PropTypes.func,
+ submitting: PropTypes.bool
+}
+
+export default reduxForm({
+ form: ACCOUNT_FORM_NAME
+})(AccountForm)
diff --git a/src/scenes/Account/components/AccountForm/AccountForm.scss b/src/scenes/Account/components/AccountForm/AccountForm.scss
new file mode 100644
index 0000000..b65a647
--- /dev/null
+++ b/src/scenes/Account/components/AccountForm/AccountForm.scss
@@ -0,0 +1,17 @@
+@import 'base';
+
+.container {
+ @extend .flex-column-center;
+ justify-content: flex-start;
+ height: 100%;
+ width: 100%;
+ margin: .2rem;
+}
+
+.submit {
+ @extend .flex-column-center;
+ width: 30%;
+ min-width: 192px;
+ margin-top: 1.5rem;
+ text-align: center;
+}
diff --git a/src/scenes/Account/components/AccountForm/index.js b/src/scenes/Account/components/AccountForm/index.js
new file mode 100644
index 0000000..78d9a44
--- /dev/null
+++ b/src/scenes/Account/components/AccountForm/index.js
@@ -0,0 +1,3 @@
+import AccountForm from './AccountForm'
+
+export default AccountForm
diff --git a/src/scenes/Account/components/AccountPage/AccountPage.js b/src/scenes/Account/components/AccountPage/AccountPage.js
new file mode 100644
index 0000000..8d2fa98
--- /dev/null
+++ b/src/scenes/Account/components/AccountPage/AccountPage.js
@@ -0,0 +1,74 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import Paper from 'material-ui/Paper'
+import { compose } from 'redux'
+import { connect } from 'react-redux'
+import { withHandlers } from 'recompose'
+import { withFirebase } from 'react-redux-firebase'
+import { spinnerWhileLoading } from 'utils/components'
+import { UserIsAuthenticated } from 'utils/router'
+import AccountForm from '../AccountForm'
+import defaultUserImageUrl from 'static/User.png'
+import {push} from 'react-router-redux'
+import classes from './AccountPage.scss'
+import { success, error, warning, info, removeAll } from 'react-notification-system-redux';
+
+export const AccountPage = ({ avatarUrl, updateAccount, profile }) => (
+
+
+
+
+

+
+
+
+
+
+)
+
+AccountPage.propTypes = {
+ avatarUrl: PropTypes.string,
+ profile: PropTypes.object,
+ updateAccount: PropTypes.func
+}
+
+export default compose(
+ UserIsAuthenticated, // redirect to /login if user is not authenticated
+ withFirebase, // adds props.firebase
+ connect(({ firebase:{ auth },firebase: { profile }, hostReducer }) => ({
+ auth,
+ hostReducer,
+ profile,
+ avatarUrl: profile.avatarUrl
+ })),
+ spinnerWhileLoading(['profile']),
+ withHandlers({
+ updateAccount: ({firebase, hostReducer, dispatch}) => newAccount =>{
+ try{
+ firebase.updateProfile({
+ displayName: newAccount.displayName,
+ email: newAccount.email,
+ })
+ if(hostReducer != undefined){
+ dispatch(push(`Host/Party/${hostReducer}`))
+ }else{
+ dispatch(push(`/`))
+ }
+ }catch(e){
+ dispatch(error({
+ title: 'Error',
+ message: e.message,
+ position: 'tr',
+ }));
+ }
+ }})
+)(AccountPage)
diff --git a/src/scenes/Account/components/AccountPage/AccountPage.scss b/src/scenes/Account/components/AccountPage/AccountPage.scss
new file mode 100644
index 0000000..a336b66
--- /dev/null
+++ b/src/scenes/Account/components/AccountPage/AccountPage.scss
@@ -0,0 +1,33 @@
+@import 'base';
+
+.container {
+ @extend .flex-row-center;
+ align-items: center;
+ padding-top: 4rem;
+ margin-bottom: 2rem;
+}
+.pane {
+ @extend .flex-column-center;
+ justify-content: space-around;
+ flex-basis: 60%;
+}
+.settings {
+ @extend .flex-row-center;
+ align-items: center;
+ width: 100%;
+}
+.avatar {
+ &Current {
+ width: 100%;
+ max-width: 13rem;
+ height: auto;
+ cursor: pointer;
+ }
+}
+.meta {
+ @extend .flex-column-center;
+ justify-content: center;
+ flex-basis: 60%;
+ margin-bottom: 3rem;
+ margin-top: 2rem;
+}
diff --git a/src/scenes/Account/components/AccountPage/index.js b/src/scenes/Account/components/AccountPage/index.js
new file mode 100644
index 0000000..7e550cb
--- /dev/null
+++ b/src/scenes/Account/components/AccountPage/index.js
@@ -0,0 +1,3 @@
+import AccountPage from './AccountPage'
+
+export default AccountPage
diff --git a/src/scenes/Account/components/ProviderDataForm/ProviderDataForm.js b/src/scenes/Account/components/ProviderDataForm/ProviderDataForm.js
new file mode 100644
index 0000000..6a964fa
--- /dev/null
+++ b/src/scenes/Account/components/ProviderDataForm/ProviderDataForm.js
@@ -0,0 +1,37 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { List, ListItem } from 'material-ui/List'
+import classes from './ProviderDataForm.scss'
+import AccountCircle from 'material-ui/svg-icons/action/account-circle'
+
+export const ProviderData = ({ providerData }) => (
+
+
+ {providerData.map((providerAccount, i) => (
+ }
+ nestedItems={[
+ ,
+
+ ]}
+ />
+ ))}
+
+
+)
+
+ProviderData.propTypes = {
+ providerData: PropTypes.array.isRequired
+}
+
+export default ProviderData
diff --git a/src/scenes/Account/components/ProviderDataForm/ProviderDataForm.scss b/src/scenes/Account/components/ProviderDataForm/ProviderDataForm.scss
new file mode 100644
index 0000000..e6e1c8c
--- /dev/null
+++ b/src/scenes/Account/components/ProviderDataForm/ProviderDataForm.scss
@@ -0,0 +1,5 @@
+.container {
+ ul {
+ list-style-type: none;
+ }
+}
diff --git a/src/scenes/Account/components/ProviderDataForm/index.js b/src/scenes/Account/components/ProviderDataForm/index.js
new file mode 100644
index 0000000..df46392
--- /dev/null
+++ b/src/scenes/Account/components/ProviderDataForm/index.js
@@ -0,0 +1,3 @@
+import ProviderDataForm from './ProviderDataForm'
+
+export default ProviderDataForm
diff --git a/src/scenes/Account/index.js b/src/scenes/Account/index.js
new file mode 100644
index 0000000..a9aab36
--- /dev/null
+++ b/src/scenes/Account/index.js
@@ -0,0 +1,7 @@
+import { ACCOUNT_PATH as path } from 'constants'
+import component from './components/AccountPage'
+
+export default {
+ path,
+ component
+}
diff --git a/src/scenes/Home/components/Connect/Connect.js b/src/scenes/Home/components/Connect/Connect.js
new file mode 100644
index 0000000..c8a4bc9
--- /dev/null
+++ b/src/scenes/Home/components/Connect/Connect.js
@@ -0,0 +1,54 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Field, reduxForm } from 'redux-form'
+import { TextField } from 'redux-form-material-ui'
+import Paper from 'material-ui/Paper'
+import IconButton from 'material-ui/IconButton'
+import ContentAdd from 'material-ui/svg-icons/content/add'
+import Subheader from 'material-ui/Subheader'
+import { NEW_CONNECT_CODE } from 'constants'
+import { required } from 'utils/form'
+import FlatButton from 'material-ui/FlatButton';
+
+
+const renderTextField = (
+ { input, label, meta: { touched, error }, ...custom },
+) => (
+
+);
+
+const Connect = ({ submitting, handleSubmit, disabled }) => (
+
+)
+
+Connect.propTypes = {
+ handleSubmit: PropTypes.func,
+ disabled: PropTypes.bool,
+ submitting: PropTypes.bool
+}
+
+export default reduxForm({
+ form: NEW_CONNECT_CODE
+})(Connect)
diff --git a/src/scenes/Home/components/Connect/Connect.scss b/src/scenes/Home/components/Connect/Connect.scss
new file mode 100644
index 0000000..1bb5731
--- /dev/null
+++ b/src/scenes/Home/components/Connect/Connect.scss
@@ -0,0 +1,13 @@
+.full {
+ border:1px solid #000;
+ padding:10px;
+ margin:10px;
+}
+
+.input {
+width:100%
+}
+input, select {
+ width:100%;
+}
+
diff --git a/src/scenes/Home/components/HomePage/.HomePage.js.swp b/src/scenes/Home/components/HomePage/.HomePage.js.swp
new file mode 100644
index 0000000..0533e06
Binary files /dev/null and b/src/scenes/Home/components/HomePage/.HomePage.js.swp differ
diff --git a/src/scenes/Home/components/HomePage/HomePage.js b/src/scenes/Home/components/HomePage/HomePage.js
new file mode 100644
index 0000000..603d112
--- /dev/null
+++ b/src/scenes/Home/components/HomePage/HomePage.js
@@ -0,0 +1,76 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { connect } from 'react-redux'
+import { compose, withHandlers } from 'recompose'
+import { withNotifications } from 'modules/notification'
+import classes from './HomePage.scss'
+import Connect from '../Connect/Connect.js'
+import Party from '../../../../static/20151017_000009.jpg'
+import {push} from 'react-router-redux'
+import {Card, CardActions, CardHeader, CardMedia, CardTitle, CardText} from 'material-ui/Card';
+import { firebaseConnect, populate } from 'react-redux-firebase'
+import { success, error, warning, info, removeAll } from 'react-notification-system-redux';
+import { setHost } from '../../../../store/host.js';
+
+const mapDispatchToProps = (dispatch)=> {
+ return({
+ changeLocation: (loc) => dispatch(push(loc)),
+ sendError: (errorObj) => dispatch(error(errorObj))
+ })
+}
+
+const enhance = compose(
+ firebaseConnect([]),
+ connect(
+ ({ firebase, firebase: { auth }}) => ({
+ uid: auth.uid,
+ }),
+ mapDispatchToProps
+ ),
+ withHandlers({
+ addNew: props => async Host=>{
+ const {sendError, changeLocation, firebase, uid} = props;
+ try{
+ const ref = firebase.database().ref(`projects/${Host.code}`);
+ const snapshot = await ref.once('value');
+ const value = snapshot.val();
+ if(value != undefined){
+ if(uid == undefined){
+ firebase.auth().signInAnonymously()
+ }
+ changeLocation(`Host/Party/${value.name}`)
+ }else
+ throw new Error("Invalid Host Code")
+ }catch(e) {
+ sendError({
+ title: 'Error',
+ message: 'Invalid Host Code',
+ position: 'tr',
+ });
+ console.error(e.message,e.stack)
+ }
+ },
+ })
+)
+
+const Home = ({ addNew, onSubmitFail }) => (
+
+ } >
+
+
+
+
+ They wanna hear it! Partify lets your guests control the music at home or wherever you are.
+
+
+)
+
+Home.propTypes = {
+ addNew: PropTypes.func.isRequired,
+ uid: PropTypes.string
+}
+
+export default enhance(Home)
diff --git a/src/scenes/Home/components/HomePage/HomePage.scss b/src/scenes/Home/components/HomePage/HomePage.scss
new file mode 100644
index 0000000..a7acf84
--- /dev/null
+++ b/src/scenes/Home/components/HomePage/HomePage.scss
@@ -0,0 +1,72 @@
+@import 'base';
+.container {
+ @extend .flex-column-center;
+ padding-top: 4rem;
+}
+.info {
+ color: #ecb985 !important;
+}
+.note {
+}
+
+.container {
+ background-color: #333;
+ animation: glitch 10.5s infinite;
+}
+
+
+@keyframes glitch {
+ 0% {
+ transform: none;
+ opacity: 1;
+ }
+ 7% {
+ transform: skew(-0.5deg, -0.9deg);
+ opacity: 0.75;
+ }
+ 10% {
+ transform: none;
+ opacity: 1;
+ }
+ 27% {
+ transform: none;
+ opacity: 1;
+ }
+ 30% {
+ transform: skew(0.8deg, -0.1deg);
+ opacity: 0.75;
+ }
+ 35% {
+ transform: none;
+ opacity: 1;
+ }
+ 52% {
+ transform: none;
+ opacity: 1;
+ }
+ 55% {
+ transform: skew(-1deg, 0.2deg);
+ opacity: 0.75;
+ }
+ 50% {
+ transform: none;
+ opacity: 1;
+ }
+ 72% {
+ transform: none;
+ opacity: 1;
+ }
+ 75% {
+ transform: skew(0.4deg, 1deg);
+ opacity: 0.75;
+ }
+ 80% {
+ transform: translate3d(calc(-1 * 2px),0,0);
+ opacity: 1;
+ }
+ 100% {
+ transform: none;
+ opacity: 1;
+ }
+}
+
diff --git a/src/scenes/Home/components/HomePage/index.js b/src/scenes/Home/components/HomePage/index.js
new file mode 100644
index 0000000..aa7d602
--- /dev/null
+++ b/src/scenes/Home/components/HomePage/index.js
@@ -0,0 +1,3 @@
+import HomePage from './HomePage'
+
+export default HomePage
diff --git a/src/scenes/Home/index.js b/src/scenes/Home/index.js
new file mode 100755
index 0000000..90dea0e
--- /dev/null
+++ b/src/scenes/Home/index.js
@@ -0,0 +1,6 @@
+import HomePage from './components/HomePage'
+
+// Sync route definition
+export default {
+ component: HomePage
+}
diff --git a/src/scenes/Host/componets/Grid/Grid.js b/src/scenes/Host/componets/Grid/Grid.js
new file mode 100644
index 0000000..9b562af
--- /dev/null
+++ b/src/scenes/Host/componets/Grid/Grid.js
@@ -0,0 +1,46 @@
+import React from 'react';
+import {GridList, GridTile} from 'material-ui/GridList';
+import IconButton from 'material-ui/IconButton';
+import Subheader from 'material-ui/Subheader';
+import StarBorder from 'material-ui/svg-icons/toggle/star-border';
+import Checkbox from 'material-ui/Checkbox';
+
+const styles = {
+ root: {
+ display: 'flex',
+ flexWrap: 'wrap',
+ justifyContent: 'space-around',
+ },
+ gridList: {
+ width: 500,
+ height: 450,
+ overflowY: 'auto',
+ },
+};
+
+
+const Grid= ({tilesData, handleTouchTap}) => (
+
+ {tilesData.map((tile) => (
+ by {tile.artists.map( artist => { artist.name } )}}
+ actionIcon={
+ {handleTouchTap(tile)}}
+ />
+ }
+ >
+
+
+ ))}
+
+);
+export default Grid;
diff --git a/src/scenes/Host/componets/NewTodoPanel/NewTodoPanel.js b/src/scenes/Host/componets/NewTodoPanel/NewTodoPanel.js
new file mode 100755
index 0000000..147c2d5
--- /dev/null
+++ b/src/scenes/Host/componets/NewTodoPanel/NewTodoPanel.js
@@ -0,0 +1,40 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Field, reduxForm } from 'redux-form'
+import { TextField } from 'redux-form-material-ui'
+import Paper from 'material-ui/Paper'
+import IconButton from 'material-ui/IconButton'
+import ContentAdd from 'material-ui/svg-icons/content/add'
+import Subheader from 'material-ui/Subheader'
+import { NEW_TODO_FORM_NAME } from 'constants'
+import { required } from 'utils/form'
+import classes from './NewTodoPanel.scss'
+
+const NewTodoPanel = ({ submitting, handleSubmit, handleChange, disabled }) => (
+
+ New Todo
+
+
+
+
+
+)
+
+NewTodoPanel.propTypes = {
+ handleSubmit: PropTypes.func,
+ disabled: PropTypes.bool,
+ submitting: PropTypes.bool
+}
+
+export default reduxForm({
+ form: NEW_TODO_FORM_NAME
+})(NewTodoPanel)
diff --git a/src/scenes/Host/componets/NewTodoPanel/NewTodoPanel.scss b/src/scenes/Host/componets/NewTodoPanel/NewTodoPanel.scss
new file mode 100755
index 0000000..dd4df28
--- /dev/null
+++ b/src/scenes/Host/componets/NewTodoPanel/NewTodoPanel.scss
@@ -0,0 +1,17 @@
+@import 'base';
+.container {
+ @extend .flex-column-center;
+ padding: 2rem;
+ margin-bottom: 2rem;
+ flex-basis: 60%;
+}
+.inputSection {
+ @extend .flex-row-center;
+ align-items: center;
+}
+.input {
+ margin: 2rem;
+}
+.button {
+ margin: 2rem;
+}
diff --git a/src/scenes/Host/componets/NewTodoPanel/index.js b/src/scenes/Host/componets/NewTodoPanel/index.js
new file mode 100644
index 0000000..aa745f8
--- /dev/null
+++ b/src/scenes/Host/componets/NewTodoPanel/index.js
@@ -0,0 +1,3 @@
+import NewTodoPanel from './NewTodoPanel'
+
+export default NewTodoPanel
diff --git a/src/scenes/Host/componets/SongItem/SongItem.js b/src/scenes/Host/componets/SongItem/SongItem.js
new file mode 100755
index 0000000..c2fca6a
--- /dev/null
+++ b/src/scenes/Host/componets/SongItem/SongItem.js
@@ -0,0 +1,77 @@
+import React, { Component } from 'react'
+import PropTypes from 'prop-types'
+import classes from './SongItem.scss'
+import { ListItem } from 'material-ui/List'
+import Checkbox from 'material-ui/Checkbox'
+import Delete from 'material-ui/svg-icons/action/delete'
+import { isObject } from 'lodash'
+import {GridList, GridTile} from 'material-ui/GridList';
+import IconButton from 'material-ui/IconButton';
+import StarBorder from 'material-ui/svg-icons/toggle/star-border';
+import ActionFavorite from 'material-ui/svg-icons/action/favorite';
+import ActionFavoriteBorder from 'material-ui/svg-icons/action/favorite-border';
+import Badge from 'material-ui/Badge';
+import DeleteIcon from 'material-ui/svg-icons/action/delete'
+import NotificationsIcon from 'material-ui/svg-icons/social/notifications';
+import ThumbUp from 'material-ui/svg-icons/action/thumb-up';
+import ThumbDown from 'material-ui/svg-icons/action/thumb-down';
+
+const SongItem = ({ author, active, disabledUp, disabledDown, song, visableDelete, id, votes, downVote, upVote, onDeleteClick }) => (
+
+ { visableDelete &&
+ onDeleteClick(song, song._key || id)}
+ >
+
+
+ }
+
+ {song.name}
+
+
+ }
+ subtitle={"Song Submitted by " + author}
+ style={{
+ padding: '15%',
+ width: '100%',
+ height: '100%',
+ }}
+ actionIcon={
+
+
+ }
+ uncheckedIcon={}
+ disabled={disabledUp || active}
+ checked={disabledUp || active}
+ onCheck={() => upVote(song, song._key || id)}/>
+
+
+ }
+ uncheckedIcon={}
+ checked={disabledDown || active}
+ disabled={disabledDown || active}
+ onCheck={() => downVote(song, song._key || id)}/>
+
+
+ }
+ actionPosition="right"
+ titlePosition="top"
+ titleBackground={active ? "linear-gradient(to bottom,rgba(121,32,116,1) 0%, rgba(82,0,71,1) 0%, rgba(103,29,96,1) 100%": "linear-gradient(to bottom, rgba(0,0,0,0.7) 0%,rgba(0,0,0,0.3) 70%,rgba(0,0,0,0) 100%)"}
+ >
+
+
+)
+
+SongItem.propTypes = {
+ song: PropTypes.object.isRequired,
+ key: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
+ onDeleteClick: PropTypes.func,
+ onCompleteClick: PropTypes.func
+}
+
+export default SongItem;
diff --git a/src/scenes/Host/componets/SongItem/SongItem.scss b/src/scenes/Host/componets/SongItem/SongItem.scss
new file mode 100755
index 0000000..4f3f3d2
--- /dev/null
+++ b/src/scenes/Host/componets/SongItem/SongItem.scss
@@ -0,0 +1,49 @@
+@import 'base';
+.container {
+ padding-right: 15%;
+ padding-left: 10%;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.img {
+ display:block;
+ margin:auto;
+}
+
+.title{
+ font-family: jaf-bernino-sans-condensed, helvetica, arial, sans-serif;
+ font-size: 1em;
+}
+.container {
+ overflow: hidden;
+}
+
+.badge {
+ display: inline-block;
+ padding: .25em .4em .4em .4em;
+ font-size: 75%;
+ font-weight: 700;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25rem;
+ background-color: #0275d8;
+}
+@media (min-width: 768px) {
+ .container {
+ width: 750px;
+ }
+}
+@media (min-width: 992px) {
+ .container {
+ width: 970px;
+ }
+}
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px;
+ }
+}
diff --git a/src/scenes/Host/componets/SongItem/index.js b/src/scenes/Host/componets/SongItem/index.js
new file mode 100755
index 0000000..cceb725
--- /dev/null
+++ b/src/scenes/Host/componets/SongItem/index.js
@@ -0,0 +1,3 @@
+import SongItem from './SongItem.js'
+
+export default SongItem
diff --git a/src/scenes/Host/componets/SongsList/SongsList.js b/src/scenes/Host/componets/SongsList/SongsList.js
new file mode 100755
index 0000000..d9edcf5
--- /dev/null
+++ b/src/scenes/Host/componets/SongsList/SongsList.js
@@ -0,0 +1,175 @@
+import React, {Component} from 'react'
+import PropTypes from 'prop-types'
+import { map } from 'lodash'
+import { compose, withHandlers } from 'recompose'
+import { isEmpty } from 'react-redux-firebase'
+import { List } from 'material-ui/List'
+import Paper from 'material-ui/Paper'
+import Subheader from 'material-ui/Subheader'
+import { spinnerWhileLoading } from 'utils/components'
+import SongItem from '../SongItem'
+import classes from './SongsList.scss'
+import { connect } from 'react-redux'
+import {GridList, GridTile} from 'material-ui/GridList';
+import { success, error, warning, info, removeAll } from 'react-notification-system-redux';
+import { firebaseConnect, getVal } from 'react-redux-firebase'
+import IconButton from 'material-ui/IconButton'
+import DeleteIcon from 'material-ui/svg-icons/action/delete'
+
+const styles = {
+ root: {
+ display: 'flex',
+ flexWrap: 'wrap',
+ justifyContent: 'space-around',
+ },
+ gridList: {
+ display: 'flex',
+ flexWrap: 'wrap',
+ width: 500,
+ height: 450,
+ },
+};
+
+const mapDispatchToProps = (dispatch)=> {
+ return({
+ sendError: (errorObj) => dispatch(error(errorObj)),
+ sendInfo: (infoObj) => dispatch(info(infoObj))
+ })
+}
+
+@firebaseConnect()
+@connect(({ firebase, firebase: { auth, profile }}) => ({
+ auth: auth,
+ profile,
+ uid: auth.uid,
+}),
+ mapDispatchToProps,
+)
+
+export default class SongsList extends Component {
+
+ upVote = (song,id) => {
+ const {sendError, sendInfo, firebase, uid}= this.props;
+ try{
+ let refVote = firebase.database().ref(`projects/${this.props.name}/Songs/${id}/song/project/votes`)
+ let refBy = firebase.database().ref(`projects/${this.props.name}/Songs/${id}/song/project/votedUpBy/${uid}`).set(uid);
+ refVote.transaction( (votes) => {
+ return (votes || 0) + 1;
+ });
+ sendInfo({
+ title: song.name+" Upvoted ",
+ position: 'tr',
+ })
+ }catch( e ){
+ sendError({
+ title: 'Error Upvoting',
+ position: 'tr',
+ })
+ }
+ }
+
+ downVote = (song,id) => {
+ const {sendError, sendInfo,name,firebase, uid}= this.props;
+ try{
+ let refVote = firebase.database().ref(`projects/${name}/Songs/${id}/song/project/votes`)
+ let refBy = firebase.database().ref(`projects/${name}/Songs/${id}/song/project/votedDownBy/${uid}`).set(uid);
+ const votes = refVote.transaction( (votes) => {
+ return (votes || 0) - 1;
+ });
+ votes.then( data => {
+ if(data.snapshot.val() < -1){
+ firebase.database().ref(`projects/${name}/Songs/${id}/`).remove();
+ sendInfo({
+ title: song.name+" was removed due to low votes ",
+ position: 'tr',
+ })
+ }else{
+ sendInfo({
+ title: song.name+" Downvoted ",
+ position: 'tr',
+ })
+ }
+
+ } )
+ }catch( e ){
+ sendError({
+ title: 'Error Upvoting',
+ position: 'tr',
+ })
+ console.error(e.message,e.stack)
+ }
+ }
+
+ onDelete = (song,id) => {
+ const { sendInfo, firebase, name} = this.props;
+ try{
+ let refVote = firebase.database().ref(`projects/${name}/Songs/${id}/`).remove();
+ sendInfo({
+ title: 'Song '+song.name+' Deleted',
+ position: 'tr',
+ })
+ }catch( e ){
+ sendError({
+ title: 'Error Deleting '+song,
+ position: 'tr',
+ })
+ }
+ }
+
+ /*
+ sendActiveMsg=() =>{
+ this.props.dispatch(success({
+ title: 'Song Submitted is Playing',
+ position: 'tr',
+ }))
+ }
+ */
+ render() {
+ const {songs,auth,uid,profile} = this.props
+ return(
+
+ { songs != undefined || !isEmpty(songs) ? (
+
+
+ Songs
+
+ { map( songs, (song, id) => {
+ const disabledUp = typeof song.song.project.votedUpBy == 'object' ? Object.keys(song.song.project.votedUpBy).map( key => key).includes(uid) : false;
+ const disabledDown = typeof song.song.project.votedDownBy == 'object' ? Object.keys(song.song.project.votedDownBy).map( key => key).includes(uid) : false;
+ const visableDelete = song.song.project.submitedBy === uid
+ const active = song.song.active ? true : false;
+ const author = song.song.project.author;
+ console.log(disabledDown)
+ // if(active && visableDelete) this.sendActiveMsg();
+ return (
+
+
+
+ )})}
+
+
+
+ ) : (
+ Song Queue Empty
+ )}
+
+ )
+ }
+}
diff --git a/src/scenes/Host/componets/SongsList/SongsList.scss b/src/scenes/Host/componets/SongsList/SongsList.scss
new file mode 100755
index 0000000..56da0ff
--- /dev/null
+++ b/src/scenes/Host/componets/SongsList/SongsList.scss
@@ -0,0 +1,43 @@
+@import 'base';
+.list {
+ max-height: 100%;
+ overflow: auto
+}
+.list::-webkit-scrollbar {
+ width: 1em;
+ background-color: darkgrey;
+}
+
+
+.root {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-around;
+}
+.container {
+ min-width: 300px;
+ margin-bottom: 2rem;
+ margin: 0 auto;
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+@media (min-width: 768px) {
+ .container {
+ width: 750px;
+ }
+}
+@media (min-width: 992px) {
+ .container {
+ width: 970px;
+ }
+}
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px;
+ }
+}
+.empty {
+ @extend .flex-row-center;
+}
diff --git a/src/scenes/Host/componets/SongsList/index.js b/src/scenes/Host/componets/SongsList/index.js
new file mode 100755
index 0000000..8835088
--- /dev/null
+++ b/src/scenes/Host/componets/SongsList/index.js
@@ -0,0 +1,3 @@
+import SongList from './SongsList'
+
+export default SongList;
diff --git a/src/scenes/Host/containers/Host.js b/src/scenes/Host/containers/Host.js
new file mode 100644
index 0000000..d8e8fb4
--- /dev/null
+++ b/src/scenes/Host/containers/Host.js
@@ -0,0 +1,22 @@
+export default store => ({
+ path: 'Songs/:name',
+ /* Async getComponent is only invoked when route matches */
+ getComponent(nextState, cb) {
+ /* Webpack - use 'require.ensure' to create a split point
+ and embed an async module loader (jsonp) when bundling */
+ require.ensure(
+ [],
+ require => {
+ /* Webpack - use require callback to define
+ dependencies for bundling */
+ const Songs = require('./Songs/').default
+
+ /* Return getComponent */
+ cb(null, Songs)
+
+ /* Webpack named bundle */
+ },
+ 'Songs'
+ )
+ }
+})
diff --git a/src/scenes/Host/containers/List.js b/src/scenes/Host/containers/List.js
new file mode 100644
index 0000000..9ab836c
--- /dev/null
+++ b/src/scenes/Host/containers/List.js
@@ -0,0 +1,22 @@
+export default store => ({
+ path: 'Party/:name',
+ /* Async getComponent is only invoked when route matches */
+ getComponent(nextState, cb) {
+ /* Webpack - use 'require.ensure' to create a split point
+ and embed an async module loader (jsonp) when bundling */
+ require.ensure(
+ [],
+ require => {
+ /* Webpack - use require callback to define
+ dependencies for bundling */
+ const List = require('./Lists/').default
+
+ /* Return getComponent */
+ cb(null, List)
+
+ /* Webpack named bundle */
+ },
+ 'Party'
+ )
+ }
+})
diff --git a/src/scenes/Host/containers/Lists/Lists.js b/src/scenes/Host/containers/Lists/Lists.js
new file mode 100644
index 0000000..18ecb07
--- /dev/null
+++ b/src/scenes/Host/containers/Lists/Lists.js
@@ -0,0 +1,63 @@
+import React, {Component} from 'react'
+import ContentAdd from 'material-ui/svg-icons/content/add';
+import FloatingActionButton from 'material-ui/FloatingActionButton';
+import {push} from 'react-router-redux'
+import { connect } from 'react-redux'
+import { compose } from 'redux'
+import { firebaseConnect, getVal } from 'react-redux-firebase'
+import SongsList from '../../componets/SongsList/index.js'
+import { UserIsAuthenticated } from 'utils/router'
+
+const fixedbutton = {
+ position: 'fixed',
+ bottom: '50px',
+ right: '50px',
+ size: '400px'
+}
+
+const mapDispatchToProps = (dispatch)=> {
+ return({
+ changeLocation: (loc) => dispatch(push(loc)),
+ sendError: (errorObj) => dispatch(error(errorObj))
+ })
+}
+
+@UserIsAuthenticated
+@firebaseConnect((props) => {
+ return [
+ { path: 'projects' }, // create todo listener
+ ]
+})
+@connect(({ firebase, firebase: { auth } }, props) => (
+ {
+ project: firebase.data.projects ? firebase.data.projects[`${props.params.name}`] : "" , // lodash's get can also be used
+ uid: auth.uid,
+ }),
+ mapDispatchToProps,
+)
+
+class Lists extends Component {
+ onClick = e => {
+ this.props.changeLocation(`Host/Songs/${this.props.params.name}`)
+ }
+ render() {
+ const {project,params} = this.props;
+ const songs = project ? project.Songs: null;
+ return (
+
+
+
+
+
+
+ );
+ }
+}
+
+export default Lists;
diff --git a/src/scenes/Host/containers/Lists/index.js b/src/scenes/Host/containers/Lists/index.js
new file mode 100644
index 0000000..9b92eca
--- /dev/null
+++ b/src/scenes/Host/containers/Lists/index.js
@@ -0,0 +1,2 @@
+import Lists from './Lists.js'
+export default Lists;
diff --git a/src/scenes/Host/containers/Songs/Songs.js b/src/scenes/Host/containers/Songs/Songs.js
new file mode 100644
index 0000000..92c7bbd
--- /dev/null
+++ b/src/scenes/Host/containers/Songs/Songs.js
@@ -0,0 +1,207 @@
+import React, {Component} from 'react'
+import PropTypes from 'prop-types'
+import { connect } from 'react-redux'
+import { compose, withHandlers } from 'recompose'
+import { firebaseConnect, populate } from 'react-redux-firebase'
+import Theme from 'theme'
+import { withNotifications } from 'modules/notification'
+import Grid from '../../componets/Grid/Grid.js';
+import FloatingActionButton from 'material-ui/FloatingActionButton';
+import classes from './Songs.scss'
+import ContentAdd from 'material-ui/svg-icons/content/send';
+import { success, error, warning, info, removeAll } from 'react-notification-system-redux';
+import SearchBar from 'material-ui-search-bar';
+import {push} from 'react-router-redux'
+
+const populates = [{ child: 'createdBy', root: 'users' }]
+
+const fixedbutton = {
+ position: 'fixed',
+ bottom: '50px',
+ right: '50px',
+ size: '400px'
+}
+
+
+@firebaseConnect([{ path: '/projects' }])
+@connect(
+ ({ firebase, firebase: { auth, data: { projects }, profile } }, { params }) => ({
+ auth,
+ projects: populate(firebase, 'projects', populates),
+ profile,
+ params: params
+ }))
+
+class Songs extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ input : '',
+ items: [],
+ songs: [],
+ }
+ }
+ static propTypes = {
+ children: PropTypes.object,
+ firebase: PropTypes.object.isRequired,
+ auth: PropTypes.object
+ }
+ onChange = data => {
+ this.setState({songs: []})
+ this.setState({ input: data});
+ }
+ onTouchTap = song => {
+ const { songs } = this.state;
+ if(songs.includes(song)){
+ const index = songs.indexOf(song);
+ if (index !== -1) {
+ songs.splice(index, 1);
+ }
+ this.setState({songs: songs});
+ } else {
+ this.setState({songs: songs.concat([song])});
+ }
+ }
+ submitSongs = async props => {
+ const {name} = this.props.params;
+ const {auth, profile} = this.props;
+ const {songs} = this.state;
+ if(songs.length > 0){
+ songs.forEach( song => {
+ song.project = {
+ name: name,
+ votedUpBy: '',
+ votedDownBy: '',
+ votes: 0,
+ submitedBy: auth.uid,
+ author: profile.displayName || "Anonymous"
+ }
+ });
+ const accessRef = this.props.firebase.database().ref(`projects/${name}/access_token`);
+ const refreshRef = this.props.firebase.database().ref(`projects/${name}/refresh_token`);
+ const deviceRef = this.props.firebase.database().ref(`projects/${name}/device`);
+ const snapshotAccess = await accessRef.once('value');
+ const snapshotRefresh = await refreshRef.once('value');
+ const device = await deviceRef.once('value');
+ const body = {
+ songs : songs,
+ name: name,
+ device: device.val(),
+ access_token: snapshotAccess.val(),
+ refresh_token: snapshotRefresh.val(),
+ }
+ fetch("/song-queue",{
+ headers: {
+ 'Accept': 'application/json, text/plain, */*',
+ 'Content-Type': 'application/json'
+ },
+ method: "POST",
+ body: JSON.stringify(body)
+ })
+ .then( res =>{ return res.status })
+ .then( val => {
+ if(val == 200) {
+ const notificationOpts = {
+ title: 'Songs Added to Queue',
+ message: 'Vote it up to play next',
+ position: 'tr',
+ };
+ this.props.dispatch(info(notificationOpts))
+ }
+ })
+ .catch( err => {
+ this.props.dispatch(error({
+ title: 'Error',
+ message: 'Try again',
+ position: 'tr',
+ }))
+ } )
+ this.props.dispatch(push(`Host/Party/${name}`))
+ } else {
+ const notificationOpts = {
+ title: 'Add Songs First',
+ message: 'Submit Queue Empty',
+ position: 'tr',
+ };
+ this.props.dispatch(error(notificationOpts))
+ }
+ }
+ addNew = async e =>{
+ const {name} = this.props.params;
+ const {input} = this.state;
+ const accessRef = this.props.firebase.database().ref(`projects/${name}/access_token`);
+ const refreshRef = this.props.firebase.database().ref(`projects/${name}/refresh_token`);
+ const snapshotAccess = await accessRef.once('value');
+ const snapshotRefresh = await refreshRef.once('value');
+ const body = {
+ search: input,
+ access_token: snapshotAccess.val(),
+ refresh_token: snapshotRefresh.val(),
+ name: name}
+ fetch("/search",{
+ headers: {
+ 'Accept': 'application/json, text/plain, */*',
+ 'Content-Type': 'application/json'
+ },
+ method: "POST",
+ body: JSON.stringify(body)
+ })
+ .then(data => {return data.json()})
+ .then(text => {
+ if(text.tracks.items.length === 0){
+ const notificationOpts = {
+ title: 'Search Had No Results',
+ message: 'Try another search',
+ position: 'tr',
+ };
+ this.props.dispatch(error(notificationOpts))
+ }
+ else {
+ const notificationOpts = {
+ title: 'Search Success',
+ message: 'Results',
+ position: 'tr',
+ };
+ this.props.dispatch(info(notificationOpts))
+ this.setState({items: text.tracks.items});
+ this.forceUpdate();
+ }}
+ )
+ .catch((error => { console.log(error) }));
+ }
+ onSubmitFail = (formErrs, dispatch, err) => {
+ props.showError(formErrs ? 'Form Invalid' : err.message || 'Error')
+ }
+
+ render() {
+ const { uid, addNew, onSubmitFail } = this.props
+ return (
+
+
+
+
+ { this.state.items.length > 0 && this.state.songs.length > 0&&
+
+
+
+
+ }
+
+ )
+ }
+}
+export default Songs;
diff --git a/src/scenes/Host/containers/Songs/Songs.scss b/src/scenes/Host/containers/Songs/Songs.scss
new file mode 100644
index 0000000..34b566a
--- /dev/null
+++ b/src/scenes/Host/containers/Songs/Songs.scss
@@ -0,0 +1,12 @@
+@import 'base';
+.container {
+ @extend .flex-column-center;
+ padding-top: 4rem;
+}
+.info {
+ @extend .flex-column-center;
+}
+.note {
+ margin-top: 2rem;
+ margin-bottom: 2rem;
+}
diff --git a/src/scenes/Host/containers/Songs/index.js b/src/scenes/Host/containers/Songs/index.js
new file mode 100644
index 0000000..42df4d8
--- /dev/null
+++ b/src/scenes/Host/containers/Songs/index.js
@@ -0,0 +1,2 @@
+import Songs from './Songs.js'
+export default Songs;
diff --git a/src/scenes/Host/index.js b/src/scenes/Host/index.js
new file mode 100644
index 0000000..24d9bd2
--- /dev/null
+++ b/src/scenes/Host/index.js
@@ -0,0 +1,34 @@
+export default store => ({
+ /* Async getComponent is only invoked when route matches */
+ path: 'Host/', // TODO CHANGE PLZ
+ //getComponent(nextState, cb) {
+ /* Webpack - use 'require.ensure' to create a split point
+ and embed an async module loader (jsonp) when bundling */
+ // require.ensure(
+ //[],
+ //require => {
+ /* Webpack - use require callback to define
+ dependencies for bundling */
+ // const Host = require('./containers/Songs.js').default
+
+ /* Return getComponent */
+ // cb(null, Host)
+
+ /* Webpack named bundle */
+ // },
+ // 'Host'
+ // )
+ //},
+ getChildRoutes(partialNextState, cb) {
+ require.ensure([], require => {
+ /* Webpack - use require callback to define
+ dependencies for bundling */
+ const Songs = require('./containers/Host.js').default
+ const List = require('./containers/List.js').default
+
+ /* Return getComponent */
+ cb(null, [Songs(store)])
+ cb(null, [List(store)])
+ })
+ }
+})
diff --git a/src/scenes/Login/components/LoginForm/LoginForm.js b/src/scenes/Login/components/LoginForm/LoginForm.js
new file mode 100644
index 0000000..0ed9f71
--- /dev/null
+++ b/src/scenes/Login/components/LoginForm/LoginForm.js
@@ -0,0 +1,74 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Link } from 'react-router'
+import { Field, reduxForm } from 'redux-form'
+import { TextField } from 'redux-form-material-ui'
+import RaisedButton from 'material-ui/RaisedButton'
+import Checkbox from 'material-ui/Checkbox'
+import { RECOVER_PATH, LOGIN_FORM_NAME } from 'constants'
+import { validateEmail } from 'utils/form'
+import classes from './LoginForm.scss'
+
+export const LoginForm = ({
+ pristine,
+ reset,
+ submitting,
+ handleSubmit,
+ loginDisabled
+}) => (
+
+)
+
+LoginForm.propTypes = {
+ loginDisabled: PropTypes.bool,
+ pristine: PropTypes.bool.isRequired, // added by redux-form
+ reset: PropTypes.func.isRequired, // added by redux-form
+ submitting: PropTypes.bool.isRequired, // added by redux-form
+ handleSubmit: PropTypes.func.isRequired // added by redux-form
+}
+
+export default reduxForm({
+ form: LOGIN_FORM_NAME
+})(LoginForm)
diff --git a/src/scenes/Login/components/LoginForm/LoginForm.scss b/src/scenes/Login/components/LoginForm/LoginForm.scss
new file mode 100644
index 0000000..8ee9a05
--- /dev/null
+++ b/src/scenes/Login/components/LoginForm/LoginForm.scss
@@ -0,0 +1,44 @@
+@import 'base';
+
+.container {
+ @extend .flex-column-center;
+ justify-content: flex-start;
+ flex-grow: 1;
+ height: 100%;
+ width: 100%;
+ margin: .2rem;
+}
+
+.submit {
+ @extend .flex-row-center;
+ width: 100%;
+ margin-top: 1.5rem;
+}
+
+.options {
+ @extend .flex-row;
+ align-items: center;
+ justify-content: space-between;
+ margin-top: 2rem;
+ width: 80%;
+ @include mobile {
+ flex-direction: column;
+ }
+}
+.remember {
+ @extend .flex-row;
+ flex-basis: 50%;
+ @include mobile {
+ display: none;
+ }
+}
+.recover {
+ display: inline;
+ font-size: .8rem;
+ .hover {
+ text-decoration: underline;
+ }
+ @include mobile {
+ font-size: 1rem;
+ }
+}
diff --git a/src/scenes/Login/components/LoginForm/index.js b/src/scenes/Login/components/LoginForm/index.js
new file mode 100644
index 0000000..608996c
--- /dev/null
+++ b/src/scenes/Login/components/LoginForm/index.js
@@ -0,0 +1,3 @@
+import LoginForm from './LoginForm'
+
+export default LoginForm
diff --git a/src/scenes/Login/components/LoginPage/LoginPage.js b/src/scenes/Login/components/LoginPage/LoginPage.js
new file mode 100644
index 0000000..9a22716
--- /dev/null
+++ b/src/scenes/Login/components/LoginPage/LoginPage.js
@@ -0,0 +1,119 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Link } from 'react-router'
+import Paper from 'material-ui/Paper'
+import { withFirebase } from 'react-redux-firebase'
+import {
+ withHandlers,
+ withStateHandlers,
+ pure,
+ compose,
+ lifecycle
+} from 'recompose'
+import { withNotifications } from 'modules/notification'
+import { UserIsNotAuthenticated } from 'utils/router'
+import { SIGNUP_PATH } from 'constants'
+import LoginForm from '../LoginForm'
+import Card from 'material-ui/Card';
+
+import classes from './LoginPage.scss'
+
+let applicationVerifier
+
+export const LoginPage = ({
+ userInputLogin,
+ verifyCode,
+ confirmer,
+ onSubmitFail
+}) => (
+
+
+
+
+
+
+ Need an account?
+
+ Sign Up
+
+
+
+)
+
+LoginPage.propTypes = {
+ firebase: PropTypes.shape({ // eslint-disable-line
+ login: PropTypes.func.isRequired
+ }),
+ confirmer: PropTypes.object,
+ userInputLogin: PropTypes.func.isRequired, // from enhancer
+ verifyCode: PropTypes.func.isRequired, // from enhancer
+ onSubmitFail: PropTypes.func.isRequired, // from enhancer
+}
+
+export default compose(
+ UserIsNotAuthenticated, // redirect to projects page if already authenticated
+ withNotifications, // add props.showError
+ withFirebase, // add props.firebase
+ lifecycle({
+ componentDidMount() {
+ applicationVerifier = new this.props.firebase.auth
+ .RecaptchaVerifier('recaptcha-container', {
+ // size: 'normal', // for visible reCAPTCHA
+ size: 'invisible', // for a not visible reCAPTCHA
+ callback: response => {
+ // reCAPTCHA solved, allow signInWithPhoneNumber.
+ // ...
+ },
+ 'expired-callback': () => {
+ this.props.showError('Error with recapture, please reverify')
+ }
+ })
+ }
+ }),
+ withStateHandlers(
+ ({ initialExpanded = true }) => ({
+ confirmer: null
+ }),
+ {
+ setConfirmer: ({ templateEditExpanded }) => confirmer => ({
+ confirmer
+ })
+ }
+ ),
+ withHandlers({
+ onSubmitFail: props => (formErrs, dispatch, err) =>
+ props.showError(formErrs ? 'Form Invalid' : err.message || 'Error'),
+ // Handles both emal and phone login
+ userInputLogin: ({
+ firebase,
+ showError,
+ showSuccess,
+ setConfirmer
+ }) => creds => {
+ if (creds.email && creds.phoneNumber) {
+ showError('Enter phone or email, not both')
+ return Promise.reject(new Error('Enter phone or email, not both'))
+ }
+ // Creds contains email/password OR phoneNumber
+ return firebase
+ .login({ ...creds, applicationVerifier })
+ .then(res => {
+ if (creds.phoneNumber) {
+ showSuccess('Code Sent To Phone')
+ setConfirmer(res)
+ }
+ })
+ .catch(err => showError(err.message))
+ },
+ verifyCode: ({ showError, showSuccess, confirmer }) => creds =>
+ confirmer
+ .confirm(creds.code)
+ .then(() => showSuccess('Login Successful'))
+ .catch(err => showError(err.message))
+ }),
+ pure
+)(LoginPage)
diff --git a/src/scenes/Login/components/LoginPage/LoginPage.scss b/src/scenes/Login/components/LoginPage/LoginPage.scss
new file mode 100644
index 0000000..0ea7342
--- /dev/null
+++ b/src/scenes/Login/components/LoginPage/LoginPage.scss
@@ -0,0 +1,49 @@
+@import 'base';
+
+.container {
+ @extend .flex-column-center;
+ align-items: center;
+ justify-content: flex-start;
+ height: 100%;
+ width: 100%;
+ font-weight: 400;
+ padding-top: 1.5rem;
+}
+.panel {
+ @extend .flex-column-center;
+ justify-content: center;
+ padding: 1.25rem ;
+ width: 50%;
+ @include mobile {
+ width: 75%;
+ }
+ min-width: 250px;
+ min-height: 270px;
+}
+.or {
+ margin-top: 1rem;
+ margin-bottom: .5rem;
+ font-size: 1.3rem;
+}
+.signup {
+ @extend .flex-column-center;
+ justify-content: center;
+ margin-top: 2rem;
+ &Link {
+ // color: $linkBlue;
+ font-size: 1.2rem;
+ &:hover {
+ // color: $materialBlue;
+ }
+ }
+ &Label {
+ font-size: 1.3rem;
+ font-size: 1rem;
+ font-weight: bold;
+ color: $mediumGray;
+ font-weight: 400;
+ }
+}
+.providers {
+ margin-top: 1rem;
+}
diff --git a/src/scenes/Login/components/LoginPage/index.js b/src/scenes/Login/components/LoginPage/index.js
new file mode 100644
index 0000000..a3e6d33
--- /dev/null
+++ b/src/scenes/Login/components/LoginPage/index.js
@@ -0,0 +1,3 @@
+import LoginPage from './LoginPage'
+
+export default LoginPage
diff --git a/src/scenes/Login/index.js b/src/scenes/Login/index.js
new file mode 100644
index 0000000..a8b2208
--- /dev/null
+++ b/src/scenes/Login/index.js
@@ -0,0 +1,7 @@
+import { LOGIN_PATH as path } from 'constants'
+import component from './components/LoginPage'
+
+export default {
+ path,
+ component
+}
diff --git a/src/scenes/NotFound/NotFound.js b/src/scenes/NotFound/NotFound.js
new file mode 100644
index 0000000..c99edf1
--- /dev/null
+++ b/src/scenes/NotFound/NotFound.js
@@ -0,0 +1,10 @@
+import React from 'react'
+
+export const NotFound = () => (
+
+
Whoops! 404!
+
This page was not found.
+
+)
+
+export default NotFound
diff --git a/src/scenes/NotFound/index.js b/src/scenes/NotFound/index.js
new file mode 100644
index 0000000..704f0d1
--- /dev/null
+++ b/src/scenes/NotFound/index.js
@@ -0,0 +1,22 @@
+export default () => ({
+ path: '*',
+ /* Async getComponent is only invoked when route matches */
+ getComponent(nextState, cb) {
+ /* Webpack - use 'require.ensure' to create a split point
+ and embed an async module loader (jsonp) when bundling */
+ require.ensure(
+ [],
+ require => {
+ /* Webpack - use require callback to define
+ dependencies for bundling */
+ const NotFound = require('./NotFound').default
+
+ /* Return getComponent */
+ cb(null, NotFound)
+
+ /* Webpack named bundle */
+ },
+ 'NotFound'
+ )
+ }
+})
diff --git a/src/scenes/Projects/components/NewProjectDialog/NewProjectDialog.js b/src/scenes/Projects/components/NewProjectDialog/NewProjectDialog.js
new file mode 100644
index 0000000..77d17a3
--- /dev/null
+++ b/src/scenes/Projects/components/NewProjectDialog/NewProjectDialog.js
@@ -0,0 +1,70 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import Dialog from 'material-ui/Dialog'
+import FlatButton from 'material-ui/FlatButton'
+import { Field, reduxForm } from 'redux-form'
+import { TextField } from 'redux-form-material-ui'
+import { required } from 'utils/form'
+import { NEW_PROJECT_FORM_NAME } from 'constants'
+import {RadioButton, RadioButtonGroup} from 'material-ui/RadioButton'
+import classes from './NewProjectDialog.scss'
+
+const renderRadioGroup = ({input, ...rest}) => (
+ input.onChange(value)}
+ />
+ )
+
+export const NewProjectDialog = ({
+ open,
+ onRequestClose,
+ submit,
+ handleSubmit,
+ devices
+}) => (
+ ,
+
+ ]}>
+
+
+)
+
+NewProjectDialog.propTypes = {
+ open: PropTypes.bool.isRequired,
+ onRequestClose: PropTypes.func.isRequired,
+ onSubmit: PropTypes.func.isRequired, // eslint-disable-line react/no-unused-prop-types
+ handleSubmit: PropTypes.func.isRequired, // added by redux-form
+ submit: PropTypes.func.isRequired // added by redux-form
+}
+
+export default reduxForm({
+ form: NEW_PROJECT_FORM_NAME
+})(NewProjectDialog)
diff --git a/src/scenes/Projects/components/NewProjectDialog/NewProjectDialog.scss b/src/scenes/Projects/components/NewProjectDialog/NewProjectDialog.scss
new file mode 100644
index 0000000..e549125
--- /dev/null
+++ b/src/scenes/Projects/components/NewProjectDialog/NewProjectDialog.scss
@@ -0,0 +1,17 @@
+@import 'base';
+
+.container {
+ padding: 2rem;
+}
+.inputs {
+ @extend .flex-column-center;
+ justify-content: center;
+ width: 100%;
+ input {
+ width: 100%;
+ }
+}
+.buttons {
+ @extend .flex-column-center;
+ justify-content: center;
+}
diff --git a/src/scenes/Projects/components/NewProjectDialog/index.js b/src/scenes/Projects/components/NewProjectDialog/index.js
new file mode 100644
index 0000000..215628b
--- /dev/null
+++ b/src/scenes/Projects/components/NewProjectDialog/index.js
@@ -0,0 +1,3 @@
+import NewProjectDialog from './NewProjectDialog'
+
+export default NewProjectDialog
diff --git a/src/scenes/Projects/components/NewProjectTile/NewProjectTile.js b/src/scenes/Projects/components/NewProjectTile/NewProjectTile.js
new file mode 100644
index 0000000..94defb2
--- /dev/null
+++ b/src/scenes/Projects/components/NewProjectTile/NewProjectTile.js
@@ -0,0 +1,22 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import Paper from 'material-ui/Paper'
+import ContentAddCircle from 'material-ui/svg-icons/content/add-circle'
+import classes from './NewProjectTile.scss'
+
+const iconSize = '6rem'
+const iconStyle = { width: iconSize, height: iconSize }
+const color = '#979797'
+const hoverColor = '#616161'
+
+export const NewProjectTile = ({ onClick }) => (
+
+
+
+)
+
+NewProjectTile.propTypes = {
+ onClick: PropTypes.func
+}
+
+export default NewProjectTile
diff --git a/src/scenes/Projects/components/NewProjectTile/NewProjectTile.scss b/src/scenes/Projects/components/NewProjectTile/NewProjectTile.scss
new file mode 100644
index 0000000..8b7893d
--- /dev/null
+++ b/src/scenes/Projects/components/NewProjectTile/NewProjectTile.scss
@@ -0,0 +1,12 @@
+@import 'base';
+
+.container {
+ @extend .flex-row-center;
+ align-items: center;
+ cursor: pointer;
+ height: 200px;
+ margin: .5rem;
+ padding: 1.3rem;
+ overflow: hidden;
+ width: 300px;
+}
diff --git a/src/scenes/Projects/components/NewProjectTile/index.js b/src/scenes/Projects/components/NewProjectTile/index.js
new file mode 100644
index 0000000..cf99447
--- /dev/null
+++ b/src/scenes/Projects/components/NewProjectTile/index.js
@@ -0,0 +1,3 @@
+import NewProjectTile from './NewProjectTile'
+
+export default NewProjectTile
diff --git a/src/scenes/Projects/components/ProjectTile/ProjectTile.js b/src/scenes/Projects/components/ProjectTile/ProjectTile.js
new file mode 100644
index 0000000..fb89a79
--- /dev/null
+++ b/src/scenes/Projects/components/ProjectTile/ProjectTile.js
@@ -0,0 +1,36 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import Paper from 'material-ui/Paper'
+import { isObject } from 'lodash'
+import IconButton from 'material-ui/IconButton'
+import DeleteIcon from 'material-ui/svg-icons/action/delete'
+import classes from './ProjectTile.scss'
+
+const ProjectTile = ({ project, onSelect, onDelete, showDelete }) => (
+
+
+ onSelect(project)}>
+ {project.name}
+
+ {showDelete && onDelete ? (
+
+
+
+ ) : null}
+
+
+ {isObject(project.createdBy)
+ ? project.createdBy.username
+ : project.createdBy || 'No Owner'}
+
+
+)
+
+ProjectTile.propTypes = {
+ project: PropTypes.object.isRequired,
+ onSelect: PropTypes.func.isRequired,
+ onDelete: PropTypes.func,
+ showDelete: PropTypes.bool
+}
+
+export default ProjectTile
diff --git a/src/scenes/Projects/components/ProjectTile/ProjectTile.scss b/src/scenes/Projects/components/ProjectTile/ProjectTile.scss
new file mode 100644
index 0000000..1fff55b
--- /dev/null
+++ b/src/scenes/Projects/components/ProjectTile/ProjectTile.scss
@@ -0,0 +1,82 @@
+@import 'base';
+
+.container {
+ @extend .flex-column;
+ justify-content: flex-start;
+ align-items: flex-start;
+ height: 200px;
+ margin: .5rem;
+ padding: 1.3rem;
+ width: 300px;
+}
+.top {
+ @extend .flex-row;
+ justify-content: space-between;
+ align-items: flex-start;
+ width: 100%;
+}
+.name {
+ font-size: 1.5rem;
+ font-weight: 300;
+ text-decoration: none;
+ color: $darkGray;
+ cursor: pointer;
+ transition: all 800ms cubic-bezier(0.25,0.1,0.25,1) 0ms;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ &:hover {
+ color: $accentColor;
+ }
+ &:visited {
+ text-decoration: none;
+ color: $darkGray;
+ }
+}
+.settings {
+ @extend .flex-row;
+ align-items: flex-start;
+ align-self: flex-end;
+ cursor: pointer;
+ transition: all 800ms cubic-bezier(0.25,0.1,0.25,1) 0ms;
+ &:hover {
+ color: $accentColor;
+ }
+}
+.owner {
+ font-size: 1.2rem;
+ color: $darkGray;
+ cursor: pointer;
+ transition: all 800ms cubic-bezier(0.25,0.1,0.25,1) 0ms;
+ &:hover {
+ color: $accentColor;
+ }
+}
+.collaborators {
+ @extend .flex-row;
+ justify-content: flex-start;
+ align-items: flex-start;
+ width: 100%;
+ margin-top: 2rem;
+}
+.collaborator {
+ @extend .flex-row;
+ margin-left: .4rem;
+ margin-right: .4rem;
+ overflow: hidden;
+ cursor: pointer;
+ -webkit-filter: grayscale(1);
+ filter: grayscale(1);
+ &:hover {
+ -webkit-filter: none;
+ filter: none;
+ img {
+ background-color: $accentColor;
+ }
+ }
+}
+.add {
+ &:hover {
+ color: $accentColor;
+ }
+}
diff --git a/src/scenes/Projects/components/ProjectTile/index.js b/src/scenes/Projects/components/ProjectTile/index.js
new file mode 100644
index 0000000..3d1ac79
--- /dev/null
+++ b/src/scenes/Projects/components/ProjectTile/index.js
@@ -0,0 +1,3 @@
+import ProjectTile from './ProjectTile'
+
+export default ProjectTile
diff --git a/src/scenes/Projects/containers/ProjectsContainer.js b/src/scenes/Projects/containers/ProjectsContainer.js
new file mode 100644
index 0000000..01ad8eb
--- /dev/null
+++ b/src/scenes/Projects/containers/ProjectsContainer.js
@@ -0,0 +1,190 @@
+import React, { Component, cloneElement } from 'react'
+import PropTypes from 'prop-types'
+import { map, get } from 'lodash'
+import { connect } from 'react-redux'
+import {
+ firebaseConnect,
+ populate,
+ isLoaded,
+ isEmpty
+} from 'react-redux-firebase'
+import { LIST_PATH } from 'constants'
+import { UserIsAuthenticated } from 'utils/router'
+import LoadingSpinner from 'components/LoadingSpinner'
+import ProjectTile from '../components/ProjectTile'
+import NewProjectTile from '../components/NewProjectTile'
+import NewProjectDialog from '../components/NewProjectDialog'
+import classes from './ProjectsContainer.scss'
+import { push } from 'react-router-redux'
+
+
+
+const populates = [{ child: 'createdBy', root: 'users' }]
+
+@UserIsAuthenticated
+@firebaseConnect([
+ { path: '/projects' }
+ // 'projects#populate=owner:users' // string equivalent
+])
+
+
+@connect(
+ ({ spotifyReducer,firebase, firebase: { auth, data: { projects } } }, { params }) => ({
+ auth,
+ projects: populate(firebase, 'projects', populates),
+ spotifyReducer
+ })
+)
+export default class Projects extends Component {
+ static contextTypes = {
+ router: PropTypes.object.isRequired
+ }
+
+ static propTypes = {
+ children: PropTypes.object,
+ firebase: PropTypes.object.isRequired,
+ projects: PropTypes.object,
+ unpopulatedProjects: PropTypes.object,
+ auth: PropTypes.object
+ }
+
+ componentWillUpdate(oldProps,oldState){
+ if(oldState.devices.length > 0 && this.state.devices.length > 0){
+ let val = false;
+ oldState.devices.forEach( (item,i) =>{
+ if(item.id !== this.state.devices[i].id)
+ val = true;
+ })
+ if(val){
+ this.fetchDevices();
+ }
+ }
+ }
+ fetchUser = ()=>{
+ return new Promise((resolve, reject) => {
+ this.props.firebase.auth().onAuthStateChanged(function (user) {
+ if (user) {
+ resolve(user)
+ } else {
+ reject(console.log)
+ }
+ })
+ })
+ }
+ fetchDevices = async ()=>{
+ const { firebase, auth, projects, dispatch, spotifyReducer} = this.props
+ let user = await this.fetchUser()
+ const accessRef = this.props.firebase.database().ref(`users/${user.uid}/accessToken`);
+ const refreshToken = this.props.firebase.database().ref(`users/${user.uid}/refreshToken`);
+ const snapshotAccess = await accessRef.once('value');
+ const snapshotRefresh = await refreshToken.once('value');
+ const body = {
+ name: user.uid,
+ access_token: snapshotAccess.val(),
+ refresh_token: snapshotRefresh.val(),
+ }
+ const response = await fetch('/devices',{
+ headers: {
+ 'Accept': 'application/json, text/plain, ',
+ 'Content-Type': 'application/json'
+ },
+ method: "POST",
+ body: JSON.stringify(body)
+ })
+ const data = await response.json();
+ if(data.devices != undefined){
+ this.setState({devices: data.devices})
+ }
+ }
+ componentWillMount(){
+ this.fetchDevices();
+ }
+
+ state = {
+ newProjectModal: false,
+ devices : [],
+ }
+
+ newSubmit = async newProject => {
+ const {auth,spotifyReducer} = this.props;
+ newProject['createdBy'] = auth.email;
+ const accessRef = this.props.firebase.database().ref(`users/${auth.uid}/accessToken`);
+ const refreshToken = this.props.firebase.database().ref(`users/${auth.uid}/refreshToken`);
+ const snapshotAccess = await accessRef.once('value');
+ const snapshotRefresh = await refreshToken.once('value');
+ newProject['access_token'] = snapshotAccess.val();
+ newProject['refresh_token'] = snapshotRefresh.val();
+ return this.props.firebase
+ .set(`projects/${newProject.name}`,newProject)
+ .then(() => this.setState({ newProjectModal: false }))
+ .catch(err => {
+ console.error('error creating new project', err) // eslint-disable-line
+ })
+ }
+
+ deleteProject = key => this.props.firebase.remove(`projects/${key}`)
+
+ toggleModal = (name, project) => {
+ let newState = {}
+ newState[`${name}Modal`] = !this.state[`${name}Modal`]
+ this.setState(newState)
+ }
+
+ getDeleteVisible = key => {
+ const { auth, projects, dispatch } = this.props
+
+ return (
+ !isEmpty(this.props.auth) && projects[key].createdBy === auth.email
+ )
+ }
+
+ render() {
+ const { projects, auth, dispatch, spotifyReducer} = this.props
+ const { newProjectModal, devices } = this.state
+ if (!isLoaded(projects,auth)) {
+ return
+ }
+ if(devices.length == 0) {
+ return (
+
+
Open Spotify and Connect Some Devices
+
+
+ )
+ }
+
+ if (this.props.children) {
+ return cloneElement(this.props.children, this.props)
+ }
+ return (
+
+ {newProjectModal && (
+
this.toggleModal('newProject')}
+ />
+ )}
+
+
this.toggleModal('newProject')} />
+ {!isEmpty(projects) &&
+ map(projects, (project, key) => (
+
+ { auth.email === project.createdBy &&
+
this.deleteProject(key)}
+ onSelect={() => dispatch(push(`${LIST_PATH}/${key} `))}
+ showDelete={this.getDeleteVisible(key)}
+ />
+ }
+
+ ))}
+
+
+ )
+ }
+}
diff --git a/src/scenes/Projects/containers/ProjectsContainer.scss b/src/scenes/Projects/containers/ProjectsContainer.scss
new file mode 100644
index 0000000..09a8b08
--- /dev/null
+++ b/src/scenes/Projects/containers/ProjectsContainer.scss
@@ -0,0 +1,26 @@
+@import 'base';
+
+.container {
+ @extend .flex-column-center;
+ justify-content: flex-start;
+ padding-top: 30px;
+ flex-grow: 2;
+ box-sizing: border-box;
+}
+
+.tiles {
+ @extend .flex-row-center;
+ -webkit-flex-flow: row wrap;
+ justify-content: center;
+ flex-wrap: wrap;
+}
+
+.progress {
+ @extend .flex-column-center;
+ justify-content: flex-start;
+ padding-top: 30px;
+ flex-grow: 2;
+ box-sizing: border-box;
+ padding-left: 5%;
+ padding-right: 5%;
+}
diff --git a/src/scenes/Projects/index.js b/src/scenes/Projects/index.js
new file mode 100644
index 0000000..bb7521f
--- /dev/null
+++ b/src/scenes/Projects/index.js
@@ -0,0 +1,34 @@
+import { LIST_PATH as path } from 'constants'
+
+export default store => ({
+ path,
+ /* Async getComponent is only invoked when route matches */
+ getComponent(nextState, cb) {
+ /* Webpack - use 'require.ensure' to create a split point
+ and embed an async module loader (jsonp) when bundling */
+ require.ensure(
+ [],
+ require => {
+ /* Webpack - use require callback to define
+ dependencies for bundling */
+ const Projects = require('./containers/ProjectsContainer').default
+
+ /* Return getComponent */
+ cb(null, Projects)
+
+ /* Webpack named bundle */
+ },
+ 'Projects'
+ )
+ },
+ getChildRoutes(partialNextState, cb) {
+ require.ensure([], require => {
+ /* Webpack - use require callback to define
+ dependencies for bundling */
+ const Project = require('./routes/Project').default
+
+ /* Return getComponent */
+ cb(null, [Project(store)])
+ })
+ }
+})
diff --git a/src/scenes/Projects/routes/Project/components/Project/Project.js b/src/scenes/Projects/routes/Project/components/Project/Project.js
new file mode 100644
index 0000000..78cbb8a
--- /dev/null
+++ b/src/scenes/Projects/routes/Project/components/Project/Project.js
@@ -0,0 +1,29 @@
+import React, {Component} from 'react'
+import PropTypes from 'prop-types'
+import classes from './Project.scss'
+import FloatingActionButton from 'material-ui/FloatingActionButton';
+import ContentAdd from 'material-ui/svg-icons/content/add';
+
+export const Project = ({ projects, params: { projectname }, onClick }) => (
+
+
+ {projects.name ? (
+
+
Project Container
+
{JSON.stringify(projects.name, null, 2)}
+
+ ) : (
+
+ Project Not Found
+
+ )}
+
+
+)
+
+Project.propTypes = {
+ projects: PropTypes.object,
+ params: PropTypes.object.isRequired
+}
+
+export default Project
diff --git a/src/scenes/Projects/routes/Project/components/Project/Project.scss b/src/scenes/Projects/routes/Project/components/Project/Project.scss
new file mode 100644
index 0000000..e30e8b7
--- /dev/null
+++ b/src/scenes/Projects/routes/Project/components/Project/Project.scss
@@ -0,0 +1,7 @@
+@import 'base';
+
+
+.empty {
+ @extend .flex-row-center;
+ padding-top: 8rem;
+}
diff --git a/src/scenes/Projects/routes/Project/components/Project/index.js b/src/scenes/Projects/routes/Project/components/Project/index.js
new file mode 100644
index 0000000..9791fcd
--- /dev/null
+++ b/src/scenes/Projects/routes/Project/components/Project/index.js
@@ -0,0 +1,3 @@
+import Project from './Project'
+
+export default Project
diff --git a/src/scenes/Projects/routes/Project/containers/ProjectContainer.js b/src/scenes/Projects/routes/Project/containers/ProjectContainer.js
new file mode 100644
index 0000000..3bff1ea
--- /dev/null
+++ b/src/scenes/Projects/routes/Project/containers/ProjectContainer.js
@@ -0,0 +1,60 @@
+import React, {Component} from 'react'
+import PropTypes from 'prop-types'
+import { compose } from 'redux'
+import { connect } from 'react-redux'
+import { firebaseConnect, isEmpty } from 'react-redux-firebase'
+import { spinnerWhileLoading } from 'utils/components'
+import classes from './ProjectContainer.scss'
+import Project from '../components/Project';
+
+@firebaseConnect(({ params: { projectname } }) => [
+ { path: `projects/${projectname}` }
+])
+@connect(({ firebase: { data } }, { params: { projectname } }) => ({
+ project: data.projects && data.projects[projectname]
+}))
+@compose(
+ spinnerWhileLoading(['project']) // handle loading data
+)
+export default class ProjectContainer extends Component {
+ onClick = event => {
+ const {firebase,params} = this.props;
+ const query = event.target.value.trim().toLowerCase()
+ alert(query);
+ /*
+ const data = {
+ "album" : "Dark Knight Dummo (Feat. Travis Scott)",
+ "downvote" : 0,
+ "img" : "https://i.scdn.co/image/596984c5af902532c982aec0c20d61a060c64623",
+ "name" : "Dark Knight Dummo (Feat. Travis Scott)",
+ "upvote" : 0
+ }
+ const realData ={
+ "album" : "How To Be A Human Being",
+ "downvote" : 0,
+ "img" : "https://i.scdn.co/image/1ad69327d5e8ee9d4347d7273ecbfb0c472f18c0",
+ "name" : "The Other Side Of Paradise",
+ "upvote" : 1
+ }
+ firebase.push(`projects/${params.projectname}/Songs`,realData);
+ alert("Submitted");
+ */
+ }
+
+ render() {
+ const { project, params } = this.props;
+ if (isEmpty(project)) {
+ return ProjectContainer not found
+ }
+
+ return (
+
+ )
+ }
+}
diff --git a/src/scenes/Projects/routes/Project/containers/ProjectContainer.scss b/src/scenes/Projects/routes/Project/containers/ProjectContainer.scss
new file mode 100644
index 0000000..272dfe4
--- /dev/null
+++ b/src/scenes/Projects/routes/Project/containers/ProjectContainer.scss
@@ -0,0 +1,7 @@
+@import 'base';
+
+.progress {
+ @extend .flex-row-center;
+ align-items: center;
+ padding-top: 8rem;
+}
diff --git a/src/scenes/Projects/routes/Project/index.js b/src/scenes/Projects/routes/Project/index.js
new file mode 100644
index 0000000..99b7d9f
--- /dev/null
+++ b/src/scenes/Projects/routes/Project/index.js
@@ -0,0 +1,22 @@
+export default store => ({
+ path: ':projectname',
+ /* Async getComponent is only invoked when route matches */
+ getComponent(nextState, cb) {
+ /* Webpack - use 'require.ensure' to create a split point
+ and embed an async module loader (jsonp) when bundling */
+ require.ensure(
+ [],
+ require => {
+ /* Webpack - use require callback to define
+ dependencies for bundling */
+ const Project = require('./containers/ProjectContainer').default
+
+ /* Return getComponent */
+ cb(null, Project)
+
+ /* Webpack named bundle */
+ },
+ 'Project'
+ )
+ }
+})
diff --git a/src/scenes/Recover/components/EmailForm/EmailForm.js b/src/scenes/Recover/components/EmailForm/EmailForm.js
new file mode 100644
index 0000000..5ef0dd7
--- /dev/null
+++ b/src/scenes/Recover/components/EmailForm/EmailForm.js
@@ -0,0 +1,43 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Field, reduxForm } from 'redux-form'
+import { TextField } from 'redux-form-material-ui'
+import RaisedButton from 'material-ui/RaisedButton'
+import { required, email } from 'utils/forms'
+import { RECOVER_EMAIL_FORM_NAME } from 'constants'
+import classes from './EmailForm.scss'
+
+export const EmailForm = ({
+ account,
+ handleSubmit,
+ submitting,
+ pristine,
+ valid
+}) => (
+
+)
+
+EmailForm.propTypes = {
+ account: PropTypes.shape({
+ providerData: PropTypes.array
+ }),
+ pristine: PropTypes.bool, // added by redux-form
+ valid: PropTypes.bool, // added by redux-form
+ handleSubmit: PropTypes.func.isRequired, // added by redux-form
+ submitting: PropTypes.bool // added by redux-form
+}
+
+export default reduxForm({
+ form: RECOVER_EMAIL_FORM_NAME
+})(EmailForm)
diff --git a/src/scenes/Recover/components/EmailForm/EmailForm.scss b/src/scenes/Recover/components/EmailForm/EmailForm.scss
new file mode 100644
index 0000000..3c25552
--- /dev/null
+++ b/src/scenes/Recover/components/EmailForm/EmailForm.scss
@@ -0,0 +1,10 @@
+@import 'base';
+
+.container {
+ @extend .flex-column-center;
+ padding: 3rem;
+}
+
+.submit {
+ margin-top: 2rem;
+}
diff --git a/src/scenes/Recover/components/EmailForm/index.js b/src/scenes/Recover/components/EmailForm/index.js
new file mode 100644
index 0000000..0405c35
--- /dev/null
+++ b/src/scenes/Recover/components/EmailForm/index.js
@@ -0,0 +1,3 @@
+import EmailForm from './EmailForm'
+
+export default EmailForm
diff --git a/src/scenes/Recover/components/RecoverForm/RecoverForm.js b/src/scenes/Recover/components/RecoverForm/RecoverForm.js
new file mode 100644
index 0000000..d7bf053
--- /dev/null
+++ b/src/scenes/Recover/components/RecoverForm/RecoverForm.js
@@ -0,0 +1,62 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Field, reduxForm } from 'redux-form'
+import { TextField } from 'redux-form-material-ui'
+import RaisedButton from 'material-ui/RaisedButton'
+import Subheader from 'material-ui/Subheader'
+import { required } from 'utils/forms'
+import { RECOVER_CODE_FORM_NAME } from 'constants'
+import classes from './RecoverForm.scss'
+
+export const RecoverForm = ({
+ account,
+ handleSubmit,
+ onRecoverClick,
+ submitting,
+ pristine,
+ valid
+}) => (
+
+)
+
+RecoverForm.propTypes = {
+ account: PropTypes.shape({
+ providerData: PropTypes.array
+ }),
+ pristine: PropTypes.bool, // added by redux-form
+ valid: PropTypes.bool, // added by redux-form
+ handleSubmit: PropTypes.func, // added by redux-form
+ submitting: PropTypes.bool, // added by redux-form
+ onRecoverClick: PropTypes.func
+}
+
+export default reduxForm({
+ form: RECOVER_CODE_FORM_NAME
+})(RecoverForm)
diff --git a/src/scenes/Recover/components/RecoverForm/RecoverForm.scss b/src/scenes/Recover/components/RecoverForm/RecoverForm.scss
new file mode 100644
index 0000000..3c25552
--- /dev/null
+++ b/src/scenes/Recover/components/RecoverForm/RecoverForm.scss
@@ -0,0 +1,10 @@
+@import 'base';
+
+.container {
+ @extend .flex-column-center;
+ padding: 3rem;
+}
+
+.submit {
+ margin-top: 2rem;
+}
diff --git a/src/scenes/Recover/components/RecoverForm/index.js b/src/scenes/Recover/components/RecoverForm/index.js
new file mode 100644
index 0000000..ce3c455
--- /dev/null
+++ b/src/scenes/Recover/components/RecoverForm/index.js
@@ -0,0 +1,3 @@
+import RecoverForm from './RecoverForm'
+
+export default RecoverForm
diff --git a/src/scenes/Recover/containers/RecoverContainer.js b/src/scenes/Recover/containers/RecoverContainer.js
new file mode 100644
index 0000000..422ab69
--- /dev/null
+++ b/src/scenes/Recover/containers/RecoverContainer.js
@@ -0,0 +1,70 @@
+import React, { Component } from 'react'
+import PropTypes from 'prop-types'
+import { firebaseConnect } from 'react-redux-firebase'
+import Snackbar from 'material-ui/Snackbar'
+import Paper from 'material-ui/Paper'
+import RecoverForm from '../components/RecoverForm'
+import EmailForm from '../components/EmailForm'
+
+@firebaseConnect() // adds this.props.firebase
+export default class RecoverContainer extends Component {
+ static propTypes = {
+ firebase: PropTypes.object
+ }
+ state = {
+ message: null,
+ open: false
+ }
+
+ sendRecoveryEmail = ({ email }) =>
+ this.props.firebase
+ .resetPassword(email)
+ .then(() => {
+ this.setState({
+ message: 'Account Recovery Email Sent',
+ open: true
+ })
+ })
+ .catch(err => {
+ console.error('Error updating account', err) // eslint-disable-line no-console
+ this.setState({ message: err.message || 'Error' }) // show error snackbar
+ return Promise.reject(err)
+ })
+
+ recoverAccount = ({ code, password }) => {
+ const {
+ verifyPasswordResetCode,
+ confirmPasswordReset
+ } = this.props.firebase
+
+ return verifyPasswordResetCode(code)
+ .then(() => confirmPasswordReset(code, password))
+ .then(res => {
+ this.setState({ message: 'Password Changed Successfully' })
+ })
+ .catch(err => {
+ console.error('Error updating account', err) // eslint-disable-line no-console
+ this.setState({ message: err.message }) // show error snackbar
+ return Promise.reject(err)
+ })
+ }
+
+ render() {
+ return (
+
+
+
+
+
+
+
+
this.setState({ message: null })}
+ />
+
+ )
+ }
+}
diff --git a/src/scenes/Recover/index.js b/src/scenes/Recover/index.js
new file mode 100644
index 0000000..e1c4383
--- /dev/null
+++ b/src/scenes/Recover/index.js
@@ -0,0 +1,24 @@
+import { RECOVER_PATH as path } from 'constants'
+
+export default store => ({
+ path: path,
+ /* Async getComponent is only invoked when route matches */
+ getComponent(nextState, cb) {
+ /* Webpack - use 'require.ensure' to create a split point
+ and embed an async module loader (jsonp) when bundling */
+ require.ensure(
+ [],
+ require => {
+ /* Webpack - use require callback to define
+ dependencies for bundling */
+ const Recover = require('./containers/RecoverContainer').default
+
+ /* Return getComponent */
+ cb(null, Recover)
+
+ /* Webpack named bundle */
+ },
+ 'Recover'
+ )
+ }
+})
diff --git a/src/scenes/Signup/components/SignupForm/SignupForm.js b/src/scenes/Signup/components/SignupForm/SignupForm.js
new file mode 100644
index 0000000..a43cd59
--- /dev/null
+++ b/src/scenes/Signup/components/SignupForm/SignupForm.js
@@ -0,0 +1,78 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Field, reduxForm } from 'redux-form'
+import { TextField } from 'redux-form-material-ui'
+import {RadioButton, RadioButtonGroup} from 'material-ui/RadioButton'
+import RaisedButton from 'material-ui/RaisedButton'
+import { SIGNUP_FORM_NAME } from 'constants'
+import { required, validateEmail } from 'utils/form'
+import classes from './SignupForm.scss'
+
+const renderRadioGroup = ({input, ...rest}) => (
+ input.onChange(value)}
+ />
+ )
+
+const SignupForm = ({ user, pristine, submitting, handleSubmit, devices }) => (
+
+)
+
+SignupForm.propTypes = {
+ pristine: PropTypes.bool.isRequired, // added by redux-form
+ submitting: PropTypes.bool.isRequired, // added by redux-form
+ handleSubmit: PropTypes.func.isRequired // added by redux-form
+}
+
+export default reduxForm({
+ form: SIGNUP_FORM_NAME
+})(SignupForm)
diff --git a/src/scenes/Signup/components/SignupForm/SignupForm.scss b/src/scenes/Signup/components/SignupForm/SignupForm.scss
new file mode 100644
index 0000000..f84b291
--- /dev/null
+++ b/src/scenes/Signup/components/SignupForm/SignupForm.scss
@@ -0,0 +1,16 @@
+@import 'base';
+
+.container {
+ @extend .flex-column-center;
+ justify-content: flex-start;
+ flex-grow: 1;
+ width: 100%;
+ font-size: 1.4rem;
+}
+.submit {
+ @extend .flex-column-center;
+ justify-content: center;
+ width: 30%;
+ min-width: 192px;
+ padding-top: 1.75rem;
+}
diff --git a/src/scenes/Signup/components/SignupForm/index.js b/src/scenes/Signup/components/SignupForm/index.js
new file mode 100644
index 0000000..72141c2
--- /dev/null
+++ b/src/scenes/Signup/components/SignupForm/index.js
@@ -0,0 +1,3 @@
+import SignupForm from './SignupForm'
+
+export default SignupForm
diff --git a/src/scenes/Signup/components/SignupPage/.actions.js.swp b/src/scenes/Signup/components/SignupPage/.actions.js.swp
new file mode 100644
index 0000000..b00fe32
Binary files /dev/null and b/src/scenes/Signup/components/SignupPage/.actions.js.swp differ
diff --git a/src/scenes/Signup/components/SignupPage/Callback.js b/src/scenes/Signup/components/SignupPage/Callback.js
new file mode 100644
index 0000000..5c956c3
--- /dev/null
+++ b/src/scenes/Signup/components/SignupPage/Callback.js
@@ -0,0 +1,52 @@
+import React, {Component} from 'react'
+import PropTypes from 'prop-types'
+import { connect } from 'react-redux';
+import {push } from 'react-router-redux'
+import SpotifyLogin from '../SpotifyLogin/index';
+import {cookiesGet} from 'redux-cookies';
+import {
+ getMyInfo,
+ setTokens,
+ getMyDevices,
+}from './actions.js';
+
+export const withAuth = (WrappedComponent) => {
+ const WithAuthComponent = class extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ accessToken : undefined,
+ }
+ }
+ componentDidMount() {
+ const {dispatch} = this.props;
+ const data = dispatch(cookiesGet('spotify')) || "11{}";
+ const str = data.substring(2)
+ const x =JSON.parse(str);
+ const accessToken = x.accessToken;
+ this.setState({accessToken: accessToken});
+ const refreshToken = x.refreshToken;
+
+ //dispatch(getMyDevices(x.devices.devices));
+ dispatch(setTokens({accessToken, refreshToken}));
+ dispatch(getMyInfo(x.me));
+ }
+ render() {
+ return (
+
+ { this.state.accessToken ? (
+
+ ) : (
+
+ )}
+
+ );
+ }
+ }
+
+ WithAuthComponent.propTypes = {
+ token: PropTypes.string,
+ }
+ return connect(state => state)(WithAuthComponent)
+}
diff --git a/src/scenes/Signup/components/SignupPage/SignupPage.js b/src/scenes/Signup/components/SignupPage/SignupPage.js
new file mode 100644
index 0000000..c2c86a9
--- /dev/null
+++ b/src/scenes/Signup/components/SignupPage/SignupPage.js
@@ -0,0 +1,74 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Link } from 'react-router'
+import Paper from 'material-ui/Paper'
+import { withFirebase } from 'react-redux-firebase'
+import { withHandlers, pure, compose } from 'recompose'
+import { UserIsNotAuthenticated } from 'utils/router'
+import { withNotifications } from 'modules/notification'
+import { LOGIN_PATH } from 'constants'
+import SignupForm from '../SignupForm'
+import {connect} from 'react-redux'
+import {withAuth} from './Callback';
+import Card from 'material-ui/Card';
+
+
+import classes from './SignupPage.scss'
+
+export const SignupPage = withAuth(({ emailSignup, spotifyReducer, onSubmitFail, }) => (
+
+
+
+
+
+
+
+ Already have an account?
+
+ Login
+
+
+
+))
+
+SignupPage.propTypes = {
+ emailSignup: PropTypes.func,
+ onSubmitFail: PropTypes.func,
+}
+
+const mapStateToProps = state => {
+ return {
+ spotifyReducer: state.spotifyReducer
+ };
+}
+
+export default compose(
+ UserIsNotAuthenticated, // redirect to list page if logged in
+ pure,
+ withNotifications, // add props.showError
+ withFirebase, // add props.firebase (firebaseConnect() can also be used)
+ state => state,
+ connect(mapStateToProps),
+ withHandlers({
+ onSubmitFail: props => (formErrs, dispatch, err) =>
+ props.showError(formErrs ? 'Form Invalid' : err.message || 'Error'),
+ emailSignup: ({ spotifyReducer, firebase, showError }) => creds =>{
+ firebase
+ .createUser(creds, {
+ email: creds.email,
+ displayName: creds.displayName,
+ accessToken: spotifyReducer.accessToken,
+ refreshToken: spotifyReducer.refreshToken,
+ //device: creds.device
+ })
+ .catch(err => showError(err.message))
+ }
+ }),
+)(SignupPage)
diff --git a/src/scenes/Signup/components/SignupPage/SignupPage.scss b/src/scenes/Signup/components/SignupPage/SignupPage.scss
new file mode 100644
index 0000000..fb35cf3
--- /dev/null
+++ b/src/scenes/Signup/components/SignupPage/SignupPage.scss
@@ -0,0 +1,58 @@
+@import 'base';
+
+.container {
+ @extend .flex-column-center;
+ justify-content: flex-start;
+ padding-top: 2rem;
+ width: 100%;
+ min-height: 530px;
+ background-color: inherit;
+}
+
+.progress {
+ margin-top: 5rem;
+}
+
+.panel {
+ @extend .flex-column-center;
+ justify-content: center;
+ padding: 1rem;
+ width: 30%;
+ min-width: 250px;
+ @include tablet {
+ width: 55%;
+ }
+ @include mobile {
+ width: 75%;
+ }
+}
+
+.or {
+ margin-top: 1rem;
+ margin-bottom: .5rem;
+ font-size: 1.3rem;
+}
+
+.login {
+ @extend .flex-column-center;
+ justify-content: center;
+ margin-top: 2rem;
+ &Link {
+ // color: $linkBlue;
+ font-size: 1.2rem;
+ &:hover {
+ // color: $materialBlue;
+ }
+ }
+ &Label {
+ @extend .flex-column-center;
+ justify-content: center;
+ font-size: 1.3rem;
+ margin-top: 2rem;
+ color: $mediumGray;
+ }
+}
+
+.providers {
+ margin-top: 1rem;
+}
diff --git a/src/scenes/Signup/components/SignupPage/actions.js b/src/scenes/Signup/components/SignupPage/actions.js
new file mode 100644
index 0000000..3ef9eaf
--- /dev/null
+++ b/src/scenes/Signup/components/SignupPage/actions.js
@@ -0,0 +1,19 @@
+export const SPOTIFY_TOKENS = 'SPOTIFY_TOKENS';
+export const SPOTIFY_ME = 'SPOTIFY_ME';
+export const DEVICES = 'DEVICES';
+
+export function setTokens({accessToken, refreshToken}) {
+ return { type: SPOTIFY_TOKENS, accessToken, refreshToken };
+}
+
+export function getMyInfo(data) {
+ return dispatch => {
+ dispatch({ type: SPOTIFY_ME, data: data});
+ }
+}
+
+export function getMyDevices(devices) {
+ return dispatch => {
+ dispatch({ type: DEVICES, devices: devices});
+ }
+}
diff --git a/src/scenes/Signup/components/SignupPage/index.js b/src/scenes/Signup/components/SignupPage/index.js
new file mode 100644
index 0000000..d0ae7f1
--- /dev/null
+++ b/src/scenes/Signup/components/SignupPage/index.js
@@ -0,0 +1,3 @@
+import SignupPage from './SignupPage'
+
+export default SignupPage
diff --git a/src/scenes/Signup/components/SpotifyLogin/SpotifyLogin.js b/src/scenes/Signup/components/SpotifyLogin/SpotifyLogin.js
new file mode 100644
index 0000000..be29877
--- /dev/null
+++ b/src/scenes/Signup/components/SpotifyLogin/SpotifyLogin.js
@@ -0,0 +1,12 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import loginSVG from './log_in.svg';
+
+export const SpotifyLogin= () => (
+
+
Click to login in
+
+
+
+
+)
diff --git a/src/scenes/Signup/components/SpotifyLogin/index.js b/src/scenes/Signup/components/SpotifyLogin/index.js
new file mode 100644
index 0000000..aacf4eb
--- /dev/null
+++ b/src/scenes/Signup/components/SpotifyLogin/index.js
@@ -0,0 +1,3 @@
+import {SpotifyLogin} from './SpotifyLogin'
+
+export default SpotifyLogin;
diff --git a/src/scenes/Signup/components/SpotifyLogin/log_in.svg b/src/scenes/Signup/components/SpotifyLogin/log_in.svg
new file mode 100644
index 0000000..ee2b8d8
--- /dev/null
+++ b/src/scenes/Signup/components/SpotifyLogin/log_in.svg
@@ -0,0 +1,51 @@
+
+
+
+
diff --git a/src/scenes/Signup/index.js b/src/scenes/Signup/index.js
new file mode 100644
index 0000000..8f2c685
--- /dev/null
+++ b/src/scenes/Signup/index.js
@@ -0,0 +1,7 @@
+import { SIGNUP_PATH as path } from 'constants'
+import component from './components/SignupPage'
+
+export default {
+ path,
+ component
+}
diff --git a/src/static/20151017_000009.jpg b/src/static/20151017_000009.jpg
new file mode 100644
index 0000000..8927df6
Binary files /dev/null and b/src/static/20151017_000009.jpg differ
diff --git a/src/static/User.png b/src/static/User.png
new file mode 100644
index 0000000..521f965
Binary files /dev/null and b/src/static/User.png differ
diff --git a/src/static/logo.svg b/src/static/logo.svg
new file mode 100644
index 0000000..6b60c10
--- /dev/null
+++ b/src/static/logo.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/store/createStore.js b/src/store/createStore.js
new file mode 100755
index 0000000..fefb8b8
--- /dev/null
+++ b/src/store/createStore.js
@@ -0,0 +1,84 @@
+import { applyMiddleware, compose, createStore } from 'redux'
+import thunk from 'redux-thunk'
+import { browserHistory } from 'react-router'
+import { reactReduxFirebase, getFirebase } from 'react-redux-firebase'
+import makeRootReducer from './reducers'
+import firebase from 'firebase'
+// import 'firebase/firestore' // make sure you add this for firestore
+import { reduxFirebase as reduxConfig } from '../.config'
+import { firebaseClient as fbConfig } from '../../.auth.js'
+import { version } from '../../package.json'
+import { updateLocation } from './location'
+import { routerMiddleware} from 'react-router-redux'
+import hashHistory from '../history';
+import {getCookiesMiddleware} from 'redux-cookies';
+import logger from 'redux-logger'
+import Cookies from 'js-cookie';
+
+
+const reactRouterMiddleware = routerMiddleware(hashHistory);
+
+export default (initialState = {}) => {
+ // ======================================================
+ // Window Vars Config
+ // ======================================================
+ window.version = version
+
+ // ======================================================
+ // Middleware Configuration
+ // ======================================================
+ const middleware = [
+ thunk.withExtraArgument(getFirebase),
+ //logger,
+ reactRouterMiddleware,
+ getCookiesMiddleware(Cookies),
+ // This is where you add other middleware like redux-observable
+ ]
+
+ // ======================================================
+ // Store Enhancers
+ // ======================================================
+ const enhancers = []
+ if (__DEV__) {
+ const devToolsExtension = window.devToolsExtension
+ if (typeof devToolsExtension === 'function') {
+ enhancers.push(devToolsExtension())
+ }
+ }
+
+ // Initialize Firebase instance and Firestore (optional)
+ firebase.initializeApp(fbConfig)
+ // firebase.firestore()
+
+ // ======================================================
+ // Store Instantiation and HMR Setup
+ // ======================================================
+ const store = createStore(
+ makeRootReducer(),
+ initialState,
+ compose(
+ // pass firebase or app instance and config
+ reactReduxFirebase(firebase, reduxConfig),
+ applyMiddleware(...middleware),
+ ...enhancers
+ )
+ )
+ store.asyncReducers = {}
+
+ // optional way to listen for auth ready (requires attachAuthIsReady: true)
+ // store.firebaseAuthIsReady.then(() => {
+ // console.log('Auth has loaded') // eslint-disable-line no-console
+ // })
+
+ // To unsubscribe, invoke `store.unsubscribeHistory()` anytime
+ store.unsubscribeHistory = browserHistory.listen(updateLocation(store))
+
+ if (module.hot) {
+ module.hot.accept('./reducers', () => {
+ const reducers = require('./reducers').default
+ store.replaceReducer(reducers(store.asyncReducers))
+ })
+ }
+
+ return store
+}
diff --git a/src/store/host.js b/src/store/host.js
new file mode 100644
index 0000000..52cab66
--- /dev/null
+++ b/src/store/host.js
@@ -0,0 +1,16 @@
+export const HOST_ROUTE = "HOST_ROUTE";
+export function setHost(host = '/'){
+ return {
+ type: HOST_ROUTE,
+ payload: host
+ }
+}
+
+export const getHost = (data)=>{
+ return nextHost => nextHost(type: HOST_ROUTE, payload: data)
+}
+
+const initialState = null
+export default function hostReducer(state = initialState, action) {
+ return action.type === HOST_ROUTE ? action.payload : state
+}
diff --git a/src/store/location.js b/src/store/location.js
new file mode 100644
index 0000000..345c316
--- /dev/null
+++ b/src/store/location.js
@@ -0,0 +1,29 @@
+// ------------------------------------
+// Constants
+// ------------------------------------
+export const LOCATION_CHANGE = 'LOCATION_CHANGE'
+
+// ------------------------------------
+// Actions
+// ------------------------------------
+export function locationChange(location = '/') {
+ return {
+ type: LOCATION_CHANGE,
+ payload: location
+ }
+}
+
+// ------------------------------------
+// Specialized Action Creator
+// ------------------------------------
+export const updateLocation = ({ dispatch }) => {
+ return nextLocation => dispatch(locationChange(nextLocation))
+}
+
+// ------------------------------------
+// Reducer
+// ------------------------------------
+const initialState = null
+export default function locationReducer(state = initialState, action) {
+ return action.type === LOCATION_CHANGE ? action.payload : state
+}
diff --git a/src/store/reducers.js b/src/store/reducers.js
new file mode 100755
index 0000000..0c195df
--- /dev/null
+++ b/src/store/reducers.js
@@ -0,0 +1,34 @@
+import { combineReducers } from 'redux'
+import { reducer as form } from 'redux-form'
+import {
+ firebaseStateReducer as firebase /*,
+ firestoreReducer */
+} from 'react-redux-firebase'
+import locationReducer from './location'
+import hashHistory from '../history';
+import spotifyReducer from './spotify.js';
+import hostReducer from './host.js';
+import {reducer as notifications} from 'react-notification-system-redux';
+
+
+
+export const makeRootReducer = asyncReducers => {
+ return combineReducers({
+ // Add sync reducers here
+ firebase,
+ // firestore: firestoreReducer,
+ form,
+ location: locationReducer,
+ notifications,
+ hostReducer,
+ spotifyReducer,
+ ...asyncReducers
+ })
+}
+
+export const injectReducer = (store, { key, reducer }) => {
+ store.asyncReducers[key] = reducer
+ store.replaceReducer(makeRootReducer(store.asyncReducers))
+}
+
+export default makeRootReducer
diff --git a/src/store/spotify.js b/src/store/spotify.js
new file mode 100644
index 0000000..1bd5a84
--- /dev/null
+++ b/src/store/spotify.js
@@ -0,0 +1,36 @@
+export const SPOTIFY_TOKENS = 'SPOTIFY_TOKENS';
+export const SPOTIFY_ME= 'SPOTIFY_ME';
+export const DEVICES = 'DEVICES';
+
+const initialState = {
+ accessToken: null,
+ refreshToken: null,
+ devices: null,
+ user: {
+ country: null,
+ display_name: null,
+ email: null,
+ external_urls: {},
+ followers: {},
+ href: null,
+ id: null,
+ images: [],
+ product: null,
+ type: null,
+ uri: null,
+ } };
+export default function reduce(state = initialState, action) {
+ switch (action.type) {
+ case SPOTIFY_TOKENS:
+ const {accessToken, refreshToken} = action;
+ return Object.assign({}, state, {accessToken, refreshToken});
+ case SPOTIFY_ME:
+ return Object.assign({}, state, {
+ user: Object.assign({}, state.user, action.data)});
+ case DEVICES:
+ const {devices} = action;
+ return Object.assign({}, state, {devices});
+ default:
+ return state;
+ }
+}
diff --git a/src/styles/_base.scss b/src/styles/_base.scss
new file mode 100755
index 0000000..14760ef
--- /dev/null
+++ b/src/styles/_base.scss
@@ -0,0 +1,15 @@
+/*
+Application Settings Go Here
+------------------------------------
+This file acts as a bundler for all variables/mixins/themes, so they
+can easily be swapped out without `core.scss` ever having to know.
+
+For example:
+
+@import './variables/colors';
+@import './variables/components';
+@import './themes/default';
+*/
+@import './device-sizes';
+@import './colors';
+@import './standard-classes';
diff --git a/src/styles/_colors.scss b/src/styles/_colors.scss
new file mode 100644
index 0000000..8e7322e
--- /dev/null
+++ b/src/styles/_colors.scss
@@ -0,0 +1,20 @@
+$blue: blue;
+$gray: #E6E6E6;
+$lightGray: #D8D8D8;
+$mediumGray: #979797;
+$darkGray: #616161;
+$blackGray: #272822;
+$primary: rgb(33,150,243);
+$secondary: rgb(200,230,201);
+$materialBlue: #00bcd4;
+$background: #F2F2F2;
+$white: #ffffff;
+$navbar: $materialBlue;
+$navbarText: $white;
+$subNavbar: $materialBlue;
+$editorBackground: $blackGray;
+$success: #c8e6c9;
+$error: #ffa3a3;
+$accentColor: #03A9F4;
+$Tab: #333333;
+$linkBlue: #427fed;
diff --git a/src/styles/_device-sizes.scss b/src/styles/_device-sizes.scss
new file mode 100644
index 0000000..93f8e75
--- /dev/null
+++ b/src/styles/_device-sizes.scss
@@ -0,0 +1,21 @@
+$mobile-width: 425px;
+$tablet-width: 768px;
+$desktop-width: 1024px;
+
+@mixin mobile {
+ @media (max-width: #{$tablet-width - 1px}) {
+ @content;
+ }
+}
+
+@mixin tablet {
+ @media (min-width: #{$tablet-width}) and (max-width: #{$desktop-width - 1px}) {
+ @content;
+ }
+}
+
+@mixin desktop {
+ @media (min-width: #{$desktop-width}) {
+ @content;
+ }
+}
diff --git a/src/styles/_standard-classes.scss b/src/styles/_standard-classes.scss
new file mode 100644
index 0000000..61f90a4
--- /dev/null
+++ b/src/styles/_standard-classes.scss
@@ -0,0 +1,25 @@
+.flex {
+ display: flex; /* NEW, Spec - Opera 12.1, Firefox 20+ */
+ display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */
+ display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */
+ display: -ms-flexbox; /* TWEENER - IE 10 */
+ display: -webkit-flex; /* NEW - Chrome */
+}
+.flex-column {
+ @extend .flex;
+ flex-direction: column;
+ &-center {
+ @extend .flex;
+ flex-direction: column;
+ align-items: center;
+ }
+}
+.flex-row {
+ @extend .flex;
+ flex-direction: row;
+ &-center {
+ @extend .flex;
+ flex-direction: row;
+ justify-content: center;
+ }
+}
diff --git a/src/styles/core.scss b/src/styles/core.scss
new file mode 100755
index 0000000..d8371f9
--- /dev/null
+++ b/src/styles/core.scss
@@ -0,0 +1,44 @@
+:global {
+ @import 'base';
+ @import 'device-sizes';
+ @import 'standard-classes';
+ @import '~normalize.css/normalize';
+ @import url(https://fonts.googleapis.com/css?family=Roboto:300,400,100,500,900);
+
+ // Some best-practice CSS that's useful for most apps
+ // Just remove them if they're not what you want
+ html {
+ box-sizing: border-box;
+ background: #201f21;
+ }
+
+ html,
+ body {
+ margin: 0;
+ padding: 0;
+ height: 100%;
+ font-family: 'Roboto', 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+ @include desktop {
+ font-size: 15px;
+ }
+
+ @include mobile {
+ font-size: 12px;
+ }
+ }
+ a {
+ text-decoration: none !important;
+ &:visited {
+ text-decoration: none;
+ color: inherit;
+ }
+ }
+ *,
+ *:before,
+ *:after {
+ box-sizing: inherit;
+ }
+ [type=button]{
+ -webkit-appearance: none !important;
+ }
+}
diff --git a/src/theme.js b/src/theme.js
new file mode 100644
index 0000000..317d646
--- /dev/null
+++ b/src/theme.js
@@ -0,0 +1,35 @@
+import {
+ blueGrey100,
+ blueGrey500,
+ blueGrey700,
+ pinkA200,
+ tealA100,
+ lightBlue500,
+ grey900,
+ white,
+ grey400,
+ darkBlack
+} from 'material-ui/styles/colors'
+import { fade } from 'material-ui/utils/colorManipulator'
+import spacing from 'material-ui/styles/spacing'
+import zIndex from 'material-ui/styles/zIndex'
+
+export default {
+ spacing,
+ zIndex: zIndex,
+ fontFamily: 'Roboto, sans-serif',
+ palette: {
+ primary1Color: blueGrey500,
+ primary2Color: blueGrey700,
+ primary3Color: blueGrey100,
+ accent1Color: pinkA200,
+ accent2Color: tealA100,
+ accent3Color: lightBlue500,
+ textColor: grey900,
+ alternateTextColor: white,
+ canvasColor: white,
+ borderColor: grey400,
+ disabledColor: fade(darkBlack, 0.3),
+ pickerHeaderColor: pinkA200
+ }
+}
diff --git a/src/utils/components.js b/src/utils/components.js
new file mode 100644
index 0000000..086e38d
--- /dev/null
+++ b/src/utils/components.js
@@ -0,0 +1,92 @@
+/* eslint-disable no-console */
+import PropTypes from 'prop-types'
+import { pick, some } from 'lodash'
+import { isLoaded } from 'react-redux-firebase'
+import {
+ compose,
+ withContext,
+ getContext,
+ mapProps,
+ branch,
+ renderComponent
+} from 'recompose'
+import LoadingSpinner from 'components/LoadingSpinner'
+
+/**
+ * Show a loading spinner when a condition is truthy. Used within
+ * spinnerWhileLoading. Accepts a test function and a higher-order component.
+ * @param {Function} condition - Condition function for when to show spinner
+ * @return {HigherOrderComponent}
+ */
+export const spinnerWhile = condition =>
+ branch(condition, renderComponent(LoadingSpinner))
+
+/**
+ * Show a loading spinner while props are loading . Checks
+ * for undefined, null, or a value (as well as handling `auth.isLoaded` and
+ * `profile.isLoaded`). **NOTE:** Meant to be used with props which are passed
+ * as props from state.firebase using connect (from react-redux), which means
+ * it could have unexpected results for other props
+ * @example Spinner While Data Loading
+ * import { compose } from 'redux'
+ * import { connect } from 'react-redux'
+ * import { firebaseConnect } from 'react-redux-firebase'
+ *
+ * const enhance = compose(
+ * firebaseConnect(['projects']),
+ * connect(({ firebase: { data: { projects } } })),
+ * spinnerWhileLoading(['projects'])
+ * )
+ *
+ * export default enhance(SomeComponent)
+ * @param {Array} propNames - List of prop names to check loading for
+ * @return {HigherOrderComponent}
+ */
+export const spinnerWhileLoading = propNames =>
+ spinnerWhile(props => some(propNames, name => !isLoaded(props[name])))
+
+/**
+ * HOC that logs props using console.log. Accepts an array list of prop names
+ * to log, if none provided all props are logged. **NOTE:** Only props at
+ * available to the HOC will be logged.
+ * @example Log Single Prop
+ * import { compose } from 'redux'
+ * import { connect } from 'react-redux'
+ * import { firebaseConnect } from 'react-redux-firebase'
+ *
+ * const enhance = compose(
+ * withProps(() => ({ projectName: 'test' })),
+ * logProps(['projectName']) // 'test' would be logged to console when SomeComponent is rendered
+ * )
+ *
+ * export default enhance(SomeComponent)
+ * @param {Array} propNames - List of prop names to log. If none provided, all
+ * are logged
+ * @return {HigherOrderComponent}
+ */
+export const logProps = (propNames, logName = '') =>
+ mapProps(ownerProps => {
+ console.log(
+ `${logName} props:`,
+ propNames ? pick(ownerProps, propNames) : ownerProps
+ )
+ return ownerProps
+ })
+
+/**
+ * HOC that adds store to props
+ * @return {HigherOrderComponent}
+ */
+export const withStore = compose(
+ withContext({ store: PropTypes.object }, () => {}),
+ getContext({ store: PropTypes.object })
+)
+
+/**
+ * HOC that adds router to props
+ * @return {HigherOrderComponent}
+ */
+export const withRouter = compose(
+ withContext({ router: PropTypes.object }, () => {}),
+ getContext({ router: PropTypes.object })
+)
diff --git a/src/utils/form.js b/src/utils/form.js
new file mode 100644
index 0000000..83dc22f
--- /dev/null
+++ b/src/utils/form.js
@@ -0,0 +1,6 @@
+export const required = value => (value ? undefined : 'Required')
+
+export const validateEmail = value =>
+ value && !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)
+ ? 'Invalid email address'
+ : undefined
diff --git a/src/utils/forms.js b/src/utils/forms.js
new file mode 100644
index 0000000..83dc22f
--- /dev/null
+++ b/src/utils/forms.js
@@ -0,0 +1,6 @@
+export const required = value => (value ? undefined : 'Required')
+
+export const validateEmail = value =>
+ value && !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)
+ ? 'Invalid email address'
+ : undefined
diff --git a/src/utils/router.js b/src/utils/router.js
new file mode 100644
index 0000000..bb9b946
--- /dev/null
+++ b/src/utils/router.js
@@ -0,0 +1,62 @@
+import { UserAuthWrapper } from 'redux-auth-wrapper'
+import { LIST_PATH } from 'constants'
+import LoadingSpinner from 'components/LoadingSpinner'
+import {push } from 'react-router-redux'
+
+const AUTHED_REDIRECT = 'AUTHED_REDIRECT'
+const UNAUTHED_REDIRECT = 'UNAUTHED_REDIRECT'
+
+/**
+ * @description Higher Order Component that redirects to `/login` instead
+ * rendering if user is not authenticated (default of redux-auth-wrapper).
+ * @param {Component} componentToWrap - Component to wrap
+ * @return {Component} wrappedComponent
+ */
+export const UserIsAuthenticated = UserAuthWrapper({
+ // eslint-disable-line new-cap
+ wrapperDisplayName: 'UserIsAuthenticated',
+ LoadingComponent: LoadingSpinner,
+ authSelector: ({ firebase: { auth } }) => auth,
+ authenticatingSelector: ({ firebase: { auth, isInitializing } }) =>
+ !auth.isLoaded || isInitializing,
+ predicate: auth => !auth.isEmpty,
+ redirectAction: newLoc => dispatch => {
+ dispatch(push(newLoc))
+ dispatch({
+ type: UNAUTHED_REDIRECT,
+ payload: { message: 'User is not authenticated.' }
+ })
+ }
+})
+
+/**
+ * @description Higher Order Component that redirects to listings page or most
+ * recent route instead rendering if user is not authenticated. This is useful
+ * routes that should not be displayed if a user is logged in, such as the
+ * login route.
+ * @param {Component} componentToWrap - Component to wrap
+ * @return {Component} wrappedComponent
+ */
+export const UserIsNotAuthenticated = UserAuthWrapper({
+ // eslint-disable-line new-cap
+ wrapperDisplayName: 'UserIsNotAuthenticated',
+ allowRedirectBack: false,
+ LoadingComponent: LoadingSpinner,
+ failureRedirectPath: (state, props) =>
+ // redirect to page user was on or to list path
+ props.location.query.redirect || LIST_PATH,
+ authSelector: ({ firebase: { auth } }) => auth,
+ authenticatingSelector: ({ firebase: { auth, isInitializing } }) =>
+ !auth.isLoaded || isInitializing,
+ // predicate: auth => auth === null,
+ predicate: auth => auth.isEmpty,
+ redirectAction: newLoc => dispatch => {
+ dispatch(push(newLoc))
+ dispatch({ type: AUTHED_REDIRECT })
+ }
+})
+
+export default {
+ UserIsAuthenticated,
+ UserIsNotAuthenticated
+}
diff --git a/storage.rules b/storage.rules
new file mode 100644
index 0000000..98472c5
--- /dev/null
+++ b/storage.rules
@@ -0,0 +1,8 @@
+// Only authenticated users can read or write to the bucket
+service firebase.storage {
+ match /b/{bucket}/o {
+ match /{allPaths=**} {
+ allow read, write: if request.auth != null;
+ }
+ }
+}
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..cf13d8d
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,8219 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@firebase/app-types@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.1.1.tgz#1b794e101c779310763b1bfce8c24e7728fb9a91"
+
+"@firebase/app@0.1.8":
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.1.8.tgz#0952d0c0cb2926aaa9b39459c7d9df653fa54330"
+ dependencies:
+ "@firebase/app-types" "0.1.1"
+ "@firebase/util" "0.1.8"
+
+"@firebase/app@^0.1.1":
+ version "0.1.9"
+ resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.1.9.tgz#a1644283f210b80ce392bda57beb5af08adec016"
+ dependencies:
+ "@firebase/app-types" "0.1.1"
+ "@firebase/util" "0.1.9"
+
+"@firebase/auth-types@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.1.1.tgz#1b38caa9971cc9d8ed6dd114976d18d986f24a9a"
+
+"@firebase/auth@0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.3.3.tgz#4efabc46e11b4d186458232b7743d203847827c9"
+ dependencies:
+ "@firebase/auth-types" "0.1.1"
+
+"@firebase/database-types@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.1.1.tgz#601b8040191766777b785c1675eac34ce57c669c"
+
+"@firebase/database@0.1.9":
+ version "0.1.9"
+ resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.1.9.tgz#ea5f376d1a59d16f909dfb46c597b55e35d9834b"
+ dependencies:
+ "@firebase/database-types" "0.1.1"
+ "@firebase/util" "0.1.8"
+ faye-websocket "0.11.1"
+
+"@firebase/database@^0.1.3":
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.1.10.tgz#a786adaedcbd971a50bd792909993976ed925985"
+ dependencies:
+ "@firebase/database-types" "0.1.1"
+ "@firebase/util" "0.1.9"
+ faye-websocket "0.11.1"
+
+"@firebase/firestore-types@0.2.1":
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-0.2.1.tgz#f2f35856b283a521c64ac4fa45d140010037e046"
+
+"@firebase/firestore@0.3.2":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-0.3.2.tgz#d997bcd96edc36b9b4abadb5c50d940ecea5d7bf"
+ dependencies:
+ "@firebase/firestore-types" "0.2.1"
+ "@firebase/webchannel-wrapper" "0.2.6"
+ grpc "^1.7.1"
+
+"@firebase/messaging-types@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@firebase/messaging-types/-/messaging-types-0.1.1.tgz#66d61d800081b3f7e4d26f1f8523f0a307e37730"
+
+"@firebase/messaging@0.1.9":
+ version "0.1.9"
+ resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.1.9.tgz#0b231da9d5b89c9d1a176ee532dda164fe59c263"
+ dependencies:
+ "@firebase/messaging-types" "0.1.1"
+ "@firebase/util" "0.1.8"
+
+"@firebase/polyfill@0.1.4":
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/@firebase/polyfill/-/polyfill-0.1.4.tgz#a17538ab0359f0398f360c561dc444249b2095c6"
+ dependencies:
+ promise-polyfill "^6.0.2"
+
+"@firebase/storage-types@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.1.1.tgz#c8e1cd328e96ef5b88e07b0a4f5ce1c68087126b"
+
+"@firebase/storage@0.1.6":
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.1.6.tgz#a7a54ed9ec77bd47b9eb5b1353083bc3edd92e3e"
+ dependencies:
+ "@firebase/storage-types" "0.1.1"
+
+"@firebase/util@0.1.8":
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/@firebase/util/-/util-0.1.8.tgz#7a7eb9d5fc56ba9e9b854bb2357d51f83b07df31"
+
+"@firebase/util@0.1.9":
+ version "0.1.9"
+ resolved "https://registry.yarnpkg.com/@firebase/util/-/util-0.1.9.tgz#ce9e770d457cff9d59c36e33f4cc70e1904f72a8"
+
+"@firebase/webchannel-wrapper@0.2.6":
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.6.tgz#a4b81ca8cdeb1acbc7923289a4a514f61b59db86"
+
+"@google-cloud/common-grpc@^0.5.3":
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/@google-cloud/common-grpc/-/common-grpc-0.5.5.tgz#ca805d7bbbcf47bbd82cf603e0386e963d6f5804"
+ dependencies:
+ "@google-cloud/common" "^0.16.1"
+ dot-prop "^4.2.0"
+ duplexify "^3.5.1"
+ extend "^3.0.1"
+ grpc "~1.7.2"
+ is "^3.2.0"
+ modelo "^4.2.0"
+ retry-request "^3.3.1"
+ through2 "^2.0.3"
+
+"@google-cloud/common@^0.15.1":
+ version "0.15.2"
+ resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-0.15.2.tgz#d8b5ba80f16b60a0ca53fc80ead4ae8b2c2e5b4a"
+ dependencies:
+ array-uniq "^1.0.3"
+ arrify "^1.0.1"
+ concat-stream "^1.6.0"
+ create-error-class "^3.0.2"
+ duplexify "^3.5.0"
+ ent "^2.2.0"
+ extend "^3.0.1"
+ google-auto-auth "^0.8.0"
+ is "^3.2.0"
+ log-driver "1.2.5"
+ methmeth "^1.1.0"
+ modelo "^4.2.0"
+ request "^2.79.0"
+ retry-request "^3.0.0"
+ split-array-stream "^1.0.0"
+ stream-events "^1.0.1"
+ string-format-obj "^1.1.0"
+ through2 "^2.0.3"
+
+"@google-cloud/common@^0.16.1":
+ version "0.16.1"
+ resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-0.16.1.tgz#e1f9fc49553362997e1fbff737444f1b460ded78"
+ dependencies:
+ array-uniq "^1.0.3"
+ arrify "^1.0.1"
+ concat-stream "^1.6.0"
+ create-error-class "^3.0.2"
+ duplexify "^3.5.0"
+ ent "^2.2.0"
+ extend "^3.0.1"
+ google-auto-auth "^0.9.0"
+ is "^3.2.0"
+ log-driver "1.2.5"
+ methmeth "^1.1.0"
+ modelo "^4.2.0"
+ request "^2.79.0"
+ retry-request "^3.0.0"
+ split-array-stream "^1.0.0"
+ stream-events "^1.0.1"
+ string-format-obj "^1.1.0"
+ through2 "^2.0.3"
+
+"@google-cloud/firestore@^0.11.2":
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-0.11.2.tgz#b511a1ec7a3b9df5cc453034b24391b0ccff9b1d"
+ dependencies:
+ "@google-cloud/common" "^0.15.1"
+ "@google-cloud/common-grpc" "^0.5.3"
+ bun "^0.0.12"
+ extend "^3.0.1"
+ functional-red-black-tree "^1.0.1"
+ google-gax "^0.14.3"
+ is "^3.2.1"
+ safe-buffer "^5.1.1"
+ through2 "^2.0.3"
+
+"@google-cloud/storage@^1.2.1":
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-1.6.0.tgz#3dea740e24bf097d91f16596e2915052907679a2"
+ dependencies:
+ "@google-cloud/common" "^0.16.1"
+ arrify "^1.0.0"
+ async "^2.0.1"
+ compressible "^2.0.12"
+ concat-stream "^1.5.0"
+ create-error-class "^3.0.2"
+ duplexify "^3.5.0"
+ extend "^3.0.0"
+ gcs-resumable-upload "^0.9.0"
+ hash-stream-validation "^0.2.1"
+ is "^3.0.1"
+ mime "^2.2.0"
+ mime-types "^2.0.8"
+ once "^1.3.1"
+ pumpify "^1.3.3"
+ request "^2.83.0"
+ safe-buffer "^5.1.1"
+ snakeize "^0.1.0"
+ stream-events "^1.0.1"
+ string-format-obj "^1.0.0"
+ through2 "^2.0.0"
+
+"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
+
+"@protobufjs/base64@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
+
+"@protobufjs/codegen@^2.0.4":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
+
+"@protobufjs/eventemitter@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
+
+"@protobufjs/fetch@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
+ dependencies:
+ "@protobufjs/aspromise" "^1.1.1"
+ "@protobufjs/inquire" "^1.1.0"
+
+"@protobufjs/float@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
+
+"@protobufjs/inquire@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
+
+"@protobufjs/path@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
+
+"@protobufjs/pool@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
+
+"@protobufjs/utf8@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
+
+"@types/babel-types@*", "@types/babel-types@^7.0.0":
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.1.tgz#1405e5396968c4302994b0161ce405b72b874257"
+
+"@types/babylon@^6.16.2":
+ version "6.16.2"
+ resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.2.tgz#062ce63b693d9af1c246f5aedf928bc9c30589c8"
+ dependencies:
+ "@types/babel-types" "*"
+
+"@types/google-cloud__storage@^1.1.1":
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/@types/google-cloud__storage/-/google-cloud__storage-1.1.7.tgz#f4b568b163cce16314f32f954f5b7d5c9001fa86"
+ dependencies:
+ "@types/node" "*"
+
+"@types/long@^3.0.32":
+ version "3.0.32"
+ resolved "https://registry.yarnpkg.com/@types/long/-/long-3.0.32.tgz#f4e5af31e9e9b196d8e5fca8a5e2e20aa3d60b69"
+
+"@types/node@*":
+ version "9.4.6"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.6.tgz#d8176d864ee48753d053783e4e463aec86b8d82e"
+
+"@types/node@^8.0.53", "@types/node@^8.9.4":
+ version "8.9.4"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.9.4.tgz#dfd327582a06c114eb6e0441fa3d6fab35edad48"
+
+abab@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+
+accepts@1.3.3:
+ 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"
+
+accepts@~1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f"
+ dependencies:
+ mime-types "~2.1.16"
+ negotiator "0.6.1"
+
+acorn-dynamic-import@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4"
+ dependencies:
+ acorn "^4.0.3"
+
+acorn-es7-plugin@^1.0.12:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz#f2ee1f3228a90eead1245f9ab1922eb2e71d336b"
+
+acorn-globals@^3.0.0, 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.0, acorn@^3.0.4, acorn@^3.1.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+
+acorn@^4.0.0, acorn@^4.0.3, acorn@^4.0.4, acorn@~4.0.2:
+ version "4.0.13"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
+
+acorn@^5.0.0, acorn@^5.4.0:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102"
+
+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, ajv-keywords@^1.1.1:
+ 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"
+
+ajv@^5.0.0, ajv@^5.1.0:
+ version "5.5.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
+ dependencies:
+ co "^4.6.0"
+ fast-deep-equal "^1.0.0"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.3.0"
+
+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"
+
+alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+
+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:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+
+ansi-html@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+
+ansi-styles@^3.2.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"
+
+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"
+
+"apparatus@>= 0.0.9":
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/apparatus/-/apparatus-0.0.9.tgz#37dcd25834ad0b651076596291db823eeb1908bd"
+ dependencies:
+ sylvester ">= 0.0.8"
+
+aproba@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+
+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"
+
+arguejs@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/arguejs/-/arguejs-0.2.3.tgz#b6f939f5fe0e3cd1f3f93e2aa9262424bf312af7"
+
+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-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+
+array-filter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83"
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+
+array-includes@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.7.0"
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1, array-uniq@^1.0.3:
+ 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"
+
+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"
+
+asap@~2.0.3:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+
+ascli@~1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ascli/-/ascli-1.0.1.tgz#bcfa5974a62f18e81cabaeb49732ab4a88f906bc"
+ dependencies:
+ colour "~0.7.1"
+ optjs "~3.2.2"
+
+asn1.js@^4.0.0:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a"
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+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"
+
+assert@^1.1.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ dependencies:
+ util "0.10.3"
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+
+async-foreach@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
+
+async@^0.9.0:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+
+async@^1.3.0, async@^1.5.0, async@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+
+async@^2.0.1, async@^2.1.2, async@^2.1.5, async@^2.3.0, async@^2.4.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
+ 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"
+
+async@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+
+autoprefixer@^6.3.1:
+ version "6.7.7"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
+ dependencies:
+ browserslist "^1.7.6"
+ caniuse-db "^1.0.30000634"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^5.2.16"
+ postcss-value-parser "^3.2.3"
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+
+aws4@^1.2.1, aws4@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+
+babel-code-frame@^6.16.0, babel-code-frame@^6.22.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.24.1, babel-core@^6.26.0:
+ 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.2.3:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827"
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-traverse "^6.23.1"
+ babel-types "^6.23.0"
+ babylon "^6.17.0"
+
+babel-generator@^6.26.0:
+ version "6.26.1"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
+ 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.7"
+ trim-right "^1.0.1"
+
+babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
+ dependencies:
+ babel-helper-explode-assignable-expression "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.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-explode-assignable-expression@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+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-module-imports@^7.0.0-beta.3:
+ version "7.0.0-beta.3"
+ resolved "https://registry.yarnpkg.com/babel-helper-module-imports/-/babel-helper-module-imports-7.0.0-beta.3.tgz#e15764e3af9c8e11810c09f78f498a2bdc71585a"
+ dependencies:
+ babel-types "7.0.0-beta.3"
+ lodash "^4.2.0"
+
+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.24.1:
+ 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-loader@^7.0.0:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126"
+ dependencies:
+ find-cache-dir "^1.0.0"
+ loader-utils "^1.0.2"
+ mkdirp "^0.5.1"
+
+babel-messages@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-check-es2015-constants@^6.22.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-lodash@^3.2.11:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.2.tgz#da3a5b49ba27447f54463f6c4fa81396ccdd463f"
+ dependencies:
+ babel-helper-module-imports "^7.0.0-beta.3"
+ babel-types "^6.26.0"
+ glob "^7.1.1"
+ lodash "^4.17.4"
+ require-package-name "^2.0.1"
+
+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.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-decorators@^6.1.18:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b"
+
+babel-plugin-syntax-dynamic-import@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
+
+babel-plugin-syntax-exponentiation-operator@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
+
+babel-plugin-syntax-export-extensions@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721"
+
+babel-plugin-syntax-flow@^6.18.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.3.13, 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.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.22.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.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
+ dependencies:
+ babel-helper-remap-async-to-generator "^6.24.1"
+ babel-plugin-syntax-async-functions "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-class-properties@^6.24.1:
+ 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-decorators-legacy@^1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz#741b58f6c5bce9e6027e0882d9c994f04f366925"
+ dependencies:
+ babel-plugin-syntax-decorators "^6.1.18"
+ babel-runtime "^6.2.0"
+ babel-template "^6.3.0"
+
+babel-plugin-transform-es2015-arrow-functions@^6.22.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:
+ 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.23.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.23.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.22.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.23.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.22.0:
+ 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.23.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.22.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:
+ 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.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.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
+ 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.23.0:
+ 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.23.0:
+ 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.22.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.23.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.22.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.22.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.22.0:
+ 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:
+ 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.23.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.22.0:
+ 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-exponentiation-operator@^6.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
+ dependencies:
+ babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
+ babel-plugin-syntax-exponentiation-operator "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-export-extensions@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653"
+ dependencies:
+ babel-plugin-syntax-export-extensions "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-flow-strip-types@^6.22.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-rest-spread@^6.23.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.23.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-self@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e"
+ dependencies:
+ babel-plugin-syntax-jsx "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-react-jsx-source@^6.22.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.24.1:
+ 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.22.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-runtime@^6.15.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee"
+ dependencies:
+ babel-runtime "^6.22.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.26.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-env@^1.4.0:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48"
+ dependencies:
+ babel-plugin-check-es2015-constants "^6.22.0"
+ babel-plugin-syntax-trailing-function-commas "^6.22.0"
+ babel-plugin-transform-async-to-generator "^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.23.0"
+ babel-plugin-transform-es2015-classes "^6.23.0"
+ babel-plugin-transform-es2015-computed-properties "^6.22.0"
+ babel-plugin-transform-es2015-destructuring "^6.23.0"
+ babel-plugin-transform-es2015-duplicate-keys "^6.22.0"
+ babel-plugin-transform-es2015-for-of "^6.23.0"
+ babel-plugin-transform-es2015-function-name "^6.22.0"
+ babel-plugin-transform-es2015-literals "^6.22.0"
+ babel-plugin-transform-es2015-modules-amd "^6.22.0"
+ babel-plugin-transform-es2015-modules-commonjs "^6.23.0"
+ babel-plugin-transform-es2015-modules-systemjs "^6.23.0"
+ babel-plugin-transform-es2015-modules-umd "^6.23.0"
+ babel-plugin-transform-es2015-object-super "^6.22.0"
+ babel-plugin-transform-es2015-parameters "^6.23.0"
+ babel-plugin-transform-es2015-shorthand-properties "^6.22.0"
+ babel-plugin-transform-es2015-spread "^6.22.0"
+ babel-plugin-transform-es2015-sticky-regex "^6.22.0"
+ babel-plugin-transform-es2015-template-literals "^6.22.0"
+ babel-plugin-transform-es2015-typeof-symbol "^6.23.0"
+ babel-plugin-transform-es2015-unicode-regex "^6.22.0"
+ babel-plugin-transform-exponentiation-operator "^6.22.0"
+ babel-plugin-transform-regenerator "^6.22.0"
+ browserslist "^2.1.2"
+ invariant "^2.2.2"
+ semver "^5.3.0"
+
+babel-preset-flow@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d"
+ dependencies:
+ babel-plugin-transform-flow-strip-types "^6.22.0"
+
+babel-preset-react@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380"
+ dependencies:
+ babel-plugin-syntax-jsx "^6.3.13"
+ babel-plugin-transform-react-display-name "^6.23.0"
+ babel-plugin-transform-react-jsx "^6.24.1"
+ babel-plugin-transform-react-jsx-self "^6.22.0"
+ babel-plugin-transform-react-jsx-source "^6.22.0"
+ babel-preset-flow "^6.23.0"
+
+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.18.0, babel-runtime@^6.2.0, babel-runtime@^6.20.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.24.1, babel-template@^6.26.0, babel-template@^6.3.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.23.1, 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@7.0.0-beta.3:
+ version "7.0.0-beta.3"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-7.0.0-beta.3.tgz#cd927ca70e0ae8ab05f4aab83778cfb3e6eb20b4"
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^2.0.0"
+
+babel-types@^6.19.0, babel-types@^6.23.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.17.0, 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@^0.4.2:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+
+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@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
+
+base64id@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
+
+base64url@2.0.0, base64url@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb"
+
+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"
+
+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.js@^3.1.3:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
+
+bignumber.js@^2.1.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-2.4.0.tgz#838a992da9f9d737e0f4b2db0be62bb09dd0c5e8"
+
+binary-extensions@^1.0.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
+
+blessed@^0.1.81:
+ version "0.1.81"
+ resolved "https://registry.yarnpkg.com/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129"
+
+blob@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921"
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ dependencies:
+ inherits "~2.0.0"
+
+bluebird@^3.4.7:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
+
+bmp-js@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.0.1.tgz#5ad0147099d13a9f38aa7b99af1d6e78666ed37f"
+
+bmp-js@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.0.3.tgz#64113e9c7cf1202b376ed607bf30626ebe57b18a"
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+
+body-parser@1.18.2, body-parser@^1.12.2, body-parser@^1.18.2:
+ version "1.18.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
+ dependencies:
+ bytes "3.0.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.1"
+ http-errors "~1.6.2"
+ iconv-lite "0.4.19"
+ on-finished "~2.3.0"
+ qs "6.5.1"
+ raw-body "2.3.2"
+ type-is "~1.6.15"
+
+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"
+
+boom@4.x.x:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
+ dependencies:
+ hoek "4.x.x"
+
+boom@5.x.x:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
+ dependencies:
+ hoek "4.x.x"
+
+bowser@^1.7.3:
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.2.tgz#d66fc868ca5f4ba895bee1363c343fe7b37d3394"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ 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"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+
+browserify-aes@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c"
+ dependencies:
+ inherits "^2.0.1"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f"
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ dependencies:
+ pako "~0.2.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
+ version "1.7.7"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
+ dependencies:
+ caniuse-db "^1.0.30000639"
+ electron-to-chromium "^1.2.7"
+
+browserslist@^2.1.2:
+ version "2.11.3"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2"
+ dependencies:
+ caniuse-lite "^1.0.30000792"
+ electron-to-chromium "^1.3.30"
+
+buffer-alloc-unsafe@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz#ffe1f67551dd055737de253337bfe853dfab1a6a"
+
+buffer-alloc@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.1.0.tgz#05514d33bf1656d3540c684f65b1202e90eca303"
+ dependencies:
+ buffer-alloc-unsafe "^0.1.0"
+ buffer-fill "^0.1.0"
+
+buffer-equal-constant-time@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
+
+buffer-equal@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b"
+
+buffer-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe"
+
+buffer-fill@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-0.1.0.tgz#ca9470e8d4d1b977fd7543f4e2ab6a7dc95101a8"
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+
+buffer@^4.3.0, buffer@^4.9.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.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"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+
+bun@^0.0.12:
+ version "0.0.12"
+ resolved "https://registry.yarnpkg.com/bun/-/bun-0.0.12.tgz#d54fae69f895557f275423bc14b404030b20a5fc"
+ dependencies:
+ readable-stream "~1.0.32"
+
+bytebuffer@~5:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd"
+ dependencies:
+ long "~3"
+
+bytes@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+
+call-signature@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996"
+
+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"
+
+camel-case@3.0.x:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+ dependencies:
+ no-case "^2.2.0"
+ upper-case "^1.1.1"
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+
+camelcase@^2.0.0, camelcase@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+
+camelcase@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+
+camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+
+caniuse-api@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
+ dependencies:
+ browserslist "^1.3.6"
+ caniuse-db "^1.0.30000529"
+ lodash.memoize "^4.1.2"
+ lodash.uniq "^4.5.0"
+
+caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
+ version "1.0.30000808"
+ resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000808.tgz#30dfd83009d5704f02dffb37725068ed12a366bb"
+
+caniuse-lite@^1.0.30000792:
+ version "1.0.30000808"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000808.tgz#7d759b5518529ea08b6705a19e70dbf401628ffc"
+
+capture-stack-trace@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
+
+caseless@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+
+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"
+
+chain-function@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc"
+
+chalk@^1.0.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"
+
+chalk@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796"
+ dependencies:
+ ansi-styles "^3.2.0"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.2.0"
+
+change-emitter@^0.1.2:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515"
+
+character-parser@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0"
+ dependencies:
+ is-regex "^1.0.3"
+
+cheerio@^0.19.0:
+ version "0.19.0"
+ resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.19.0.tgz#772e7015f2ee29965096d71ea4175b75ab354925"
+ dependencies:
+ css-select "~1.0.0"
+ dom-serializer "~0.1.0"
+ entities "~1.1.1"
+ htmlparser2 "~3.8.1"
+ lodash "^3.2.0"
+
+chokidar@^1.0.0, chokidar@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+ci-info@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+circular-json@^0.3.1:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
+
+clap@^1.0.9:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
+ dependencies:
+ chalk "^1.1.3"
+
+clean-css@4.1.x:
+ version "4.1.9"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301"
+ dependencies:
+ source-map "0.5.x"
+
+clean-css@^3.3.0:
+ version "3.4.28"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.28.tgz#bf1945e82fc808f55695e6ddeaec01400efd03ff"
+ dependencies:
+ commander "2.8.x"
+ source-map "0.4.x"
+
+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.2.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+
+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.0.3, 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-deep@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.3.0.tgz#348c61ae9cdbe0edfe053d91ff4cc521d790ede8"
+ dependencies:
+ for-own "^1.0.0"
+ is-plain-object "^2.0.1"
+ kind-of "^3.2.2"
+ shallow-clone "^0.1.2"
+
+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, clone@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
+coa@~1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
+ dependencies:
+ q "^1.1.2"
+
+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.3.0, color-convert@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
+ dependencies:
+ color-name "^1.1.1"
+
+color-name@^1.0.0, color-name@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+
+color-string@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
+ dependencies:
+ color-name "^1.0.0"
+
+color@^0.11.0:
+ version "0.11.4"
+ resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
+ dependencies:
+ clone "^1.0.2"
+ color-convert "^1.3.0"
+ color-string "^0.3.0"
+
+colormin@^1.0.5:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
+ dependencies:
+ color "^0.11.0"
+ css-color-names "0.0.4"
+ has "^1.0.1"
+
+colors@1.0.x:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
+
+colors@^1.1.2, colors@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+
+colour@~0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778"
+
+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.14.x, commander@^2.9.0, commander@~2.14.1:
+ version "2.14.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa"
+
+commander@2.8.x:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+
+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, component-emitter@^1.2.0:
+ 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.12:
+ version "2.0.13"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9"
+ dependencies:
+ mime-db ">= 1.33.0 < 2"
+
+compressible@~2.0.11:
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66"
+ dependencies:
+ mime-db ">= 1.30.0 < 2"
+
+compression@^1.6.2:
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.1.tgz#eff2603efc2e22cf86f35d2eb93589f9875373db"
+ dependencies:
+ accepts "~1.3.4"
+ bytes "3.0.0"
+ compressible "~2.0.11"
+ debug "2.6.9"
+ on-headers "~1.0.1"
+ safe-buffer "5.1.1"
+ vary "~1.1.2"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+concat-stream@1.6.0, 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"
+
+configstore@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90"
+ dependencies:
+ dot-prop "^4.1.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+connect-history-api-fallback@^1.3.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+
+constantinople@^3.0.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.2.tgz#d45ed724f57d3d10500017a7d3a889c1381ae647"
+ dependencies:
+ "@types/babel-types" "^7.0.0"
+ "@types/babylon" "^6.16.2"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+
+content-disposition@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
+
+content-type-parser@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7"
+
+content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+
+convert-source-map@^1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
+
+cookie-parser@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.3.tgz#0fe31fa19d000b95f4aadf1f53fdc2b8a203baa5"
+ dependencies:
+ cookie "0.3.1"
+ 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.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+
+cookiejar@^2.0.6:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.1.tgz#41ad57b1b555951ec171412a81942b1e8200d34a"
+
+cookies-js@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/cookies-js/-/cookies-js-1.2.3.tgz#03315049e7c52bee3f73186a69167eab0ddb2d31"
+
+cookies@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.7.1.tgz#7c8a615f5481c61ab9f16c833731bcb8f663b99b"
+ dependencies:
+ depd "~1.1.1"
+ keygrip "~1.0.2"
+
+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.0.0, core-js@^2.4.0, core-js@^2.5.0:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e"
+
+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"
+
+create-ecdh@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-error-class@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+ dependencies:
+ capture-stack-trace "^1.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+create-react-class@^15.5.1, create-react-class@^15.6.0:
+ version "15.6.3"
+ resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
+ dependencies:
+ fbjs "^0.8.9"
+ loose-envify "^1.3.1"
+ object-assign "^4.1.1"
+
+cross-env@^5.1.3:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.3.tgz#f8ae18faac87692b0a8b4d2f7000d4ec3a85dfd7"
+ dependencies:
+ cross-spawn "^5.1.0"
+ is-windows "^1.0.0"
+
+cross-spawn@^3.0.0:
+ 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"
+
+cross-spawn@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
+ dependencies:
+ lru-cache "^4.0.1"
+ which "^1.2.9"
+
+cross-spawn@^5.0.1, cross-spawn@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+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"
+
+cryptiles@3.x.x:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
+ dependencies:
+ boom "5.x.x"
+
+crypto-browserify@3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c"
+ dependencies:
+ browserify-aes "0.4.0"
+ pbkdf2-compat "2.0.1"
+ ripemd160 "0.2.0"
+ sha.js "2.2.6"
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+crypto-random-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
+
+css-color-names@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+
+css-in-js-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.0.tgz#5af1dd70f4b06b331f48d22a3d86e0786c0b9435"
+ dependencies:
+ hyphenate-style-name "^1.0.2"
+
+css-loader@^0.28.1:
+ version "0.28.9"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.9.tgz#68064b85f4e271d7ce4c48a58300928e535d1c95"
+ dependencies:
+ babel-code-frame "^6.26.0"
+ css-selector-tokenizer "^0.7.0"
+ cssnano "^3.10.0"
+ icss-utils "^2.1.0"
+ loader-utils "^1.0.2"
+ lodash.camelcase "^4.3.0"
+ object-assign "^4.1.1"
+ postcss "^5.0.6"
+ postcss-modules-extract-imports "^1.2.0"
+ postcss-modules-local-by-default "^1.2.0"
+ postcss-modules-scope "^1.1.0"
+ postcss-modules-values "^1.3.0"
+ postcss-value-parser "^3.3.0"
+ source-list-map "^2.0.0"
+
+css-parse@1.7.x:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b"
+
+css-select@^1.1.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-select@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.0.0.tgz#b1121ca51848dd264e2244d058cee254deeb44b0"
+ dependencies:
+ boolbase "~1.0.0"
+ css-what "1.0"
+ domutils "1.4"
+ nth-check "~1.0.0"
+
+css-selector-tokenizer@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86"
+ dependencies:
+ cssesc "^0.1.0"
+ fastparse "^1.1.1"
+ regexpu-core "^1.0.0"
+
+css-what@1.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-1.0.0.tgz#d7cc2df45180666f99d2b14462639469e00f736c"
+
+css-what@2.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
+
+cssesc@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
+
+cssnano@^3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
+ dependencies:
+ autoprefixer "^6.3.1"
+ decamelize "^1.1.2"
+ defined "^1.0.0"
+ has "^1.0.1"
+ object-assign "^4.0.1"
+ postcss "^5.0.14"
+ postcss-calc "^5.2.0"
+ postcss-colormin "^2.1.8"
+ postcss-convert-values "^2.3.4"
+ postcss-discard-comments "^2.0.4"
+ postcss-discard-duplicates "^2.0.1"
+ postcss-discard-empty "^2.0.1"
+ postcss-discard-overridden "^0.1.1"
+ postcss-discard-unused "^2.2.1"
+ postcss-filter-plugins "^2.0.0"
+ postcss-merge-idents "^2.1.5"
+ postcss-merge-longhand "^2.0.1"
+ postcss-merge-rules "^2.0.3"
+ postcss-minify-font-values "^1.0.2"
+ postcss-minify-gradients "^1.0.1"
+ postcss-minify-params "^1.0.4"
+ postcss-minify-selectors "^2.0.4"
+ postcss-normalize-charset "^1.1.0"
+ postcss-normalize-url "^3.0.7"
+ postcss-ordered-values "^2.1.0"
+ postcss-reduce-idents "^2.2.2"
+ postcss-reduce-initial "^1.0.0"
+ postcss-reduce-transforms "^1.0.3"
+ postcss-svgo "^2.1.1"
+ postcss-unique-selectors "^2.0.2"
+ postcss-value-parser "^3.2.3"
+ postcss-zindex "^2.0.1"
+
+csso@~2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
+ dependencies:
+ clap "^1.0.9"
+ source-map "^0.5.3"
+
+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"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ dependencies:
+ array-find-index "^1.0.1"
+
+cycle@1.0.x:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2"
+
+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"
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+
+debug@*:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ dependencies:
+ ms "2.0.0"
+
+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.9, debug@^2.1.1, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ dependencies:
+ ms "2.0.0"
+
+decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+
+deep-diff@^0.3.5:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84"
+
+deep-equal@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
+
+deep-extend@~0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+
+define-properties@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
+ dependencies:
+ foreach "^2.0.5"
+ object-keys "^1.0.8"
+
+defined@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+
+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"
+
+depd@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
+
+depd@~1.1.1, depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+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"
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+
+diff-match-patch@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.0.tgz#1cc3c83a490d67f95d91e39f6ad1f2e086b63048"
+
+diffie-hellman@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dir-glob@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
+ dependencies:
+ arrify "^1.0.1"
+ path-type "^3.0.0"
+
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.0.0, doctrine@^2.0.2:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ dependencies:
+ esutils "^2.0.2"
+
+doctypes@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9"
+
+dom-converter@~0.1:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"
+ dependencies:
+ utila "~0.3"
+
+dom-helpers@^3.2.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6"
+
+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-storage@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.0.2.tgz#ed17cbf68abd10e0aef8182713e297c5e4b500b0"
+
+dom-walk@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
+
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+
+domelementtype@1:
+ 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.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
+ dependencies:
+ domelementtype "1"
+
+domhandler@2.3:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738"
+ dependencies:
+ domelementtype "1"
+
+domutils@1.1:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
+ dependencies:
+ domelementtype "1"
+
+domutils@1.4:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.4.3.tgz#0865513796c6b306031850e175516baf80b72a6f"
+ dependencies:
+ domelementtype "1"
+
+domutils@1.5, 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"
+
+dot-prop@^4.1.0, dot-prop@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+ dependencies:
+ is-obj "^1.0.0"
+
+dotenv@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.0.tgz#0206eb5b336639bf377618a2a304ff00c6a1fddb"
+
+double-ended-queue@^2.1.0-0:
+ version "2.1.0-0"
+ resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c"
+
+duplexify@^3.5.0, duplexify@^3.5.1, duplexify@^3.5.3:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.3.tgz#8b5818800df92fd0125b27ab896491912858243e"
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+eastasianwidth@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.1.1.tgz#44d656de9da415694467335365fb3147b8572b7c"
+
+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"
+
+ecdsa-sig-formatter@1.0.9:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1"
+ dependencies:
+ base64url "^2.0.0"
+ safe-buffer "^5.0.1"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+
+electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30:
+ version "1.3.33"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz#bf00703d62a7c65238136578c352d6c5c042a545"
+
+elliptic@^6.0.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+
+empower-core@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-0.6.2.tgz#5adef566088e31fba80ba0a36df47d7094169144"
+ dependencies:
+ call-signature "0.0.2"
+ core-js "^2.0.0"
+
+empower@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/empower/-/empower-1.2.3.tgz#6f0da73447f4edd838fec5c60313a88ba5cb852b"
+ dependencies:
+ core-js "^2.0.0"
+ empower-core "^0.6.2"
+
+encodeurl@~1.0.1, encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+
+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"
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
+ dependencies:
+ once "^1.4.0"
+
+engine.io-client@~1.8.4:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.5.tgz#fe7fb60cb0dcf2fa2859489329cb5968dedeb11f"
+ 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.5"
+ 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"
+
+engine.io@~1.8.4:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.5.tgz#4ebe5e75c6dc123dee4afdce6e5fdced21eb93f6"
+ dependencies:
+ accepts "1.3.3"
+ base64id "1.0.0"
+ cookie "0.3.1"
+ debug "2.3.3"
+ engine.io-parser "1.3.2"
+ ws "~1.1.5"
+
+enhanced-resolve@^3.3.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ object-assign "^4.0.1"
+ tapable "^0.2.7"
+
+enhanced-resolve@~0.9.0:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.2.0"
+ tapable "^0.1.8"
+
+ent@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
+
+entities@1.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26"
+
+entities@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+
+errno@^0.1.3:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026"
+ dependencies:
+ prr "~1.0.1"
+
+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"
+
+error-stack-parser@^1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.6.tgz#e0e73b93e417138d1cd7c0b746b1a4a14854c292"
+ dependencies:
+ stackframe "^0.3.1"
+
+es-abstract@^1.7.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864"
+ dependencies:
+ es-to-primitive "^1.1.1"
+ function-bind "^1.1.1"
+ has "^1.0.1"
+ is-callable "^1.1.3"
+ is-regex "^1.0.4"
+
+es-to-primitive@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
+ dependencies:
+ is-callable "^1.1.1"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.1"
+
+es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
+ version "0.10.38"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.38.tgz#fa7d40d65bbc9bb8a67e1d3f9cc656a00530eed3"
+ dependencies:
+ es6-iterator "~2.0.3"
+ es6-symbol "~3.1.1"
+
+es6-error@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
+
+es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.35"
+ es6-symbol "^3.1.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-promise@^3.0.2:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
+
+es6-promise@^4.0.3:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29"
+
+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.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.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.9.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2"
+ dependencies:
+ esprima "^3.1.3"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+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-prettier@^2.3.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3"
+ dependencies:
+ get-stdin "^5.0.1"
+
+eslint-config-standard-jsx@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz#009e53c4ddb1e9ee70b4650ffe63a7f39f8836e1"
+
+eslint-config-standard-react@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard-react/-/eslint-config-standard-react-5.0.0.tgz#64c7b8140172852be810a53d48ee87649ff178e3"
+ dependencies:
+ eslint-config-standard-jsx "^4.0.0"
+
+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.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
+ dependencies:
+ debug "^2.6.9"
+ resolve "^1.5.0"
+
+eslint-module-utils@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449"
+ dependencies:
+ debug "^2.6.8"
+ pkg-dir "^1.0.0"
+
+eslint-plugin-babel@^4.1.1:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz#79202a0e35757dd92780919b2336f1fa2fe53c1e"
+
+eslint-plugin-import@^2.2.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894"
+ dependencies:
+ builtin-modules "^1.1.1"
+ contains-path "^0.1.0"
+ debug "^2.6.8"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.1"
+ eslint-module-utils "^2.1.1"
+ has "^1.0.1"
+ lodash.cond "^4.3.0"
+ minimatch "^3.0.3"
+ read-pkg-up "^2.0.0"
+
+eslint-plugin-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-prettier@^2.1.2:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7"
+ dependencies:
+ fast-diff "^1.1.1"
+ jest-docblock "^21.0.0"
+
+eslint-plugin-promise@^3.5.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz#54b7658c8f454813dc2a870aff8152ec4969ba75"
+
+eslint-plugin-react@^7.0.1:
+ version "7.6.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.6.1.tgz#5d0e908be599f0c02fbf4eef0c7ed6f29dff7633"
+ dependencies:
+ doctrine "^2.0.2"
+ has "^1.0.1"
+ jsx-ast-utils "^2.0.1"
+ prop-types "^15.6.0"
+
+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.3"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6"
+ dependencies:
+ acorn "^5.4.0"
+ acorn-jsx "^3.0.0"
+
+esprima@^2.6.0:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+
+esprima@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+
+esprima@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
+
+espurify@^1.6.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.7.0.tgz#1c5cf6cbccc32e6f639380bd4f991fab9ba9d226"
+ dependencies:
+ core-js "^2.0.0"
+
+esquery@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
+ dependencies:
+ estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
+ dependencies:
+ estraverse "^4.1.0"
+ object-assign "^4.0.1"
+
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+
+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"
+
+events@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+exif-parser@^0.1.9:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922"
+
+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@^4.12.2, express@^4.14.0:
+ version "4.16.2"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"
+ dependencies:
+ accepts "~1.3.4"
+ array-flatten "1.1.1"
+ body-parser "1.18.2"
+ content-disposition "0.5.2"
+ content-type "~1.0.4"
+ cookie "0.3.1"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.1"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "1.1.0"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.2"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.2"
+ qs "6.5.1"
+ range-parser "~1.2.0"
+ safe-buffer "5.1.1"
+ send "0.16.1"
+ serve-static "1.13.1"
+ setprototypeof "1.1.0"
+ statuses "~1.3.1"
+ type-is "~1.6.15"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+extend@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-1.3.0.tgz#d1516fb0ff5624d2ebf9123ea1dac5a1994004f8"
+
+extend@^3.0.0, extend@^3.0.1, extend@~3.0.0, extend@~3.0.1:
+ 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"
+
+extract-text-webpack-plugin@^2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz#756ef4efa8155c3681833fbc34da53b941746d6c"
+ dependencies:
+ async "^2.1.2"
+ loader-utils "^1.0.2"
+ schema-utils "^0.3.0"
+ webpack-sources "^1.0.1"
+
+extract-zip@^1.6.5:
+ version "1.6.6"
+ resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c"
+ dependencies:
+ concat-stream "1.6.0"
+ debug "2.6.9"
+ mkdirp "0.5.0"
+ yauzl "2.4.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+
+eyes@0.1.x:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
+
+fast-deep-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
+
+fast-diff@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+
+fastparse@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
+
+favicons-webpack-plugin@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/favicons-webpack-plugin/-/favicons-webpack-plugin-0.0.7.tgz#253a46a4f93d137d1096762877f8a8ef12e28648"
+ dependencies:
+ favicons "^4.7.1"
+ loader-utils "^0.2.14"
+ lodash "^4.11.1"
+ webpack "^1.13.0"
+
+favicons@^4.7.1:
+ version "4.8.6"
+ resolved "https://registry.yarnpkg.com/favicons/-/favicons-4.8.6.tgz#a2b13800ab3fec2715bc8f27fa841d038d4761e2"
+ dependencies:
+ async "^1.5.0"
+ cheerio "^0.19.0"
+ clone "^1.0.2"
+ colors "^1.1.2"
+ harmony-reflect "^1.4.2"
+ image-size "^0.4.0"
+ jimp "^0.2.13"
+ jsontoxml "0.0.11"
+ merge-defaults "^0.2.1"
+ mkdirp "^0.5.1"
+ node-rest-client "^1.5.1"
+ require-directory "^2.1.1"
+ svg2png "~3.0.1"
+ through2 "^2.0.0"
+ tinycolor2 "^1.1.2"
+ to-ico "^1.1.2"
+ underscore "^1.8.3"
+ vinyl "^1.1.0"
+
+faye-websocket@0.11.1:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+faye-websocket@0.9.3:
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.9.3.tgz#482a505b0df0ae626b969866d3bd740cdb962e83"
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.6, fbjs@^0.8.9:
+ version "0.8.16"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
+ 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"
+
+fd-slicer@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
+ dependencies:
+ pend "~1.2.0"
+
+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"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
+file-loader@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.2.tgz#4ff1df28af38719a6098093b88c82c71d1794a34"
+ dependencies:
+ loader-utils "^1.0.2"
+
+file-type@^3.1.0, file-type@^3.8.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
+
+filename-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+
+filesize@^3.3.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.0.tgz#22d079615624bb6fd3c04026120628a41b3f4efa"
+
+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@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.2"
+ statuses "~1.3.1"
+ unpipe "~1.0.0"
+
+find-cache-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^1.0.0"
+ pkg-dir "^2.0.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.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"
+
+firebase-admin@^5.9.0:
+ version "5.9.0"
+ resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-5.9.0.tgz#ef58a6932e4c0c09a0e96917334eef0f43658c44"
+ dependencies:
+ "@firebase/app" "^0.1.1"
+ "@firebase/database" "^0.1.3"
+ "@google-cloud/firestore" "^0.11.2"
+ "@google-cloud/storage" "^1.2.1"
+ "@types/google-cloud__storage" "^1.1.1"
+ "@types/node" "^8.0.53"
+ faye-websocket "0.9.3"
+ jsonwebtoken "8.1.0"
+ node-forge "0.7.1"
+
+firebase-queue@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/firebase-queue/-/firebase-queue-1.6.1.tgz#fe13c72c274b4f7bfad33997409202a3ed20dc06"
+ dependencies:
+ lodash "^4.6.1"
+ rsvp "^3.2.1"
+ uuid "^3.0.0"
+ winston "^2.2.0"
+
+firebase@^4.5.2:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/firebase/-/firebase-4.9.1.tgz#7adda5cf05dbb9d65e316adb61e2c62abcef2586"
+ dependencies:
+ "@firebase/app" "0.1.8"
+ "@firebase/auth" "0.3.3"
+ "@firebase/database" "0.1.9"
+ "@firebase/firestore" "0.3.2"
+ "@firebase/messaging" "0.1.9"
+ "@firebase/polyfill" "0.1.4"
+ "@firebase/storage" "0.1.6"
+ dom-storage "^2.0.2"
+ xmlhttprequest "^1.8.0"
+
+flat-cache@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
+ dependencies:
+ circular-json "^0.3.1"
+ del "^2.0.2"
+ graceful-fs "^4.1.2"
+ write "^0.2.1"
+
+flatten@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
+
+for-each@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4"
+ dependencies:
+ is-function "~1.0.0"
+
+for-in@^0.1.3:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
+
+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"
+
+for-own@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
+ 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@1.0.0-rc4:
+ version "1.0.0-rc4"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.0-rc4.tgz#05ac6bc22227b43e4461f488161554699d4f8b5e"
+ dependencies:
+ async "^1.5.2"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.10"
+
+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"
+
+form-data@~2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+formidable@^1.0.17:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9"
+
+forwarded@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+
+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-extra@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^3.0.0"
+ universalify "^0.1.0"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+fsevents@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.39"
+
+fstream-ignore@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+function-bind@^1.0.2, function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+gaze@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105"
+ dependencies:
+ globule "^1.0.0"
+
+gcp-metadata@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-0.3.1.tgz#313814456e7c3d0eeb8f8b084b33579e886f829a"
+ dependencies:
+ extend "^3.0.0"
+ retry-request "^3.0.0"
+
+gcp-metadata@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-0.4.1.tgz#64623b84175357cc119ad7a6aec759392a90a58b"
+ dependencies:
+ extend "^3.0.0"
+ retry-request "^3.1.0"
+
+gcs-resumable-upload@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-0.9.0.tgz#644202149696ad114358bc1e0cf43a60b5ec0454"
+ dependencies:
+ buffer-equal "^1.0.0"
+ configstore "^3.0.0"
+ google-auto-auth "^0.9.0"
+ pumpify "^1.3.3"
+ request "^2.81.0"
+ stream-events "^1.0.1"
+ through2 "^2.0.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@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+
+get-stdin@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+
+get-stream@^2.0.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
+ dependencies:
+ object-assign "^4.0.1"
+ pinkie-promise "^2.0.0"
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+
+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.x:
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^6.0.4:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, 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"
+
+globby@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680"
+ dependencies:
+ array-union "^1.0.1"
+ dir-glob "^2.0.0"
+ glob "^7.1.2"
+ ignore "^3.3.5"
+ pify "^3.0.0"
+ slash "^1.0.0"
+
+globule@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09"
+ dependencies:
+ glob "~7.1.1"
+ lodash "~4.17.4"
+ minimatch "~3.0.2"
+
+google-auth-library@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-0.12.0.tgz#a3fc6c296d00bb54e4d877ef581a05947330d07f"
+ dependencies:
+ gtoken "^1.2.3"
+ jws "^3.1.4"
+ lodash.isstring "^4.0.1"
+ lodash.merge "^4.6.0"
+ request "^2.81.0"
+
+google-auto-auth@^0.8.0:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/google-auto-auth/-/google-auto-auth-0.8.2.tgz#928ee8954514a2ea179de8dd4e97f04d40d13d0a"
+ dependencies:
+ async "^2.3.0"
+ gcp-metadata "^0.3.0"
+ google-auth-library "^0.12.0"
+ request "^2.79.0"
+
+google-auto-auth@^0.9.0:
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/google-auto-auth/-/google-auto-auth-0.9.3.tgz#544c36da639890cf56040b0246859060f140715a"
+ dependencies:
+ async "^2.3.0"
+ gcp-metadata "^0.4.1"
+ google-auth-library "^0.12.0"
+ request "^2.79.0"
+
+google-gax@^0.14.3:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-0.14.5.tgz#b2c73c61df6cead94f90421d17f44ff161f623c7"
+ dependencies:
+ extend "^3.0.0"
+ globby "^7.1.1"
+ google-auto-auth "^0.9.0"
+ google-proto-files "^0.14.1"
+ grpc "~1.7.2"
+ is-stream-ended "^0.1.0"
+ lodash "^4.17.2"
+ protobufjs "^6.8.0"
+ readable-stream "^2.2.2"
+ through2 "^2.0.3"
+
+google-p12-pem@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-0.1.2.tgz#33c46ab021aa734fa0332b3960a9a3ffcb2f3177"
+ dependencies:
+ node-forge "^0.7.1"
+
+google-proto-files@^0.14.1:
+ version "0.14.2"
+ resolved "https://registry.yarnpkg.com/google-proto-files/-/google-proto-files-0.14.2.tgz#958cffea7e8888e00b9a6c55ed1362c06b426f4c"
+ dependencies:
+ globby "^7.1.1"
+ power-assert "^1.4.4"
+ prettier "^1.10.2"
+ protobufjs "^6.8.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+
+grpc@^1.7.1:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.9.0.tgz#99ca91c7dddc158da1d7edc4f7e09971a8b68a84"
+ dependencies:
+ lodash "^4.17.5"
+ nan "^2.0.0"
+ node-pre-gyp "^0.6.39"
+ protobufjs "^5.0.0"
+
+grpc@~1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.7.3.tgz#c9d034324e2ec8a06cfaa577a044a116f96c8c90"
+ dependencies:
+ arguejs "^0.2.3"
+ lodash "^4.15.0"
+ nan "^2.0.0"
+ node-pre-gyp "^0.6.39"
+ protobufjs "^5.0.0"
+
+gtoken@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-1.2.3.tgz#5509571b8afd4322e124cf66cf68115284c476d8"
+ dependencies:
+ google-p12-pem "^0.1.0"
+ jws "^3.0.0"
+ mime "^1.4.1"
+ request "^2.72.0"
+
+har-schema@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+
+har-validator@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+ dependencies:
+ chalk "^1.1.1"
+ commander "^2.9.0"
+ is-my-json-valid "^2.12.4"
+ pinkie-promise "^2.0.0"
+
+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"
+
+har-validator@~5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
+ dependencies:
+ ajv "^5.1.0"
+ har-schema "^2.0.0"
+
+harmony-reflect@^1.4.2:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.5.1.tgz#b54ca617b00cc8aef559bbb17b3d85431dc7e329"
+
+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-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+
+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"
+
+hash-base@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
+ dependencies:
+ inherits "^2.0.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash-stream-validation@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.1.tgz#ecc9b997b218be5bb31298628bb807869b73dcd1"
+ dependencies:
+ through2 "^2.0.0"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.0"
+
+hasha@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1"
+ dependencies:
+ is-stream "^1.0.1"
+ pinkie-promise "^2.0.0"
+
+hawk@3.1.3, 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"
+
+hawk@~6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
+ dependencies:
+ boom "4.x.x"
+ cryptiles "3.x.x"
+ hoek "4.x.x"
+ sntp "2.x.x"
+
+he@1.1.x:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+
+history@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/history/-/history-3.3.0.tgz#fcedcce8f12975371545d735461033579a6dae9c"
+ dependencies:
+ invariant "^2.2.1"
+ loose-envify "^1.2.0"
+ query-string "^4.2.2"
+ warning "^3.0.0"
+
+history@^4.7.2:
+ version "4.7.2"
+ resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b"
+ dependencies:
+ invariant "^2.2.1"
+ loose-envify "^1.2.0"
+ resolve-pathname "^2.2.0"
+ value-equal "^0.4.0"
+ warning "^3.0.0"
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+
+hoek@4.x.x:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
+
+hoist-non-react-statics@1.2.0, 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, hoist-non-react-statics@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0"
+
+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-comment-regex@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
+
+html-encoding-sniffer@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
+html-entities@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
+
+html-minifier@^3.2.3:
+ version "3.5.9"
+ resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.9.tgz#74424014b872598d4bb0e20ac420926ec61024b6"
+ dependencies:
+ camel-case "3.0.x"
+ clean-css "4.1.x"
+ commander "2.14.x"
+ he "1.1.x"
+ ncname "1.0.x"
+ param-case "2.1.x"
+ relateurl "0.2.x"
+ uglify-js "3.3.x"
+
+html-webpack-plugin@^2.29.0:
+ version "2.30.1"
+ resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5"
+ dependencies:
+ bluebird "^3.4.7"
+ html-minifier "^3.2.3"
+ loader-utils "^0.2.16"
+ lodash "^4.17.3"
+ pretty-error "^2.0.2"
+ toposort "^1.0.0"
+
+htmlparser2@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
+ dependencies:
+ domelementtype "1"
+ domhandler "2.1"
+ domutils "1.1"
+ readable-stream "1.0"
+
+htmlparser2@~3.8.1:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068"
+ dependencies:
+ domelementtype "1"
+ domhandler "2.3"
+ domutils "1.5"
+ entities "1.0"
+ readable-stream "1.1"
+
+http-errors@1.6.2, http-errors@~1.6.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
+ dependencies:
+ depd "1.1.1"
+ inherits "2.0.3"
+ setprototypeof "1.0.3"
+ statuses ">= 1.3.1 < 2"
+
+http-parser-js@>=0.4.0:
+ version "0.4.10"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4"
+
+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"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+
+husky@^0.14.3:
+ version "0.14.3"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3"
+ dependencies:
+ is-ci "^1.0.10"
+ normalize-path "^1.0.0"
+ strip-indent "^2.0.0"
+
+hyphenate-style-name@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b"
+
+iconv-lite@0.4.19, iconv-lite@~0.4.13:
+ version "0.4.19"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
+
+icss-replace-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+
+icss-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962"
+ dependencies:
+ postcss "^6.0.1"
+
+ieee754@^1.1.4:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+
+ignore@^3.0.11, ignore@^3.2.0, ignore@^3.3.5:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
+
+image-size@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.4.0.tgz#d4b4e1f61952e4cbc1cea9a6b0c915fecb707510"
+
+image-size@^0.5.0:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
+in-publish@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ dependencies:
+ repeating "^2.0.0"
+
+indexes-of@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+
+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.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+
+ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+
+inline-style-prefixer@^3.0.2:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534"
+ dependencies:
+ bowser "^1.7.3"
+ css-in-js-utils "^2.0.0"
+
+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@^0.6.4:
+ version "0.6.6"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"
+
+interpret@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
+
+invariant@^2.0.0, invariant@^2.2.1, 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"
+
+ip-regex@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd"
+
+ip@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+
+ipaddr.js@1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0"
+
+is-absolute-url@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.0.2, is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+
+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:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5"
+ 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-expression@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f"
+ dependencies:
+ acorn "~4.0.2"
+ object-assign "^4.0.1"
+
+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-function@^1.0.1, is-function@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
+
+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, is-my-json-valid@^2.12.4:
+ version "2.17.1"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz#3da98914a70a22f0a8563ef1511a246c6fc55471"
+ 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-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+
+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.1"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-plain-obj@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+
+is-plain-object@^2.0.1:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ dependencies:
+ isobject "^3.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-promise@^2.0.0, is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+
+is-regex@^1.0.3, 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.1.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+
+is-stream-ended@^0.1.0:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.3.tgz#a0473b267c756635486beedc7e3344e549d152ac"
+
+is-stream@^1.0.1, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+
+is-svg@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
+ dependencies:
+ html-comment-regex "^1.1.0"
+
+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"
+
+is-windows@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9"
+
+is@^3.0.1, is@^3.2.0, is@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/is/-/is-3.2.1.tgz#d0ac2ad55eb7b0bec926a5266f6c662aaa83dca5"
+
+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"
+
+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"
+
+isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+
+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.x, isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
+jest-docblock@^21.0.0:
+ version "21.2.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414"
+
+jimp@^0.2.13, jimp@^0.2.21:
+ version "0.2.28"
+ resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.2.28.tgz#dd529a937190f42957a7937d1acc3a7762996ea2"
+ dependencies:
+ bignumber.js "^2.1.0"
+ bmp-js "0.0.3"
+ es6-promise "^3.0.2"
+ exif-parser "^0.1.9"
+ file-type "^3.1.0"
+ jpeg-js "^0.2.0"
+ load-bmfont "^1.2.3"
+ mime "^1.3.4"
+ mkdirp "0.5.1"
+ pixelmatch "^4.0.0"
+ pngjs "^3.0.0"
+ read-chunk "^1.0.1"
+ request "^2.65.0"
+ stream-to-buffer "^0.1.0"
+ tinycolor2 "^1.1.2"
+ url-regex "^3.0.0"
+
+jpeg-js@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.1.2.tgz#135b992c0575c985cfa0f494a3227ed238583ece"
+
+jpeg-js@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.2.0.tgz#53e448ec9d263e683266467e9442d2c5a2ef5482"
+
+js-base64@^2.1.8, js-base64@^2.1.9:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582"
+
+js-cookie@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.0.tgz#1b2c279a6eece380a12168b92485265b35b1effb"
+
+js-stringify@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db"
+
+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:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+js-yaml@~3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^2.6.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+
+jsdom@^9.11.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-loader@^0.5.4:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
+
+json-schema-traverse@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+
+json-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:
+ 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.5.0, 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"
+
+jsonfile@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66"
+ 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"
+
+jsontoxml@0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/jsontoxml/-/jsontoxml-0.0.11.tgz#373ab5b2070be3737a5fb3e32fd1b7b81870caa4"
+
+jsonwebtoken@8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.1.0.tgz#c6397cd2e5fd583d65c007a83dc7bb78e6982b83"
+ dependencies:
+ jws "^3.1.4"
+ lodash.includes "^4.3.0"
+ lodash.isboolean "^3.0.3"
+ lodash.isinteger "^4.0.4"
+ lodash.isnumber "^3.0.3"
+ lodash.isplainobject "^4.0.6"
+ lodash.isstring "^4.0.1"
+ lodash.once "^4.0.0"
+ ms "^2.0.0"
+ xtend "^4.0.1"
+
+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"
+
+jstransformer@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3"
+ dependencies:
+ is-promise "^2.0.0"
+ promise "^7.0.1"
+
+jsx-ast-utils@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f"
+ dependencies:
+ array-includes "^3.0.3"
+
+jwa@^1.1.4:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5"
+ dependencies:
+ base64url "2.0.0"
+ buffer-equal-constant-time "1.0.1"
+ ecdsa-sig-formatter "1.0.9"
+ safe-buffer "^5.0.1"
+
+jws@^3.0.0, jws@^3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2"
+ dependencies:
+ base64url "^2.0.0"
+ jwa "^1.1.4"
+ safe-buffer "^5.0.1"
+
+kew@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
+
+keycode@^2.1.8:
+ version "2.1.9"
+ resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa"
+
+keygrip@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91"
+
+kind-of@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5"
+ dependencies:
+ is-buffer "^1.0.2"
+
+kind-of@^3.0.2, kind-of@^3.2.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"
+
+kue-ui-client@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/kue-ui-client/-/kue-ui-client-1.1.3.tgz#a327483b3d8a45c31fecbd23adff7608d824817d"
+
+kue-ui-express@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/kue-ui-express/-/kue-ui-express-1.0.2.tgz#c27428930a425a1b1af4b681bb3bb56901468f0e"
+ dependencies:
+ jsdom "^9.11.0"
+ kue-ui-client "^1.1.0"
+ serve-static "^1.11.2"
+
+kue@^0.11.6:
+ version "0.11.6"
+ resolved "https://registry.yarnpkg.com/kue/-/kue-0.11.6.tgz#5b76916bcedd56636a107861471c63c94611860a"
+ dependencies:
+ body-parser "^1.12.2"
+ express "^4.12.2"
+ lodash "^4.0.0"
+ nib "~1.1.2"
+ node-redis-warlock "~0.2.0"
+ pug "^2.0.0-beta3"
+ redis "~2.6.0-2"
+ stylus "~0.54.5"
+ yargs "^4.0.0"
+ optionalDependencies:
+ reds "^0.2.5"
+
+lazy-cache@^0.2.3:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65"
+
+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"
+
+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-bmfont@^1.2.3:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.3.0.tgz#bb7e7c710de6bcafcb13cb3b8c81e0c0131ecbc9"
+ dependencies:
+ buffer-equal "0.0.1"
+ mime "^1.3.4"
+ parse-bmfont-ascii "^1.0.3"
+ parse-bmfont-binary "^1.0.5"
+ parse-bmfont-xml "^1.1.0"
+ xhr "^2.0.1"
+ xtend "^4.0.0"
+
+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"
+
+loader-runner@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
+
+loader-utils@^0.2.11, loader-utils@^0.2.14, loader-utils@^0.2.16:
+ version "0.2.17"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+loader-utils@^1.0.1, loader-utils@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.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.3, lodash-es@^4.2.0, lodash-es@^4.2.1:
+ version "4.17.5"
+ resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.5.tgz#9fc6e737b1c4d151d8f9cae2247305d552ce748f"
+
+lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
+
+lodash.camelcase@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+
+lodash.clonedeep@^4.3.2:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+
+lodash.cond@^4.3.0:
+ version "4.5.2"
+ resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
+
+lodash.includes@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
+
+lodash.isboolean@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
+
+lodash.isempty@4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"
+
+lodash.isinteger@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
+
+lodash.isnumber@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+
+lodash.isstring@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
+
+lodash.memoize@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+
+lodash.merge@^4.6.0:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54"
+
+lodash.mergewith@^4.6.0:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
+
+lodash.once@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
+
+lodash.tail@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664"
+
+lodash.throttle@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
+
+lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+
+lodash@^3.2.0:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
+
+lodash@^4.0.0, lodash@^4.11.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1, lodash@~4.17.4:
+ version "4.17.5"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
+
+lodash@~2.4.1:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e"
+
+log-driver@1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056"
+
+long@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
+
+long@~3:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b"
+
+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.2.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"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lower-case@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+
+lru-cache@^2.5.0:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
+
+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"
+
+macaddress@^0.2.8:
+ version "0.2.8"
+ resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
+
+make-dir@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51"
+ dependencies:
+ pify "^3.0.0"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+
+material-ui-search-bar@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/material-ui-search-bar/-/material-ui-search-bar-0.4.1.tgz#821a81d6942dc92ade9d00103f08a961b93b243f"
+ dependencies:
+ prop-types "^15.5.8"
+
+material-ui@^0.19.1:
+ version "0.19.4"
+ resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-0.19.4.tgz#ca9cdca8aa8bb594dfac5db38ec9ff045a323587"
+ dependencies:
+ babel-runtime "^6.23.0"
+ inline-style-prefixer "^3.0.2"
+ keycode "^2.1.8"
+ lodash.merge "^4.6.0"
+ lodash.throttle "^4.1.1"
+ prop-types "^15.5.7"
+ react-event-listener "^0.5.1"
+ react-transition-group "^1.2.1"
+ recompose "^0.26.0"
+ simple-assign "^0.1.0"
+ warning "^3.0.0"
+
+math-expression-evaluator@^1.2.14:
+ version "1.2.17"
+ resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
+
+md5.js@^1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+
+mem@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
+ dependencies:
+ mimic-fn "^1.0.0"
+
+memory-fs@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
+
+memory-fs@^0.4.0, memory-fs@~0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memory-fs@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20"
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+merge-defaults@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/merge-defaults/-/merge-defaults-0.2.1.tgz#dd42248eb96bb6a51521724321c72ff9583dde80"
+ dependencies:
+ lodash "~2.4.1"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+
+methmeth@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/methmeth/-/methmeth-1.1.0.tgz#e80a26618e52f5c4222861bb748510bd10e29089"
+
+methods@^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:
+ 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"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+"mime-db@>= 1.30.0 < 2":
+ version "1.32.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.32.0.tgz#485b3848b01a3cda5f968b4882c0771e58e09414"
+
+"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0:
+ version "1.33.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
+
+mime-db@~1.30.0:
+ version "1.30.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
+
+mime-types@^2.0.8:
+ version "2.1.18"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
+ dependencies:
+ mime-db "~1.33.0"
+
+mime-types@^2.1.10, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7:
+ version "2.1.17"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
+ dependencies:
+ mime-db "~1.30.0"
+
+mime@1.3.x:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0"
+
+mime@1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
+
+mime@^1.3.4, mime@^1.4.1, mime@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+
+mime@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b"
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+
+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"
+
+minimalistic-assert@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2:
+ 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.3, 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"
+
+mixin-object@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
+ dependencies:
+ for-in "^0.1.3"
+ is-extendable "^0.1.1"
+
+mkdirp@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12"
+ dependencies:
+ minimist "0.0.8"
+
+mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, 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"
+
+modelo@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/modelo/-/modelo-4.2.3.tgz#b278588a4db87fc1e5107ae3a277c0876f38d894"
+
+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"
+
+ms@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+
+mute-stream@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
+
+nan@^2.0.0, nan@^2.3.0, nan@^2.3.2:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+
+natural@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/natural/-/natural-0.2.1.tgz#1eb5156a9d90b4591949e20e94ebc77bb2339eda"
+ dependencies:
+ apparatus ">= 0.0.9"
+ sylvester ">= 0.0.12"
+ underscore ">=1.3.1"
+
+ncname@1.0.x:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c"
+ dependencies:
+ xml-char-classes "^1.0.0"
+
+negotiator@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+
+nib@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/nib/-/nib-1.1.2.tgz#6a69ede4081b95c0def8be024a4c8ae0c2cbb6c7"
+ dependencies:
+ stylus "0.54.5"
+
+no-case@^2.2.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
+ dependencies:
+ lower-case "^1.1.1"
+
+node-fetch@^1.0.1:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+ dependencies:
+ encoding "^0.1.11"
+ is-stream "^1.0.1"
+
+node-forge@0.7.1, node-forge@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300"
+
+node-gyp@^3.3.1:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60"
+ dependencies:
+ fstream "^1.0.0"
+ glob "^7.0.3"
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ mkdirp "^0.5.0"
+ nopt "2 || 3"
+ npmlog "0 || 1 || 2 || 3 || 4"
+ osenv "0"
+ request "2"
+ rimraf "2"
+ semver "~5.3.0"
+ tar "^2.0.0"
+ which "1"
+
+node-libs-browser@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b"
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.1.4"
+ buffer "^4.9.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "3.3.0"
+ domain-browser "^1.1.1"
+ events "^1.0.0"
+ https-browserify "0.0.1"
+ os-browserify "^0.2.0"
+ path-browserify "0.0.0"
+ process "^0.11.0"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.0.5"
+ stream-browserify "^2.0.1"
+ stream-http "^2.3.1"
+ string_decoder "^0.10.25"
+ timers-browserify "^2.0.2"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.10.3"
+ vm-browserify "0.0.4"
+
+node-libs-browser@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df"
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^1.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.0"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.10.3"
+ vm-browserify "0.0.4"
+
+node-pre-gyp@^0.6.39:
+ version "0.6.39"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
+ dependencies:
+ detect-libc "^1.0.2"
+ hawk "3.1.3"
+ mkdirp "^0.5.1"
+ nopt "^4.0.1"
+ npmlog "^4.0.2"
+ rc "^1.1.7"
+ request "2.81.0"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^2.2.1"
+ tar-pack "^3.4.0"
+
+node-redis-scripty@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/node-redis-scripty/-/node-redis-scripty-0.0.5.tgz#4bf2d365ab6dab202cc08b7ac63f8f55aadc9625"
+ dependencies:
+ extend "^1.2.1"
+ lru-cache "^2.5.0"
+
+node-redis-warlock@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/node-redis-warlock/-/node-redis-warlock-0.2.0.tgz#56395b994c828e8e32f6aae53b93b6edfcd97990"
+ dependencies:
+ node-redis-scripty "0.0.5"
+ uuid "^2.0.1"
+
+node-rest-client@^1.5.1:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/node-rest-client/-/node-rest-client-1.8.0.tgz#8d3c566b817e27394cb7273783a41caefe3e5955"
+ dependencies:
+ debug "~2.2.0"
+ xml2js ">=0.2.4"
+
+node-sass@^4.5.3:
+ version "4.7.2"
+ resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.7.2.tgz#9366778ba1469eb01438a9e8592f4262bcb6794e"
+ dependencies:
+ async-foreach "^0.1.3"
+ chalk "^1.1.1"
+ cross-spawn "^3.0.0"
+ gaze "^1.0.0"
+ get-stdin "^4.0.1"
+ glob "^7.0.3"
+ in-publish "^2.0.0"
+ lodash.assign "^4.2.0"
+ lodash.clonedeep "^4.3.2"
+ lodash.mergewith "^4.6.0"
+ meow "^3.7.0"
+ mkdirp "^0.5.1"
+ nan "^2.3.2"
+ node-gyp "^3.3.1"
+ npmlog "^4.0.0"
+ request "~2.79.0"
+ sass-graph "^2.2.4"
+ stdout-stream "^1.4.0"
+ "true-case-path" "^1.0.2"
+
+"nopt@2 || 3":
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ dependencies:
+ abbrev "1"
+
+nopt@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ 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"
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+
+normalize-url@^1.4.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+ dependencies:
+ object-assign "^4.0.1"
+ prepend-http "^1.0.0"
+ query-string "^4.1.0"
+ sort-keys "^1.0.0"
+
+normalize.css@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-7.0.0.tgz#abfb1dd82470674e0322b53ceb1aaf412938e4bf"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ dependencies:
+ path-key "^2.0.0"
+
+"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+nth-check@~1.0.0, 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"
+
+num2fraction@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+
+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.3"
+ resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c"
+
+oauth-sign@~0.8.1, oauth-sign@~0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+
+object-assign@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+
+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-keys@^1.0.0, object-keys@^1.0.8:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ dependencies:
+ ee-first "1.1.1"
+
+on-headers@~1.0.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.3.1, once@^1.3.3, 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"
+
+optimist@~0.6.0:
+ 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"
+
+optjs@~3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee"
+
+os-browserify@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+
+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-locale@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
+ dependencies:
+ execa "^0.7.0"
+ lcid "^1.0.0"
+ mem "^1.1.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"
+
+osenv@0, osenv@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+
+p-limit@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
+ dependencies:
+ p-try "^1.0.0"
+
+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-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+
+pako@~1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
+
+param-case@2.1.x:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+ dependencies:
+ no-case "^2.2.0"
+
+parse-asn1@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+
+parse-bmfont-ascii@^1.0.3:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285"
+
+parse-bmfont-binary@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006"
+
+parse-bmfont-xml@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.3.tgz#d6b66a371afd39c5007d9f0eeb262a4f2cce7b7c"
+ dependencies:
+ xml-parse-from-string "^1.0.0"
+ xml2js "^0.4.5"
+
+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-headers@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.1.tgz#6ae83a7aa25a9d9b700acc28698cd1f1ed7e9536"
+ dependencies:
+ for-each "^0.3.2"
+ trim "0.0.1"
+
+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"
+
+parse-png@^1.0.0, parse-png@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/parse-png/-/parse-png-1.1.2.tgz#f5c2ad7c7993490986020a284c19aee459711ff2"
+ dependencies:
+ pngjs "^3.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.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
+
+path-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+
+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-key@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+
+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@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+
+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"
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ dependencies:
+ pify "^2.0.0"
+
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ dependencies:
+ pify "^3.0.0"
+
+pbkdf2-compat@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288"
+
+pbkdf2@^3.0.3:
+ version "3.0.14"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+
+performance-now@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+
+phantomjs-prebuilt@^2.1.10:
+ version "2.1.16"
+ resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz#efd212a4a3966d3647684ea8ba788549be2aefef"
+ dependencies:
+ es6-promise "^4.0.3"
+ extract-zip "^1.6.5"
+ fs-extra "^1.0.0"
+ hasha "^2.2.0"
+ kew "^0.7.0"
+ progress "^1.1.8"
+ request "^2.81.0"
+ request-progress "^2.0.1"
+ which "^1.2.10"
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+
+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"
+
+pixelmatch@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
+ dependencies:
+ pngjs "^3.0.0"
+
+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-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ dependencies:
+ find-up "^2.1.0"
+
+pluralize@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+
+pn@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
+
+pngjs@^3.0.0, pngjs@^3.2.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.3.1.tgz#8e14e6679ee7424b544334c3b2d21cea6d8c209a"
+
+postcss-calc@^5.2.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
+ dependencies:
+ postcss "^5.0.2"
+ postcss-message-helpers "^2.0.0"
+ reduce-css-calc "^1.2.6"
+
+postcss-colormin@^2.1.8:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
+ dependencies:
+ colormin "^1.0.5"
+ postcss "^5.0.13"
+ postcss-value-parser "^3.2.3"
+
+postcss-convert-values@^2.3.4:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
+ dependencies:
+ postcss "^5.0.11"
+ postcss-value-parser "^3.1.2"
+
+postcss-discard-comments@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
+ dependencies:
+ postcss "^5.0.14"
+
+postcss-discard-duplicates@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
+ dependencies:
+ postcss "^5.0.4"
+
+postcss-discard-empty@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
+ dependencies:
+ postcss "^5.0.14"
+
+postcss-discard-overridden@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
+ dependencies:
+ postcss "^5.0.16"
+
+postcss-discard-unused@^2.2.1:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
+ dependencies:
+ postcss "^5.0.14"
+ uniqs "^2.0.0"
+
+postcss-filter-plugins@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
+ dependencies:
+ postcss "^5.0.4"
+ uniqid "^4.0.0"
+
+postcss-merge-idents@^2.1.5:
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
+ dependencies:
+ has "^1.0.1"
+ postcss "^5.0.10"
+ postcss-value-parser "^3.1.1"
+
+postcss-merge-longhand@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
+ dependencies:
+ postcss "^5.0.4"
+
+postcss-merge-rules@^2.0.3:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
+ dependencies:
+ browserslist "^1.5.2"
+ caniuse-api "^1.5.2"
+ postcss "^5.0.4"
+ postcss-selector-parser "^2.2.2"
+ vendors "^1.0.0"
+
+postcss-message-helpers@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
+
+postcss-minify-font-values@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
+ dependencies:
+ object-assign "^4.0.1"
+ postcss "^5.0.4"
+ postcss-value-parser "^3.0.2"
+
+postcss-minify-gradients@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
+ dependencies:
+ postcss "^5.0.12"
+ postcss-value-parser "^3.3.0"
+
+postcss-minify-params@^1.0.4:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
+ dependencies:
+ alphanum-sort "^1.0.1"
+ postcss "^5.0.2"
+ postcss-value-parser "^3.0.2"
+ uniqs "^2.0.0"
+
+postcss-minify-selectors@^2.0.4:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
+ dependencies:
+ alphanum-sort "^1.0.2"
+ has "^1.0.1"
+ postcss "^5.0.14"
+ postcss-selector-parser "^2.0.0"
+
+postcss-modules-extract-imports@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85"
+ dependencies:
+ postcss "^6.0.1"
+
+postcss-modules-local-by-default@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ postcss "^6.0.1"
+
+postcss-modules-scope@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ postcss "^6.0.1"
+
+postcss-modules-values@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
+ dependencies:
+ icss-replace-symbols "^1.1.0"
+ postcss "^6.0.1"
+
+postcss-normalize-charset@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
+ dependencies:
+ postcss "^5.0.5"
+
+postcss-normalize-url@^3.0.7:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
+ dependencies:
+ is-absolute-url "^2.0.0"
+ normalize-url "^1.4.0"
+ postcss "^5.0.14"
+ postcss-value-parser "^3.2.3"
+
+postcss-ordered-values@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
+ dependencies:
+ postcss "^5.0.4"
+ postcss-value-parser "^3.0.1"
+
+postcss-reduce-idents@^2.2.2:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
+ dependencies:
+ postcss "^5.0.4"
+ postcss-value-parser "^3.0.2"
+
+postcss-reduce-initial@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
+ dependencies:
+ postcss "^5.0.4"
+
+postcss-reduce-transforms@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
+ dependencies:
+ has "^1.0.1"
+ postcss "^5.0.8"
+ postcss-value-parser "^3.0.1"
+
+postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
+ dependencies:
+ flatten "^1.0.2"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-svgo@^2.1.1:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
+ dependencies:
+ is-svg "^2.0.0"
+ postcss "^5.0.14"
+ postcss-value-parser "^3.2.3"
+ svgo "^0.7.0"
+
+postcss-unique-selectors@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
+ dependencies:
+ alphanum-sort "^1.0.1"
+ postcss "^5.0.4"
+ uniqs "^2.0.0"
+
+postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
+
+postcss-zindex@^2.0.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
+ dependencies:
+ has "^1.0.1"
+ postcss "^5.0.4"
+ uniqs "^2.0.0"
+
+postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16:
+ version "5.2.18"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
+ dependencies:
+ chalk "^1.1.3"
+ js-base64 "^2.1.9"
+ source-map "^0.5.6"
+ supports-color "^3.2.3"
+
+postcss@^6.0.1:
+ version "6.0.17"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.17.tgz#e259a051ca513f81e9afd0c21f7f82eda50c65c5"
+ dependencies:
+ chalk "^2.3.0"
+ source-map "^0.6.1"
+ supports-color "^5.1.0"
+
+power-assert-context-formatter@^1.0.7:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/power-assert-context-formatter/-/power-assert-context-formatter-1.1.1.tgz#edba352d3ed8a603114d667265acce60d689ccdf"
+ dependencies:
+ core-js "^2.0.0"
+ power-assert-context-traversal "^1.1.1"
+
+power-assert-context-reducer-ast@^1.0.7:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.1.2.tgz#484a99e26f4973ff8832e5c5cc756702e6094174"
+ dependencies:
+ acorn "^4.0.0"
+ acorn-es7-plugin "^1.0.12"
+ core-js "^2.0.0"
+ espurify "^1.6.0"
+ estraverse "^4.2.0"
+
+power-assert-context-traversal@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/power-assert-context-traversal/-/power-assert-context-traversal-1.1.1.tgz#88cabca0d13b6359f07d3d3e8afa699264577ed9"
+ dependencies:
+ core-js "^2.0.0"
+ estraverse "^4.1.0"
+
+power-assert-formatter@^1.3.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz#5dc125ed50a3dfb1dda26c19347f3bf58ec2884a"
+ dependencies:
+ core-js "^2.0.0"
+ power-assert-context-formatter "^1.0.7"
+ power-assert-context-reducer-ast "^1.0.7"
+ power-assert-renderer-assertion "^1.0.7"
+ power-assert-renderer-comparison "^1.0.7"
+ power-assert-renderer-diagram "^1.0.7"
+ power-assert-renderer-file "^1.0.7"
+
+power-assert-renderer-assertion@^1.0.7:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.1.1.tgz#cbfc0e77e0086a8f96af3f1d8e67b9ee7e28ce98"
+ dependencies:
+ power-assert-renderer-base "^1.1.1"
+ power-assert-util-string-width "^1.1.1"
+
+power-assert-renderer-base@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz#96a650c6fd05ee1bc1f66b54ad61442c8b3f63eb"
+
+power-assert-renderer-comparison@^1.0.7:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.1.1.tgz#d7439d97d85156be4e30a00f2fb5a72514ce3c08"
+ dependencies:
+ core-js "^2.0.0"
+ diff-match-patch "^1.0.0"
+ power-assert-renderer-base "^1.1.1"
+ stringifier "^1.3.0"
+ type-name "^2.0.1"
+
+power-assert-renderer-diagram@^1.0.7:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.1.2.tgz#655f8f711935a9b6d541b86327654717c637a986"
+ dependencies:
+ core-js "^2.0.0"
+ power-assert-renderer-base "^1.1.1"
+ power-assert-util-string-width "^1.1.1"
+ stringifier "^1.3.0"
+
+power-assert-renderer-file@^1.0.7:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/power-assert-renderer-file/-/power-assert-renderer-file-1.1.1.tgz#a37e2bbd178ccacd04e78dbb79c92fe34933c5e7"
+ dependencies:
+ power-assert-renderer-base "^1.1.1"
+
+power-assert-util-string-width@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/power-assert-util-string-width/-/power-assert-util-string-width-1.1.1.tgz#be659eb7937fdd2e6c9a77268daaf64bd5b7c592"
+ dependencies:
+ eastasianwidth "^0.1.1"
+
+power-assert@^1.4.4:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/power-assert/-/power-assert-1.4.4.tgz#9295ea7437196f5a601fde420f042631186d7517"
+ dependencies:
+ define-properties "^1.1.2"
+ empower "^1.2.3"
+ power-assert-formatter "^1.3.1"
+ universal-deep-strict-equal "^1.2.1"
+ xtend "^4.0.0"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+
+prepend-http@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+
+prettier@^1.10.2, prettier@^1.5.3:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.10.2.tgz#1af8356d1842276a99a5b5529c82dd9e9ad3cc93"
+
+pretty-error@^2.0.2:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
+ dependencies:
+ renderkid "^2.0.1"
+ utila "~0.4"
+
+private@^0.1.6, private@^0.1.7:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+
+process-nextick-args@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+
+process@^0.11.0, process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+
+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-polyfill@^6.0.2:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057"
+
+promise@^7.0.1, 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.8:
+ version "15.5.8"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394"
+ dependencies:
+ fbjs "^0.8.9"
+
+prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0:
+ version "15.6.0"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
+ dependencies:
+ fbjs "^0.8.16"
+ loose-envify "^1.3.1"
+ object-assign "^4.1.1"
+
+protobufjs@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-5.0.2.tgz#59748d7dcf03d2db22c13da9feb024e16ab80c91"
+ dependencies:
+ ascli "~1"
+ bytebuffer "~5"
+ glob "^7.0.5"
+ yargs "^3.10.0"
+
+protobufjs@^6.8.0:
+ version "6.8.5"
+ resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.5.tgz#ca064d0b1b52327b3ff9e3bb74de3624e08e5fe2"
+ dependencies:
+ "@protobufjs/aspromise" "^1.1.2"
+ "@protobufjs/base64" "^1.1.2"
+ "@protobufjs/codegen" "^2.0.4"
+ "@protobufjs/eventemitter" "^1.1.0"
+ "@protobufjs/fetch" "^1.1.0"
+ "@protobufjs/float" "^1.0.2"
+ "@protobufjs/inquire" "^1.1.0"
+ "@protobufjs/path" "^1.1.2"
+ "@protobufjs/pool" "^1.1.0"
+ "@protobufjs/utf8" "^1.1.0"
+ "@types/long" "^3.0.32"
+ "@types/node" "^8.9.4"
+ long "^4.0.0"
+
+proxy-addr@~2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec"
+ dependencies:
+ forwarded "~0.1.2"
+ ipaddr.js "1.5.2"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+
+public-encrypt@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+
+pug-attrs@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.2.tgz#8be2b2225568ffa75d1b866982bff9f4111affcb"
+ dependencies:
+ constantinople "^3.0.1"
+ js-stringify "^1.0.1"
+ pug-runtime "^2.0.3"
+
+pug-code-gen@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-2.0.0.tgz#96aea39a9e62f1ec5d2b6a5b42a29d528c70b43d"
+ dependencies:
+ constantinople "^3.0.1"
+ doctypes "^1.1.0"
+ js-stringify "^1.0.1"
+ pug-attrs "^2.0.2"
+ pug-error "^1.3.2"
+ pug-runtime "^2.0.3"
+ void-elements "^2.0.1"
+ with "^5.0.0"
+
+pug-error@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-1.3.2.tgz#53ae7d9d29bb03cf564493a026109f54c47f5f26"
+
+pug-filters@^2.1.5:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-2.1.5.tgz#66bf6e80d97fbef829bab0aa35eddff33fc964f3"
+ dependencies:
+ clean-css "^3.3.0"
+ constantinople "^3.0.1"
+ jstransformer "1.0.0"
+ pug-error "^1.3.2"
+ pug-walk "^1.1.5"
+ resolve "^1.1.6"
+ uglify-js "^2.6.1"
+
+pug-lexer@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-3.1.0.tgz#fd087376d4a675b4f59f8fef422883434e9581a2"
+ dependencies:
+ character-parser "^2.1.1"
+ is-expression "^3.0.0"
+ pug-error "^1.3.2"
+
+pug-linker@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-3.0.3.tgz#25f59eb750237f0368e59c3379764229c0189c41"
+ dependencies:
+ pug-error "^1.3.2"
+ pug-walk "^1.1.5"
+
+pug-load@^2.0.9:
+ version "2.0.9"
+ resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-2.0.9.tgz#ee217c914cc1d9324d44b86c32d1df241d36de7a"
+ dependencies:
+ object-assign "^4.1.0"
+ pug-walk "^1.1.5"
+
+pug-parser@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-4.0.0.tgz#c9f52322e4eabe4bf5beeba64ed18373bb627801"
+ dependencies:
+ pug-error "^1.3.2"
+ token-stream "0.0.1"
+
+pug-runtime@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-2.0.3.tgz#98162607b0fce9e254d427f33987a5aee7168bda"
+
+pug-strip-comments@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-1.0.2.tgz#d313afa01bcc374980e1399e23ebf2eb9bdc8513"
+ dependencies:
+ pug-error "^1.3.2"
+
+pug-walk@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-1.1.5.tgz#90e943acbcf7021e6454cf1b32245891cba6f851"
+
+pug@^2.0.0-beta3:
+ version "2.0.0-rc.4"
+ resolved "https://registry.yarnpkg.com/pug/-/pug-2.0.0-rc.4.tgz#b7b08f6599bd5302568042b7436984fb28c80a13"
+ dependencies:
+ pug-code-gen "^2.0.0"
+ pug-filters "^2.1.5"
+ pug-lexer "^3.1.0"
+ pug-linker "^3.0.3"
+ pug-load "^2.0.9"
+ pug-parser "^4.0.0"
+ pug-runtime "^2.0.3"
+ pug-strip-comments "^1.0.2"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb"
+ dependencies:
+ duplexify "^3.5.3"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
+q@^1.1.2:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+
+qs@6.5.1, qs@^6.1.0, qs@~6.5.1:
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
+
+qs@~6.3.0:
+ version "6.3.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c"
+
+qs@~6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
+
+query-string@^4.1.0, query-string@^4.2.2:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+ dependencies:
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+
+querystring@0.2.0, querystring@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+
+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"
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62"
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+range-parser@^1.0.3, range-parser@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+
+raw-body@2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
+ dependencies:
+ bytes "3.0.0"
+ http-errors "1.6.2"
+ iconv-lite "0.4.19"
+ unpipe "1.0.0"
+
+rc@^1.1.7:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd"
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-dom@^15.5.4:
+ version "15.6.2"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730"
+ dependencies:
+ fbjs "^0.8.9"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.0"
+ prop-types "^15.5.10"
+
+react-event-listener@^0.5.1:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.5.3.tgz#a8b492596ad601865314fcc2c18cb87b6ce3876e"
+ dependencies:
+ babel-runtime "^6.26.0"
+ fbjs "^0.8.16"
+ prop-types "^15.6.0"
+ warning "^3.0.0"
+
+react-google-button@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/react-google-button/-/react-google-button-0.3.0.tgz#84fc471d01be9b4a06bda3429c18cca4934079e1"
+ dependencies:
+ prop-types "^15.5.8"
+
+react-notification-system-redux@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/react-notification-system-redux/-/react-notification-system-redux-1.2.0.tgz#14fb0915c72e4c12d9983ffe07254e2cd19ec5df"
+ dependencies:
+ prop-types "^15.6.0"
+ react-notification-system "^0.2.x"
+
+react-notification-system@^0.2.17, react-notification-system@^0.2.x:
+ version "0.2.17"
+ resolved "https://registry.yarnpkg.com/react-notification-system/-/react-notification-system-0.2.17.tgz#a60eddbb62225ad8f9fc5d7837546bf6cdb36818"
+ dependencies:
+ create-react-class "^15.5.1"
+ object-assign "^4.0.1"
+ prop-types "^15.5.6"
+
+react-redux-firebase@next:
+ version "2.0.0-rc.2"
+ resolved "https://registry.yarnpkg.com/react-redux-firebase/-/react-redux-firebase-2.0.0-rc.2.tgz#b468e966fd150008116a5c2524a1bd5e3377a92e"
+ dependencies:
+ hoist-non-react-statics "^2.3.1"
+ lodash "^4.17.4"
+ prop-types "^15.6.0"
+
+react-redux@^5.0.4:
+ 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-router-redux@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/react-router-redux/-/react-router-redux-4.0.8.tgz#227403596b5151e182377dab835b5d45f0f8054e"
+
+react-router@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.2.0.tgz#62b6279d589b70b34e265113e4c0a9261a02ed36"
+ dependencies:
+ create-react-class "^15.5.1"
+ history "^3.0.0"
+ hoist-non-react-statics "^1.2.0"
+ invariant "^2.2.1"
+ loose-envify "^1.2.0"
+ prop-types "^15.5.6"
+ warning "^3.0.0"
+
+react-tap-event-plugin@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/react-tap-event-plugin/-/react-tap-event-plugin-2.0.1.tgz#316beb3bc6556e29ec869a7293e89c826a9074d2"
+ dependencies:
+ fbjs "^0.8.6"
+
+react-transition-group@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6"
+ dependencies:
+ chain-function "^1.0.0"
+ dom-helpers "^3.2.0"
+ loose-envify "^1.3.1"
+ prop-types "^15.5.6"
+ warning "^3.0.0"
+
+react@^15.5.4:
+ version "15.6.2"
+ resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72"
+ dependencies:
+ create-react-class "^15.6.0"
+ fbjs "^0.8.9"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.0"
+ prop-types "^15.5.10"
+
+read-chunk@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-1.0.1.tgz#5f68cab307e663f19993527d9b589cace4661194"
+
+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-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg@^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"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+readable-stream@1.0, readable-stream@~1.0.32:
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@1.1:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.0.3"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+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"
+
+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"
+
+recompose@^0.26.0:
+ version "0.26.0"
+ resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.26.0.tgz#9babff039cb72ba5bd17366d55d7232fbdfb2d30"
+ dependencies:
+ change-emitter "^0.1.2"
+ fbjs "^0.8.1"
+ hoist-non-react-statics "^2.3.1"
+ symbol-observable "^1.0.4"
+
+redbox-react@^1.3.6:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.5.0.tgz#04dab11557d26651bf3562a67c22ace56c5d3967"
+ dependencies:
+ error-stack-parser "^1.3.6"
+ object-assign "^4.0.1"
+ prop-types "^15.5.4"
+ sourcemapped-stacktrace "^1.1.6"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+redis-commands@^1.2.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.5.tgz#4495889414f1e886261180b1442e7295602d83a2"
+
+redis-parser@^2.0.0, redis-parser@^2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b"
+
+redis@^0.12.1:
+ version "0.12.1"
+ resolved "https://registry.yarnpkg.com/redis/-/redis-0.12.1.tgz#64df76ad0fc8acebaebd2a0645e8a48fac49185e"
+
+redis@^2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02"
+ dependencies:
+ double-ended-queue "^2.1.0-0"
+ redis-commands "^1.2.0"
+ redis-parser "^2.6.0"
+
+redis@~2.6.0-2:
+ version "2.6.5"
+ resolved "https://registry.yarnpkg.com/redis/-/redis-2.6.5.tgz#87c1eff4a489f94b70871f3d08b6988f23a95687"
+ dependencies:
+ double-ended-queue "^2.1.0-0"
+ redis-commands "^1.2.0"
+ redis-parser "^2.0.0"
+
+reds@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/reds/-/reds-0.2.5.tgz#38a767f7663cd749036848697d82c74fd29bc01f"
+ dependencies:
+ natural "^0.2.0"
+ redis "^0.12.1"
+
+reduce-css-calc@^1.2.6:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
+ dependencies:
+ balanced-match "^0.4.2"
+ math-expression-evaluator "^1.2.14"
+ reduce-function-call "^1.0.1"
+
+reduce-function-call@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
+ dependencies:
+ balanced-match "^0.4.2"
+
+redux-auth-wrapper@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/redux-auth-wrapper/-/redux-auth-wrapper-1.1.0.tgz#ccd4a753fe2134eb93c44f4e5781054577f6244a"
+ dependencies:
+ hoist-non-react-statics "1.2.0"
+ lodash.isempty "4.4.0"
+ prop-types "15.5.8"
+
+redux-cookies@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/redux-cookies/-/redux-cookies-1.0.1.tgz#06b44fca09c4171f28c083e4314ce213ff3e7b04"
+
+redux-form-material-ui@^4.2.0:
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/redux-form-material-ui/-/redux-form-material-ui-4.3.3.tgz#58c5a162311ad6fed4b4709cd4a2b14ce269b1e3"
+
+redux-form@^6.6.1:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-6.8.0.tgz#ff1b590b59f987d7e3ff080d752f7120bfe42af3"
+ dependencies:
+ deep-equal "^1.0.1"
+ es6-error "^4.0.0"
+ hoist-non-react-statics "^1.2.0"
+ invariant "^2.2.2"
+ is-promise "^2.1.0"
+ lodash "^4.17.3"
+ lodash-es "^4.17.3"
+ prop-types "^15.5.9"
+
+redux-logger@^3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.6.tgz#f7555966f3098f3c88604c449cf0baf5778274bf"
+ dependencies:
+ deep-diff "^0.3.5"
+
+redux-thunk@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5"
+
+redux@^3.6.0:
+ 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"
+
+regenerate@^1.2.1:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
+
+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.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+
+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.4"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+ dependencies:
+ is-equal-shallow "^0.1.3"
+
+regexpu-core@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
+ dependencies:
+ regenerate "^1.2.1"
+ regjsgen "^0.2.0"
+ regjsparser "^0.1.4"
+
+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"
+
+relateurl@0.2.x:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+
+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"
+
+renderkid@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319"
+ dependencies:
+ css-select "^1.1.0"
+ dom-converter "~0.1"
+ htmlparser2 "~3.3.0"
+ strip-ansi "^3.0.0"
+ utila "~0.3"
+
+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-progress@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08"
+ dependencies:
+ throttleit "^1.0.0"
+
+request@2, request@^2.65.0, request@^2.72.0, request@^2.79.0, request@^2.81.0, request@^2.83.0:
+ version "2.83.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.6.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.1"
+ forever-agent "~0.6.1"
+ form-data "~2.3.1"
+ har-validator "~5.0.3"
+ hawk "~6.0.2"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.17"
+ oauth-sign "~0.8.2"
+ performance-now "^2.1.0"
+ qs "~6.5.1"
+ safe-buffer "^5.1.1"
+ stringstream "~0.0.5"
+ tough-cookie "~2.3.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.1.0"
+
+request@2.81.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"
+
+request@~2.79.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~2.0.6"
+ 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"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+ 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-package-name@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9"
+
+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"
+
+resize-img@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/resize-img/-/resize-img-1.1.2.tgz#fad650faf3ef2c53ea63112bc272d95e9d92550e"
+ dependencies:
+ bmp-js "0.0.1"
+ file-type "^3.8.0"
+ get-stream "^2.0.0"
+ jimp "^0.2.21"
+ jpeg-js "^0.1.1"
+ parse-png "^1.1.1"
+
+resolve-from@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+
+resolve-pathname@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879"
+
+resolve@^1.1.6, resolve@^1.1.7, resolve@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
+ dependencies:
+ path-parse "^1.0.5"
+
+restore-cursor@^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"
+
+retry-request@^3.0.0, retry-request@^3.1.0, retry-request@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-3.3.1.tgz#fb71276235a617e97551e9be737ab5b91591fb9e"
+ dependencies:
+ request "^2.81.0"
+ through2 "^2.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, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+ dependencies:
+ glob "^7.0.5"
+
+ripemd160@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
+ dependencies:
+ hash-base "^2.0.0"
+ inherits "^2.0.1"
+
+rsvp@^3.2.1:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a"
+
+run-async@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
+ dependencies:
+ once "^1.3.0"
+
+rx-lite@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
+
+safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.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"
+
+sass-graph@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
+ dependencies:
+ glob "^7.0.0"
+ lodash "^4.0.0"
+ scss-tokenizer "^0.2.3"
+ yargs "^7.0.0"
+
+sass-loader@^6.0.5:
+ version "6.0.6"
+ resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.6.tgz#e9d5e6c1f155faa32a4b26d7a9b7107c225e40f9"
+ dependencies:
+ async "^2.1.5"
+ clone-deep "^0.3.0"
+ loader-utils "^1.0.1"
+ lodash.tail "^4.1.1"
+ pify "^3.0.0"
+
+sax@0.5.x:
+ version "0.5.8"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1"
+
+sax@>=0.6.0, sax@^1.2.1, sax@~1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+
+schema-utils@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf"
+ dependencies:
+ ajv "^5.0.0"
+
+scss-tokenizer@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
+ dependencies:
+ js-base64 "^2.1.8"
+ source-map "^0.4.2"
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
+
+semver@5.3.0, semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+
+send@0.16.1:
+ version "0.16.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3"
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.1"
+ destroy "~1.0.4"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.6.2"
+ mime "1.4.1"
+ ms "2.0.0"
+ on-finished "~2.3.0"
+ range-parser "~1.2.0"
+ statuses "~1.3.1"
+
+send@0.16.2:
+ version "0.16.2"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.2"
+ destroy "~1.0.4"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.6.2"
+ mime "1.4.1"
+ ms "2.0.0"
+ on-finished "~2.3.0"
+ range-parser "~1.2.0"
+ statuses "~1.4.0"
+
+serve-static@1.13.1:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719"
+ dependencies:
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ parseurl "~1.3.2"
+ send "0.16.1"
+
+serve-static@^1.11.2:
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.2"
+ send "0.16.2"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+
+set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+
+setimmediate@^1.0.4, setimmediate@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+
+setprototypeof@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+
+sha.js@2.2.6:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.10"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b"
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shallow-clone@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060"
+ dependencies:
+ is-extendable "^0.1.1"
+ kind-of "^2.0.1"
+ lazy-cache "^0.2.3"
+ mixin-object "^2.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+
+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"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+
+simple-assign@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/simple-assign/-/simple-assign-0.1.0.tgz#17fd3066a5f3d7738f50321bb0f14ca281cc4baa"
+
+simple-html-tokenizer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz#05c2eec579ffffe145a030ac26cfea61b980fabe"
+
+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"
+
+snakeize@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/snakeize/-/snakeize-0.1.0.tgz#10c088d8b58eb076b3229bb5a04e232ce126422d"
+
+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"
+
+sntp@2.x.x:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
+ dependencies:
+ hoek "4.x.x"
+
+socket.io-adapter@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b"
+ dependencies:
+ debug "2.3.3"
+ socket.io-parser "2.3.1"
+
+socket.io-client@1.7.4, socket.io-client@^1.4.8:
+ 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"
+
+socket.io@^1.4.8:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.4.tgz#2f7ecedc3391bf2d5c73e291fe233e6e34d4dd00"
+ dependencies:
+ debug "2.3.3"
+ engine.io "~1.8.4"
+ has-binary "0.1.7"
+ object-assign "4.1.0"
+ socket.io-adapter "0.5.0"
+ socket.io-client "1.7.4"
+ socket.io-parser "2.3.1"
+
+sort-keys@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+source-list-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
+
+source-list-map@~0.1.7:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
+
+source-map-support@^0.4.15:
+ version "0.4.18"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
+ dependencies:
+ source-map "^0.5.6"
+
+source-map@0.1.x:
+ version "0.1.43"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@0.4.x, source-map@^0.4.2, source-map@~0.4.1:
+ 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.6:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+
+source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+
+source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+
+sourcemapped-stacktrace@^1.1.6:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.8.tgz#6b7a3f1a6fb15f6d40e701e23ce404553480d688"
+ dependencies:
+ source-map "0.5.6"
+
+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"
+
+split-array-stream@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/split-array-stream/-/split-array-stream-1.0.3.tgz#d2b75a8e5e0d824d52fdec8b8225839dc2e35dfa"
+ dependencies:
+ async "^2.4.0"
+ is-stream-ended "^0.1.0"
+
+spotify-web-api-js@^0.23.0:
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/spotify-web-api-js/-/spotify-web-api-js-0.23.0.tgz#7701fbe365bbec56505dfa46c16604f7e4d36408"
+
+spotify-web-api-node@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/spotify-web-api-node/-/spotify-web-api-node-2.5.0.tgz#b4982deeb235ede38d9cff9389ab24ed45ff19c1"
+ dependencies:
+ superagent "^2.0.0"
+
+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"
+
+stack-trace@0.0.x:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
+
+stackframe@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4"
+
+"statuses@>= 1.3.1 < 2", statuses@~1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
+
+statuses@~1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
+
+stdout-stream@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b"
+ dependencies:
+ readable-stream "^2.0.1"
+
+stream-browserify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-events@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.2.tgz#abf39f66c0890a4eb795bc8d5e859b2615b590b2"
+ dependencies:
+ stubs "^3.0.0"
+
+stream-http@^2.3.1, stream-http@^2.7.2:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10"
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.3"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+
+stream-to-buffer@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz#26799d903ab2025c9bd550ac47171b00f8dd80a9"
+ dependencies:
+ stream-to "~0.2.0"
+
+stream-to@~0.2.0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/stream-to/-/stream-to-0.2.2.tgz#84306098d85fdb990b9fa300b1b3ccf55e8ef01d"
+
+strict-uri-encode@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+
+string-format-obj@^1.0.0, string-format-obj@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string-format-obj/-/string-format-obj-1.1.1.tgz#c7612ca4e2ad923812a81db192dc291850aa1f65"
+
+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.25, string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+string_decoder@^1.0.0, 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"
+
+stringifier@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/stringifier/-/stringifier-1.3.0.tgz#def18342f6933db0f2dbfc9aa02175b448c17959"
+ dependencies:
+ core-js "^2.0.0"
+ traverse "^0.6.6"
+ type-name "^2.0.1"
+
+stringstream@~0.0.4, stringstream@~0.0.5:
+ 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@^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-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-indent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
+
+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"
+
+stubs@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b"
+
+style-loader@^0.17.0:
+ version "0.17.0"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.17.0.tgz#e8254bccdb7af74bd58274e36107b4d5ab4df310"
+ dependencies:
+ loader-utils "^1.0.2"
+
+stylus@0.54.5, stylus@~0.54.5:
+ version "0.54.5"
+ resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79"
+ dependencies:
+ css-parse "1.7.x"
+ debug "*"
+ glob "7.0.x"
+ mkdirp "0.5.x"
+ sax "0.5.x"
+ source-map "0.1.x"
+
+superagent@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/superagent/-/superagent-2.3.0.tgz#703529a0714e57e123959ddefbce193b2e50d115"
+ dependencies:
+ component-emitter "^1.2.0"
+ cookiejar "^2.0.6"
+ debug "^2.2.0"
+ extend "^3.0.0"
+ form-data "1.0.0-rc4"
+ formidable "^1.0.17"
+ methods "^1.1.1"
+ mime "^1.3.4"
+ qs "^6.1.0"
+ readable-stream "^2.0.5"
+
+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.0, supports-color@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@^5.1.0, supports-color@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.2.0.tgz#b0d5333b1184dd3666cbe5aa0b45c5ac7ac17a4a"
+ dependencies:
+ has-flag "^3.0.0"
+
+svg-inline-loader@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/svg-inline-loader/-/svg-inline-loader-0.8.0.tgz#7e9d905d80d0b4e68d2df21afcd08ee9e9a3ea6e"
+ dependencies:
+ loader-utils "^0.2.11"
+ object-assign "^4.0.1"
+ simple-html-tokenizer "^0.1.1"
+
+svg2png@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/svg2png/-/svg2png-3.0.1.tgz#a2644d68b0231ac00af431aa163714ff17106447"
+ dependencies:
+ phantomjs-prebuilt "^2.1.10"
+ pn "^1.0.0"
+ yargs "^3.31.0"
+
+svgo@^0.7.0:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
+ dependencies:
+ coa "~1.0.1"
+ colors "~1.1.2"
+ csso "~2.3.1"
+ js-yaml "~3.7.0"
+ mkdirp "~0.5.1"
+ sax "~1.2.1"
+ whet.extend "~0.9.9"
+
+"sylvester@>= 0.0.12", "sylvester@>= 0.0.8":
+ version "0.0.21"
+ resolved "https://registry.yarnpkg.com/sylvester/-/sylvester-0.0.21.tgz#2987b1ce2bd2f38b0dce2a34388884bfa4400ea7"
+
+symbol-observable@^1.0.3, symbol-observable@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+
+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"
+
+tapable@^0.1.8, tapable@~0.1.8:
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
+
+tapable@^0.2.7, tapable@~0.2.5:
+ version "0.2.8"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
+
+tar-pack@^3.4.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
+ dependencies:
+ debug "^2.2.0"
+ fstream "^1.0.10"
+ fstream-ignore "^1.0.5"
+ once "^1.3.3"
+ readable-stream "^2.1.4"
+ rimraf "^2.5.1"
+ tar "^2.2.1"
+ uid-number "^0.0.6"
+
+tar@^2.0.0, tar@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+text-table@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+
+throttleit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
+
+through2@^2.0.0, through2@^2.0.3:
+ 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@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357"
+
+timers-browserify@^2.0.2, timers-browserify@^2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae"
+ dependencies:
+ setimmediate "^1.0.4"
+
+tinycolor2@^1.1.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
+
+to-array@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+
+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"
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+
+to-ico@^1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/to-ico/-/to-ico-1.1.5.tgz#1d32da5f2c90922edee6b686d610c54527b5a8d5"
+ dependencies:
+ arrify "^1.0.1"
+ buffer-alloc "^1.1.0"
+ image-size "^0.5.0"
+ parse-png "^1.0.0"
+ resize-img "^1.1.0"
+
+token-stream@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a"
+
+toposort@^1.0.0:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec"
+
+tough-cookie@^2.3.2:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
+ dependencies:
+ punycode "^1.4.1"
+
+tough-cookie@~2.3.0, tough-cookie@~2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
+ 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"
+
+traverse@^0.6.6:
+ version "0.6.6"
+ resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+
+trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+
+trim@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
+
+"true-case-path@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz#7ec91130924766c7f573be3020c34f8fdfd00d62"
+ dependencies:
+ glob "^6.0.4"
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+
+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"
+
+tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+
+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.15:
+ 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"
+
+type-name@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
+ua-parser-js@^0.7.9:
+ version "0.7.17"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
+
+uglify-js@3.3.x:
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.10.tgz#8e47821d4cf28e14c1826a0078ba0825ed094da8"
+ dependencies:
+ commander "~2.14.1"
+ source-map "~0.6.1"
+
+uglify-js@^2.6.1, uglify-js@^2.8.27:
+ 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-js@~2.7.3:
+ version "2.7.5"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
+ dependencies:
+ async "~0.2.6"
+ source-map "~0.5.1"
+ uglify-to-browserify "~1.0.0"
+ yargs "~3.10.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+
+uid-number@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+
+ultron@1.0.x:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
+
+underscore@>=1.3.1, underscore@^1.8.3:
+ version "1.8.3"
+ resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
+
+uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+
+uniqid@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
+ dependencies:
+ macaddress "^0.2.8"
+
+uniqs@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+
+unique-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
+ dependencies:
+ crypto-random-string "^1.0.0"
+
+universal-deep-strict-equal@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz#0da4ac2f73cff7924c81fa4de018ca562ca2b0a7"
+ dependencies:
+ array-filter "^1.0.0"
+ indexof "0.0.1"
+ object-keys "^1.0.0"
+
+universalify@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+
+upper-case@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+
+url-loader@^0.5.8:
+ version "0.5.9"
+ resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.9.tgz#cc8fea82c7b906e7777019250869e569e995c295"
+ dependencies:
+ loader-utils "^1.0.2"
+ mime "1.3.x"
+
+url-regex@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-3.2.0.tgz#dbad1e0c9e29e105dd0b1f09f6862f7fdb482724"
+ dependencies:
+ ip-regex "^1.0.1"
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+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.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+
+util@0.10.3, util@^0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ dependencies:
+ inherits "2.0.1"
+
+utila@~0.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226"
+
+utila@~0.4:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+
+uuid@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
+
+uuid@^3.0.0, uuid@^3.1.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
+
+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"
+
+value-equal@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7"
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+
+vendors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
+
+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"
+
+vinyl@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884"
+ dependencies:
+ clone "^1.0.0"
+ clone-stats "^0.0.1"
+ replace-ext "0.0.1"
+
+vm-browserify@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+ dependencies:
+ indexof "0.0.1"
+
+void-elements@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
+
+warning@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
+ dependencies:
+ loose-envify "^1.0.0"
+
+watchpack@^0.2.1:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b"
+ dependencies:
+ async "^0.9.0"
+ chokidar "^1.0.0"
+ graceful-fs "^4.1.2"
+
+watchpack@^1.3.1:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac"
+ dependencies:
+ async "^2.1.2"
+ chokidar "^1.7.0"
+ graceful-fs "^4.1.2"
+
+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"
+
+webpack-core@~0.6.9:
+ version "0.6.9"
+ resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2"
+ dependencies:
+ source-list-map "~0.1.7"
+ source-map "~0.4.1"
+
+webpack-dashboard@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/webpack-dashboard/-/webpack-dashboard-0.4.0.tgz#9e1d516ee31c8c5e4436148dc3eb09efe9e0c55f"
+ dependencies:
+ blessed "^0.1.81"
+ commander "^2.9.0"
+ cross-spawn "^4.0.0"
+ filesize "^3.3.0"
+ socket.io "^1.4.8"
+ socket.io-client "^1.4.8"
+
+webpack-dev-middleware@^1.11.0:
+ version "1.12.2"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e"
+ dependencies:
+ memory-fs "~0.4.1"
+ mime "^1.5.0"
+ path-is-absolute "^1.0.0"
+ range-parser "^1.0.3"
+ time-stamp "^2.0.0"
+
+webpack-hot-middleware@^2.13.2:
+ version "2.21.0"
+ resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.21.0.tgz#7b3c113a7a4b301c91e0749573c7aab28b414b52"
+ dependencies:
+ ansi-html "0.0.7"
+ html-entities "^1.2.0"
+ querystring "^0.2.0"
+ strip-ansi "^3.0.0"
+
+webpack-sources@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@^1.13.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.15.0.tgz#4ff31f53db03339e55164a9d468ee0324968fe98"
+ dependencies:
+ acorn "^3.0.0"
+ async "^1.3.0"
+ clone "^1.0.2"
+ enhanced-resolve "~0.9.0"
+ interpret "^0.6.4"
+ loader-utils "^0.2.11"
+ memory-fs "~0.3.0"
+ mkdirp "~0.5.0"
+ node-libs-browser "^0.7.0"
+ optimist "~0.6.0"
+ supports-color "^3.1.0"
+ tapable "~0.1.8"
+ uglify-js "~2.7.3"
+ watchpack "^0.2.1"
+ webpack-core "~0.6.9"
+
+webpack@^2.5.1:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.7.0.tgz#b2a1226804373ffd3d03ea9c6bd525067034f6b1"
+ dependencies:
+ acorn "^5.0.0"
+ acorn-dynamic-import "^2.0.0"
+ ajv "^4.7.0"
+ ajv-keywords "^1.1.1"
+ async "^2.1.2"
+ enhanced-resolve "^3.3.0"
+ interpret "^1.0.0"
+ json-loader "^0.5.4"
+ json5 "^0.5.1"
+ loader-runner "^2.3.0"
+ loader-utils "^0.2.16"
+ memory-fs "~0.4.1"
+ mkdirp "~0.5.0"
+ node-libs-browser "^2.0.0"
+ source-map "^0.5.3"
+ supports-color "^3.1.0"
+ tapable "~0.2.5"
+ uglify-js "^2.8.27"
+ watchpack "^1.3.1"
+ webpack-sources "^1.0.1"
+ yargs "^6.0.0"
+
+websocket-driver@>=0.5.1:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
+ dependencies:
+ http-parser-js ">=0.4.0"
+ websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
+
+whatwg-encoding@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3"
+ dependencies:
+ iconv-lite "0.4.19"
+
+whatwg-fetch@>=0.10.0, whatwg-fetch@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
+
+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"
+
+whet.extend@~0.9.9:
+ version "0.9.9"
+ resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
+
+which-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+
+which@1, which@^1.2.10, 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"
+
+wide-align@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
+ dependencies:
+ string-width "^1.0.2"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+
+window-size@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
+
+window-size@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075"
+
+winston@^2.2.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.0.tgz#808050b93d52661ed9fb6c26b3f0c826708b0aee"
+ dependencies:
+ async "~1.0.0"
+ colors "1.0.x"
+ cycle "1.0.x"
+ eyes "0.1.x"
+ isstream "0.1.x"
+ stack-trace "0.0.x"
+
+with@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe"
+ dependencies:
+ acorn "^3.1.0"
+ acorn-globals "^3.0.0"
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+
+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@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+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.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"
+ dependencies:
+ options ">=0.0.5"
+ ultron "1.0.x"
+
+wtf-8@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a"
+
+xdg-basedir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
+
+xhr@^2.0.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.4.1.tgz#ba982cced205ae5eec387169ac9dc77ca4853d38"
+ dependencies:
+ global "~4.3.0"
+ is-function "^1.0.1"
+ parse-headers "^2.0.0"
+ xtend "^4.0.0"
+
+xml-char-classes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
+
+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"
+
+xml-parse-from-string@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28"
+
+xml2js@>=0.2.4, xml2js@^0.4.5:
+ version "0.4.19"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "~9.0.1"
+
+xmlbuilder@~9.0.1:
+ version "9.0.7"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
+
+xmlhttprequest-ssl@1.5.3:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d"
+
+xmlhttprequest@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
+
+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.0, 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@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4"
+ dependencies:
+ camelcase "^3.0.0"
+ lodash.assign "^4.0.6"
+
+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-parser@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
+ dependencies:
+ camelcase "^4.1.0"
+
+yargs@^3.10.0, yargs@^3.31.0:
+ version "3.32.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995"
+ dependencies:
+ camelcase "^2.0.1"
+ cliui "^3.0.3"
+ decamelize "^1.1.1"
+ os-locale "^1.4.0"
+ string-width "^1.0.1"
+ window-size "^0.1.4"
+ y18n "^3.2.0"
+
+yargs@^4.0.0:
+ version "4.8.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0"
+ dependencies:
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ lodash.assign "^4.0.3"
+ 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.1"
+ which-module "^1.0.0"
+ window-size "^0.2.0"
+ y18n "^3.2.1"
+ yargs-parser "^2.4.1"
+
+yargs@^6.0.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.0:
+ 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@^8.0.1:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
+ dependencies:
+ camelcase "^4.1.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^2.0.0"
+ read-pkg-up "^2.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^7.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"
+
+yauzl@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
+ dependencies:
+ fd-slicer "~1.0.1"
+
+yeast@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"